Macro VBA double condition

Résolu/Fermé
linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 - 15 avril 2007 à 23:23
 cocodix - 7 déc. 2007 à 22:21
Bonjour,
Dans un userform, j'ai associé des commandes :

Voici la structure
Numéro = textbox11 (à saisir)
Désignation article = textbox12 (alimenté automatiquement par textbox11)
Nombre = textbox 13 (à saisir)
Prix = textbox14 (alimenté par textbox11)
Total = textbox 15 (calcul auto)

Total = textbox 14. Value * textbox 13.value

Je voudrais ajouter une condition : si text box 11 est égale à rien (oubli de saisie) afficher un message "pas de n° d'article" et me redonner la main pour saisir et que tout se passe bien une fois la saisie faite.

Je n'arrive pas à imbriquer les 2 contions... pas assez de connaissance. Voici mon résultat qui ne fonctionne pas.

If TextBox13.Value <> "" Then
If TextBox14.Value = "" Then
MsgBox "pas de n° d'article"

TextBox15.Value = TextBox14.Value * TextBox13.Value
Else: TextBox15.Value = ""
End if
End if
Merci à la personne qui voudra bien m'aider.
A voir également:

3 réponses

Bonjour Linette,
comme je peux comprendre dans ton message, la condition concerne textbox11 (d'ailleurs je ne vois qu'une seule condition) donc ta condition doit tenir compte de sa valeur et pas de la valeur des autres textbox :

Voila ce que je propose dans un premier temps :

if textbox11 = "" then
msgbox "pas de n° d'article..."
textbox11.SetFocus >>> redonne la main
else
reste de ton code
end if

dis moi si j'ai bien compris ce que tu veux ?
A+ masterseb
0
linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 3
16 avril 2007 à 21:31
Bonsoir Masterseb,
Voici ma saisie :
if textbox11 = "" then
msgbox "pas de n° d'article..."
textbox11.SetFocus
else
TextBox15.Value = TextBox14.Value * TextBox13.Value
end if

Le problème : lorsque je valide même en ayant saisi une valeur dans textbox11, j'ai la msgbox qui apparaît.
Comme je n'ai pas réussi à mettre la dernière conditon
Else: TextBox15.Value = "" j'ai un beug plus loin dans le programme.

Si j'explique mon problème "en français" :
si la textbox13 est différente de vide alors ma textbox11 doit être différente de vide, sinon j'affiche la msgbox et je peux reprendre ma saisie.
Si la textbox 13 et la 11 sont différentes de vide alors ma textbox15 correspond à la textbox13.value*textbox14.value. (textbox14 alimenté auto par la textbox11)
Si la texbox13 est vide, alors textbox15 reste vide. Cette commande est importante, sinon un beug apparaît plus loin dans le programme.

Lorsque j'ai saisi la valeur de la textbox11 et la textbox13, j'utilise un bouton qui copie les valeurs dans les lignes du tableau de mon userform et remet la ligne à 0.
Il s'agit d'une sorte de bon de commande.
A+ linette 44
0
Bonsoir Linette, voici la transcription exacte de ce que tu m'a écris en français. J'espère que c'est ce dont tu as besoin.

If TextBox13.Value <> "" Then
If TextBox11.Value <> "" Then
TextBox15.Value = TextBox13.Value * TextBox14.Value
Else
MsgBox "pas de n° d'article"
End If
else
textbox15.Value = ""
Textbox11.SetFocus
End If

je n'ai bien entendu pas tenu compte de la copie des valeurs dans ton tableau et de la remise à zéro.
a+ seb
0
linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 3 > masterseb
17 avril 2007 à 22:59
Bonsoir Masterseb,
J'ai donc inséré les nouvelles instructions :
quand je ne saisis pas de valeur dans textbox11, j'ai le message, c'est donc OK.
par contre, quand je reviens dans ma textbox11, que je fais ma saisie et que je clique sur le bouton OK qui vide la ligne et copie les valeurs dans mon tableau, j'ai un beug et la textbox15 n'est pas alimentée
Voici les instructions appliquées au bouton OK

Private Sub CommandButton3_Click()

Application.ScreenUpdating = False

Dim var1 As Currency
Dim var2 As Currency

' Recherche la ligne vide et recopie les valeurs de la ligne de saisie

For i = 16 To 241
If Commande("textbox" & i).Value = "" Then
Controls("TextBox" & i).Text = TextBox11.Text
Controls("TextBox" & i + 1).Text = TextBox12.Text
Controls("TextBox" & i + 2).Text = TextBox13.Text
Controls("TextBox" & i + 3).Text = TextBox14.Text
Controls("TextBox" & i + 4).Text = TextBox15.Text

' Calcule le total de la commande

var1 = TextBox15.Value>>>>>> LE BEUG EST REPERE ICI
var2 = TextBox246.Value
TextBox246.Value = var1 + var2

J'essaie d'améliorer ce programme qui a été réalisée par une autre personne mais n'ayant que quelle notion de VBA, c'est pas facile...
Merci de ton aide.
A+
Linette 44
0
masterseb > linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008
18 avril 2007 à 01:30
Bonsoir Linette, le bug qui se passe à la ligne var1 est tout à fait logique si textbox15 n'a pas été alimenté. Ce qui est beaucoup plus bizarre, c'est que la double condition fonctionne chez moi et alimente le textbox15 sans problème et dans tous les cas de figure. Donc je vais te poser la question suivante : cette double condition est-elle dans ton événement commandbutton3_click ou plutot dans l'événement textbox13_exit. J'ai besoin de savoir l'événement dns lequel il se trouve.
Cordialement. Seb
0
linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 3 > masterseb
18 avril 2007 à 02:06
Bonsoir Seb,
Cette double condition n'existait pas et c'est ce que j'essaie de mettre en place.
Je l'ai placée dans l'évènement textbox13
Cordialement
Linette44
0
masterseb > linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008
18 avril 2007 à 12:31
C'est bien ce qu'il me semblait. la double condition se trouve dans un événement du textbox13 et c'est bien pour ça que textbox15 ne s'alimente pas automatiquement. En fait, il s'agit d'une incohérence dans ta programmation.
Preuve : fait les opérations suivantes et tu verras :
1) oublie de mettre qque chose dans le textbox11
2) tu reçois le message en sortant du textbox13
3) tu ajoute une référence dans le textbox11
4) tu retourne dans le textbox13 et tu remet la même valeur qu'il y avait
5) tu quitte la textbox13 et tu verras que la textbox15 s'alimentera.
c'est du au fait que la double condition ne fonctionne qu'à la mise à jour ou à la sortie de ta textbox13.

lorsque tu remet à jour textbox11, tu dois, selon ta programmation, recommencer l'événement textbox13 pour vérifier si toutes les conditions sont remplies et alimenter textbox15.

Je cherche et je te recontacte pour savoir la meilleure solution à cette incohérence.

a+
0
Bonjour a tous,
Je n'arrive pas a avoir le code adequat pour mettre une barre de defilement verticale dans mon tableau, j'ai beau essaye depuis des jours, rien n'y fait et quand je mets un code ( trouve au hasard de mes recherches sur le net ), j'ai un fond blanc avec des ecritures dessus, et je ne peux meme pas y mettre mon texte, c'est si frustrant et je commence a en sortir avec des maux de tete serieux, j'ai essaye tant de fois sans succes, si l'un de vous peut m'aider et me donner le parfait code et aussi me dire ou il faudrait que je le fasse, j'en serai sincerement reconnaisssante .

Merci infiniment et a tres bientot j'espere.

Cocodix
0