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 ?
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.
-
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 -
Je vais essayer de trouver un moyen de contourner mon probleme.
Merci de m'avoir consacrer du temps. -
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 -
j'ai pas d'info bulle, portant elles sont parametres.
J'ai verifier mes variables sont bonnes. -
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 -
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. -
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 -
lorsque j'enleve les deux points, mais vb les remets automatiquement
-
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
-
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. -
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 -
toujours le meme soucis
-
Dans ce cas, juste après le if, essaie cette ligne
Me![base TVA0] = 0
a la place de
[base TVA0] = 0
-
j'ai toujours le meme message d'erreur.
-
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
-
A chaque fois j'ai le message d'erreur. il reste bloqué sur la ligne du if.
-
et si tu appuie encore sur F8??
-
c'est la ligne du If qui est surligné.
-
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? -
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
Suivant