Code vb pour recuperer une valeur dans access

Résolu
J'ai un petit probleme dans access.
Dans un formulaire, j'ai un champ qui prend la valeur du resultat d'une requete affiché dans un sous-formulaire grace au code suivant : [base TVA0] = [Base TVA0 sous-formulaire].Form![SommeDePrix_element] ca marche. Mais lorsque j'ai pas de resultat de requete (ce qui est normal), cela me crée une erreur. Moi je voudrais que le champ se mette a zero. Comment faire ?
Configuration: Windows XP
Internet Explorer 6.0

27 réponses

Résumé de la discussion

Le problème porte sur un champ d’un formulaire Access qui doit prendre le résultat d’une requête affichée dans un sous-formulaire, mais l’absence de résultats génère une erreur. Parmi les approches, il faut traiter Null comme zéro et éviter la comparaison avec une chaîne vide ; tester IsNull ou utiliser Nz sur le champ SommeDePrix_element. Des réponses préconisent aussi de vérifier le type de données du champ base TVA0 (numérique vs texte) et d’adapter le code en conséquence. D’autres suggèrent d’installer un arrêt sur ligne ou d’utiliser Nz dans l’affectation directe, et de manipuler la valeur via une variable temporaire dans le code.

Bobot (l’IA à votre service)
  1. Private Sub Commande49_Click()
    On Error GoTo Err_Commande49_Click
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

    If [Base TVA0 sous-formulaire].Form!SommeDePrix_element.Value = "" Then
    Me![base TVA0] = 0
    Else: [base TVA0] = [Base TVA0 sous-formulaire].Form![SommeDePrix_element]
    End If

    [Montant TVA55] = [base TVA55] * 0.055
    [Montant TVA196] = [base TVA196] * 0.196

    [Montant HT] = [base TVA0] + [base TVA55] + [base TVA196]
    [Montant TVA] = [Montant TVA55] + [Montant TVA196]
    [Montant TTC] = [Montant HT] + [Montant TVA]

    Exit_Commande49_Click:
    Exit Sub

    Err_Commande49_Click:
    [base TVA0] = 0
    Resume Exit_Commande49_Click

    End Sub
    1. Je vais essayer de trouver un moyen de contourner mon probleme.
      Merci de m'avoir consacrer du temps.
      1. Ben la je suis perdu parce que j'ai essayé le code que je t'ai indiqué, et avec mon prototype sa fonctionne, c'est à dire que si le champ est vide il me met bien 0 dans l'autre, et sinon il affecte bien la valeur
        Les seules erreurs que j'ai rencontré venaient du fait que j'avais mal nommé mes controles par rapport au code
        Donc désolé de ne pas pouvoir t'aider plus que sa
        1. j'ai pas d'info bulle, portant elles sont parametres.
          J'ai verifier mes variables sont bonnes.
          1. lorsque tu est en mode débogage, place ta souris sur une des variables du if pour faire apparaitre une infobulle, elle t'indiquera la valeur de la variable....donne moi stp la valeur des variables du if si c'est possible...
            Sinon, je suis perdu au moins autant que toi, je ne vois pas comment comparer une variable avec null avec une autre methode que celles proposées plus haut
            Essaie aussi de vérifier la syntaxe des variables entre [] parce que le compilateur ne les corrige pas automatiquement, donc vérifie dans les propriétés des controle leurs noms, et vérifie leurs syntaxe dans le code
            1. J'ai toujours le message d'erreur :
              Erreur d'execution 2113
              valeur incorrecte pour ce champ.

              Ce qui m'etonne, c'est que lorsque je regarde dans le debogueur, il bug sur la ligne
              [base TVA0] = [Base TVA0 sous-formulaire].Form![SommeDePrix element]
              alors que vu mon jeux d'essais, il ne devrait pas aller dans le else.

              J'y comprend plus rien, je suis perdu.
              1. Bon alors j'ai testé, et après plusieurs essais, il s'avère que le tests (le bloc if complet) corect est celui-ci

                If IsNull([Base TVA0 sous-formulaire].Form![SommeDePrix element]) Then
                   Me![base TVA0] = 0
                Else
                    [base TVA0] = [Base TVA0 sous-formulaire].Form![SommeDePrix element]
                End If
                


                Il ne faut pas du tout de : si il te les rajoute c mauvais signe
                Redis moi si il te sort une erreur
                1. lorsque j'enleve les deux points, mais vb les remets automatiquement
                  1. Enleve les deux points déjà après le else, et réessaie...mais je pense pas que l'erreur vienne de la, en revanche ce sera une source d'erreurs plus tard
                    1. voila le code.

                      Private Sub Commande49_Click()
                      DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

                      If [Base TVA0 sous-formulaire].Form!SommeDePrix_element.Value = "" Then
                      Me![base TVA0] = 0
                      Else: [base TVA0] = [Base TVA0 sous-formulaire].Form![SommeDePrix_element]
                      End If

                      [Montant TVA55] = [base TVA55] * 0.055
                      [Montant TVA196] = [base TVA196] * 0.196

                      [Montant HT] = [base TVA0] + [base TVA55] + [base TVA196]
                      [Montant TVA] = [Montant TVA55] + [Montant TVA196]
                      [Montant TTC] = [Montant HT] + [Montant TVA]

                      End Sub

                      l'autre piste que j'essaie s'est d'obliger le sous-formulaire a mettre un resultat a zero, mais je galere toujours.

                      C'est la premier fois que je viens sur un forums, c'est vraiment sympa de pouvoir trouver de l'aide. merci.
                      1. Waou..... je vais finir par sécher ...;-)
                        Il faudrait que tu m'envoie tout le code que tu a autour de ton if(juste le sub), je vais l'essayer
                        1. Dans ce cas, juste après le if, essaie cette ligne

                          Me![base TVA0] = 0

                          a la place de

                          [base TVA0] = 0
                          1. Est ce que le message d'erreur survient avant que le code n'apparaisse avec ta ligne d'arrêt? normalement ton code doit apparaitre puis lorsque tu appuie sur F8 une autre ligne devient surlignée...si le message d'erreur apparait alors que tu appuie sur F8, alors essaie ce if
                            if [Base TVA0 sous-formulaire].SommeDePrix_element.Value = "" then 
                            
                            
                            1. A chaque fois j'ai le message d'erreur. il reste bloqué sur la ligne du if.
                              1. Tu peut essayer de débugger a partir toujours de la ligne du if??
                                J'aimerais savoir quelle ligne du programme est surlignée après que tu aie appuyé sur la touche F8?
                                1. lorsque j'essaie ce code j'ai l'erreur suivante :
                                  erreur d'execution 2427
                                  expression sans parametres.

                                  c'est sympa a toi de me consacrer de temps. merci.
                                  • 1
                                  • 2