Macro VBA double condition

Résolu
linette44 Messages postés 23 Statut Membre -  
 cocodix -
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.
Configuration: Windows XP
Firefox 1.5.0.11

3 réponses

  1. masterseb
     
    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
  2. linette44 Messages postés 23 Statut Membre 3
     
    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
    1. masterseb
       
      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
    2. linette44 Messages postés 23 Statut Membre 3 > masterseb
       
      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
    3. masterseb > linette44 Messages postés 23 Statut Membre
       
      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
    4. linette44 Messages postés 23 Statut Membre 3 > masterseb
       
      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
    5. masterseb > linette44 Messages postés 23 Statut Membre
       
      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
  3. cocodix
     
    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