IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

NZ ne fonctionne pas dans mon formulaire


Sujet :

IHM

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut NZ ne fonctionne pas dans mon formulaire
    Bonjour à tous,

    Dans des champs calculés de sous formulaires j'ai utilisé pour éviter que ne se propage une erreur sur d'autres champs mais je continue à avoir des messages "#Erreur! ou #Type" lorsque aucun registre ne s'affiche.

    Je ne peux pas laisser le formulaire (vide) sans ligne enregistrée au moins avec un zéro dans un des champs sous peine d'avoir ce message d'erreur.
    Pourtant est censé remplacer toute valeur nulle ou inexistante comme "0" !

    Que fais-je mal ?

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Il est possible que ce soit (Calcul) qui renvoie une erreur et dans ce cas NZ propage l'erreur. Il faudrait gérer l'erreur au niveau Calcul.

    De plus prend garde à NZ car avec les nombres il fait parfois sauter les décimales ... pas cool. Dans le doute il est plus prudent d'utiliser IIF(not IsNull(TaValeur);TaValeur;0).

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Il est possible que ce soit (Calcul) qui renvoie une erreur et dans ce cas NZ propage l'erreur. Il faudrait gérer l'erreur au niveau Calcul.

    De plus prend garde à NZ car avec les nombres il fait parfois sauter les décimales ... pas cool. Dans le doute il est plus prudent d'utiliser IIF(not IsNull(TaValeur);TaValeur;0).
    Bonjour,

    Non, tous les champs calculés fonctionnent bien, ce problème se manifeste lorsque aucune donnée n'est rentrée pour un registre donné dans un sous formulaire.

    Je m'explique :

    J'ai un formulaire Devis / Factures principal à onglets, l'un des onglets sert à afficher un sous formulaire "Acomptes", en pied de ce sous-formulaire il y a un champ somme() qui calcule le total d'un champ. Tout va bien à condition que l'ajout soit autorisé dans celui-ci, si je fais allowadditions=false pour éviter de voir des lignes vierges si aucun acompte n'a été versé c'est là que les champs calculés ne fonctionnent plus.

    Sur le formulaire principal sont repris le même type de champ que sous le sous formulaire et ils marchent seulement quand un acompte existe aussi ...

    Dès que je créé une ligne vierge qui contient un zéro dans le champ Total, tous les calculs réapparaissent...

    Comment faire pour que lorsque le formulaire Acomptes est encore vierge les champs du formulaire principal soient calculés ou marquent zéro à la place de "#Erreur!" ?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir,

    Dans le pied de ce sous formulaire, reprend tes opérations sur un nouveau champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(IsError([TonChampAsoucis]);0;[TonChampAsoucis])
    Cordialement.

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par francishop Voir le message
    Bonsoir,

    Dans le pied de ce sous formulaire, reprend tes opérations sur un nouveau champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VraiFaux(IsError([TonChampAsoucis]);0;[TonChampAsoucis])
    Cordialement.
    Merci pour ta réponse,

    Je n'arrive pas à visualiser comment mettre ça dans le formulaire, tu veux dire qu'il faut rajouter un nouveau champ faisant référence à celui qui fait les calculs et ensuite celui çi transformera le résultat en devenant celui qui affiche ? Un genre de by-pass ?

    D'autre part, question indiscrète :
    Es-tu developpeur junior ?

    Merci pour ta réponse

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    En suivant l'idée de francishop (au passage merci à lui, je ne connaissais pas IsError()) je remplacerai la source du champ qui affiche tes #Erreur et #Type par ce qu'il suggère ou tu peux rendre invisible le champ qui afiche les erreurs et créer un nouveau champ qui utlise iSError().

    A+

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par marot_r Voir le message
    En suivant l'idée de francishop (au passage merci à lui, je ne connaissais pas IsError()) je remplacerai la source du champ qui affiche tes #Erreur et #Type par ce qu'il suggère ou tu peux rendre invisible le champ qui afiche les erreurs et créer un nouveau champ qui utlise iSError().

    A+
    Bonjour à toi,

    Je viens d'esayer la méthode de Francishop mais ça ne marche tjs pas lorsque le sous formulaire ne contient aucune ligne ... la logique du champ proposé est d'afficher un zéro lorqu'il n'y aurait aucune valeur, ça ressemble à NZ mais en étant plus strict, cependant aucun zéro ne s'affiche et #Erreur est tjs présent.

    Quand le SF contient au moins une ligne les calculs se font sans problème ! Je vais m'arracher les cheveux !!!

    C'est l'état du sous formulaire (AllowAdditions=false) qui provoque cette erreur, alors comment faire pour que le SF puisse rester vierge et sans ligne sans que ça n'affecte les calculs du formulaire principal ?

    Merci d'avance à celui qui trouvera !

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Le IsError() ne réagit pas ?

    Pourrais-tu poster la source de ton champ en erreur ?

    Une autre solution consiterai à changer la source de ton champ si il n'y a pas de données mais c'est un peu plus accrobatique.

    A+

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Le IsError() ne réagit pas ?

    Pourrais-tu poster la source de ton champ en erreur ?

    Une autre solution consiterai à changer la source de ton champ si il n'y a pas de données mais c'est un peu plus accrobatique.

    A+
    Bonjour,

    J'insiste sur le fait que les champs calculés marchent parfaitement tant que le SF contient des données donc cela ne peut pas venir des champs calculés du SF ...
    Deplus ces champs ne sont que des somme() en pied de SF.

    Je recherche donc le moyen que lorsqu'il n'y ait aucune ligne dans le SF les champs du Formulaire Principal se calculent quand même.

    Merci

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    J'ai bien compris mais j'aimerai bien voir la source de ton champ qui affiche l'erreur, cela aiderai à trouver une solution.

    Ce champ en erreur est dans le sous formulaire ou dans le formulaire principal ?

    A+

  11. #11
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par marot_r Voir le message
    J'ai bien compris mais j'aimerai bien voir la source de ton champ qui affiche l'erreur, cela aiderai à trouver une solution.

    Ce champ en erreur est dans le sous formulaire ou dans le formulaire principal ?

    A+
    Bon, je répète :

    Aucun problème de calcul ou de source, tout est correct.

    1 - J'observe que si le formulaire acompte n'a aucune ligne (donc aucun champ visible) le champ calculé situé en pied de SF montre #Erreur.

    2 - Lorsqu'une ligne est ajoutée aprés clic sur le bouton "Ajouter" (qui exécute un Alloweditions=true) permettant de saisir un acompte, le champ calculé marche car il trouve un champ [Montant Acompte]=0 visible dans la seule ligne en question.

    Toute la question est de comment faire pour que lorsque le SF Acompte est complétement vide (aucune ligne de registre) les champs calculés du FP le considérent comme une valeur 0 ? et que continue la logique de calcul ?

    Merci à tous

  12. #12
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Bon, je répète :

    Aucun problème de calcul ou de source, tout est correct.

    1 - J'observe que si le formulaire acompte n'a aucune ligne (donc aucun champ visible) le champ calculé situé en pied de SF montre #Erreur.

    2 - Lorsqu'une ligne est ajoutée aprés clic sur le bouton "Ajouter" (qui exécute un Allowadditions=true) permettant de saisir un acompte, le champ calculé marche car il trouve un champ [Montant Acompte]=0 visible dans la seule ligne en question.

    Toute la question est de comment faire pour que lorsque le SF Acompte est complétement vide (aucune ligne de registre) les champs calculés du FP le considérent comme une valeur 0 ? et que continue la logique de calcul ?

    Merci à tous

  13. #13
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bah tiens j'ai eu à peu près le même problème sur un de mes formulaires qui comporte un contrôle à onglets
    J'ai quatre onglets avec chacun un sous formulaire(SF) comportant un champ invisible (txt_total) qui fait le total des lignes du SF dans lequel il se trouve...Sur mon formulaire principal, j'ai un champ un dernier champ txt_total qui fait la somme des 4 autres qui se trouvent sur les SF...
    Lorsque j'avais au moins un SF sans aucune ligne, j'avais une erreur ! Donc à peu près comme toi

    Voilà la solution que j'ai trouvée pour pallier au problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub Form_Current()
     
    Dim ctl As Control
     
    For Each ctl In Me.Controls                             ' Pour chaque contrôle du formulaire
        If Left(ctl.Name, 2)="sf" Then                      ' Regarde les deux 1ères lettres du nom du contrôle et c'est "sf" alors
            With ctl.Form
                Select Case .RecordsetClone.RecordCount     ' On compte le nbre d'enregistrement du SF
                    Case 0                                  ' Si il y en a 0
                        .txt_total.ControlSource = ""       ' Met RIEN en tant que source du champ txt_total
                        .txt_total = 0                      ' Attribue la valeur 0 au champ invisible qui contient le total d'heures du SF
                    Case Is > 20                            ' Si il y en a plus de 20
                        .ScrollBars = 2                     ' Affiche l'ascenceur
                End Select
            End With
        End If
    Next ctl
     
    End Sub

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Aucun problème de calcul ou de source, tout est correct.
    Désolé de répéter moi aussi ... ça doit être l'âge.

    Ton calcul n'est pas correct puisqu'il ne te donne pas le résultat que tu attends lorsqu'il n'y a pas d'enregistrement.

    Il faut donc le modifier ou mdifier la façon dont il est traité.

    Pour te suggérer une modification, il me faut savoir comment tu le calcule (pas en théorie, je veux savoir ce qu'il y a comme équation dans ce champ) et où il est affiché.

    A+

  15. #15
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Aucun problème de calcul ou de source, tout est correct.
    Désolé de répéter moi aussi ... ça doit être l'âge.

    Ton calcul n'est pas correct puisqu'il ne te donne pas le résultat que tu attends lorsqu'il n'y a pas d'enregistrement.

    Il faut donc le modifier ou mdifier la façon dont il est traité.

    Pour te suggérer une modification, il me faut savoir comment tu le calcule (pas en théorie, je veux savoir ce qu'il y a comme équation dans ce champ) et où il est affiché.

    A+
    Bonjour à toi,

    Il s'agît tout bêtement d'un somme(Total Acompte), il marche tant qu'il existe une ligne dans le SF, si aucune ligne car AllowAdditions=false le champ indique #Erreur

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Donc ton NZ() est fait dans la source de données sur le calcul de [Total Acompte] ?

    Si oui, essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Somme(Nz([Total Acompte],0))
    si cela ne marche pas essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Somme(iif(isError([Total Acompte]),0,[Total Acompte]))
    A+

  17. #17
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par paidge Voir le message
    Bah tiens j'ai eu à peu près le même problème sur un de mes formulaires qui comporte un contrôle à onglets
    J'ai quatre onglets avec chacun un sous formulaire(SF) comportant un champ invisible (txt_total) qui fait le total des lignes du SF dans lequel il se trouve...Sur mon formulaire principal, j'ai un champ un dernier champ txt_total qui fait la somme des 4 autres qui se trouvent sur les SF...
    Lorsque j'avais au moins un SF sans aucune ligne, j'avais une erreur ! Donc à peu près comme toi

    Voilà la solution que j'ai trouvée pour pallier au problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Private Sub Form_Current()
     
    Dim ctl As Control
     
    For Each ctl In Me.Controls                             ' Pour chaque contrôle du formulaire
        Select Case Left(ctl.Name, 2)                       ' Regarde les deux 1ères lettres du nom du contrôle
            Case "sf"                                       ' Si c'est "sf" (sous-formulaire)
                With ctl.Form
                    Select Case .RecordsetClone.RecordCount ' Compte le nbre d'enregistrement du SF
                        Case 0                              ' Si il y en a 0
                            .txt_total.ControlSource = ""   ' Met RIEN en tant que source du champ txt_total
                            .txt_total = 0                  ' Attribue la valeur 0 au champ invisible qui contient le total d'heures du SF
                        Case Is > 20                        ' Si il y en a plus de 20
                            .ScrollBars = 2                 ' Affiche l'ascenceur
                    End Select
                End With
        End Select
    Next ctl
     
    End Sub
    Bonjour et merci de ta réponse,

    Mais quelle horreur ! me dis pas qu'il faut encore programmer pour un truc aussi bête ? C'est délirant, doit bien y avoir une fonction qui le fasse non ?

    Sinon moi aussi c'est un formulaire à onglets sous Access 2010, le pb doit venir de là :
    Quand aucune ligne de registre n'apparait dans le SF et donc aucun champ faisant référence qu calcul il ne sait pas le remplacer par 0 !

    Doit bien y avoir une méthode !

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Essaye aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =iif(isError(Somme([Total Acompte])), 0, Somme([Total Acompte]))
    Si aucun ne marche alors il va falloir recourrir au VBA.

    A+

  19. #19
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par marot_r Voir le message
    Essaye aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =iif(isError(Somme([Total Acompte])), 0, Somme([Total Acompte]))
    Si aucun ne marche alors il va falloir recourrir au VBA.

    A+
    A tête reposée je me suis rendu compte que :

    Lorsque l'on fait un champ calculé faisant référence à la valeur d'un champ et que le champ référencé n'apparaît pas dans le formulaire à un moment donné, il est tout à fait normal que le calcul soit impossible à réaliser puisque le champ n'existe pas à un moment donné...

    Il me faut donc trouver un palliatif et il se pourrait que IsError en soit la clé comme tu le mentionnes, je croise les doigts ... J'essaye dans qqes heures et je vous tiens au courant...

  20. #20
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par clickandgo Voir le message
    A tête reposée je me suis rendu compte que :

    Lorsque l'on fait un champ calculé faisant référence à la valeur d'un champ et que le champ référencé n'apparaît pas dans le formulaire à un moment donné, il est tout à fait normal que le calcul soit impossible à réaliser puisque le champ n'existe pas à un moment donné...

    Il me faut donc trouver un palliatif et il se pourrait que IsError en soit la clé comme tu le mentionnes, je croise les doigts ... J'essaye dans qqes heures et je vous tiens au courant...
    Je viens d'essayer de nouveau, Iif devient "Vrai/Faux" ; j'avais déjà essayé cette suggestion, ça ne marche pas !

    ET c'est LOGIQUE ! : Un champ calculé ne peut effectuer des calculs si un des champs mentionné dedans n'existe pas encore dans le Sous formulaire...

    Il va falloir ruser ! si vous avez une suggestion, je suis tjs preneur !!!

    merci les gars !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/12/2010, 12h01
  2. Réponses: 5
    Dernier message: 14/07/2010, 06h26
  3. [MySQL] insert into ; ne fonctionne pas dans mon form
    Par gastoncs dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/07/2010, 16h22
  4. stop() ne fonctionne pas dans mon animation
    Par edzodzinam dans le forum Flash
    Réponses: 1
    Dernier message: 03/07/2009, 12h43
  5. Réponses: 4
    Dernier message: 11/09/2006, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo