Language vba excel - boucle

Résolu
galt19 -  
 galt19 -
Bonjour à tous,

Je suis en train de mettre au point un programme concernant une facture et une base de donnée de produit à vendre. Mon objectif est de faire une demande msgbox pour entrer la référence d'un produit, et afficher la désignation et le prix unitaire, et cela ligne après ligne sur le devis jusqu'à ce que la réponse au msxbox soit "non".

Mon programme fonctionne pour la première ligne, et lorsque je dis non cela s'arrête. En revanche, lorsque je dis oui pour entrer un nouveau produit, (à la deuxième ligne donc) la boucle devient infinie et les caractéristiques ne s'affichent pas.

Voici mon programme :

réponse = MsgBox("Voulez-vous indiquer une nouvelle référence de plante ?", vbYesNo, "PLANTE")
m = 3
n = 15
x = 1
If réponse = vbYes Then
Do While x > 0
plante = InputBox("Entrez la référence de la plante : ", "PLANTE", "ALB")
Worksheets("Devis").Cells(n, 1).Value = plante
Do While trouvé <> True
m = m + 1
If plante = Worksheets("Plantes").Cells(m, 1).Value Then
trouvé = True
Worksheets("Devis").Cells(n, 2).Value = Worksheets("Plantes").Cells(m, 2).Value
Worksheets("Devis").Cells(n, 4).Value = Worksheets("Plantes").Cells(m, 3).Value
n = n + 1
x = 1
réponse = MsgBox("Voulez-vous indiquer une nouvelle référence de plante ?", vbYesNo, "PLANTE")
End If
If réponse = vbNo Then
x = -1
End If
Loop
Loop
ElseIf réponse = vbNo Then
x = -1
End If

Qu'est ce qui pourrait justifier le fait que la boucle ne redémarre pas du début ?

Merci d'avance

1 réponse

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Essais comme ça:

    réponse = MsgBox("Voulez-vous indiquer une nouvelle référence de plante ?", vbYesNo, "PLANTE")
    encore = True
        While encore <> False
        m = 3
        n = 15
        x = 1
        If réponse = vbYes Then
            Do While x > 0
                plante = InputBox("Entrez la référence de la plante : ", "PLANTE", "ALB")
                Worksheets("Devis").Cells(n, 1).Value = plante
                Do While trouvé <> True
                    m = m + 1
                    If plante = Worksheets("Plantes").Cells(m, 1).Value Then
                        trouvé = True
                        Worksheets("Devis").Cells(n, 2).Value = Worksheets("Plantes").Cells(m, 2).Value
                        Worksheets("Devis").Cells(n, 4).Value = Worksheets("Plantes").Cells(m, 3).Value
                        n = n + 1
                        x = 1
                        réponse = MsgBox("Voulez-vous indiquer une nouvelle référence de plante ?", vbYesNo, "PLANTE")
                        If reponse = vbYes Then
                            encore = False
                        Else
                            encore = True
                            x = x - 1
                        End If
                    End If
                Loop
            Loop
        ElseIf réponse = vbNo Then
            encore = True
            x = -1
        End If
        Wend

    1
    1. galt19
       
      Bonjour,

      Merci, j'ai essayé comme ça, par contre ça fonctionne pas. J'ai toujours le problème de boucle infinie dès la deuxième référence.
      Pour décrire : voulez vous indiquer une nouvelle réf => oui, Entrez la ref : j'entre la réf et tout s'affiche. Voulez vous entrez une nouvelle réf => oui ; entrer la ref = et la il n'y a que la réf qui s'affiche et "entrez la ref" se repose automatiquement. Et quand je mets annuler, cela me supprime la 2eme réf mais la boucle repart de nouveau sur la question. Je ne sais pas comment résoudre ce problème, ca me paraît compliquer.
      0
    2. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Bonjour,

      dsl, je n'avais pas fait de test hier soir. Effectivement ça boucle pas comme il faudrait :(

      Avec ça doit mieux tourner:

      encore = True
      
          While encore <> False
          n = 15
          x = 1
              Do While x > 0
                  m = 3
                  trouvé = False
                  plante = InputBox("Entrez la référence de la plante : ", "PLANTE", "ALB")
                  Worksheets("Devis").Cells(n, 1).Value = plante
                  Do While trouvé <> True
                      If plante = Worksheets("Plantes").Cells(m, 1).Value Then
                          trouvé = True
                          Worksheets("Devis").Cells(n, 2).Value = Worksheets("Plantes").Cells(m, 2).Value
                          Worksheets("Devis").Cells(n, 4).Value = Worksheets("Plantes").Cells(m, 3).Value
                          n = n + 1
                          reponse = MsgBox("Voulez-vous indiquer une nouvelle référence de plante ?", vbYesNo, "PLANTE")
                          If reponse = vbYes Then
                              encore = True
                          Else
                              encore = False
                              x = x - 1
                          End If
                      End If
                  m = m + 1
                  Loop
              Loop
          Wend
      0
    3. Polux31 Messages postés 7219 Statut Membre 1 204
       
      S'il faut passer d'abord par le message "Voulez-vous indiquer une nouvelle référence de plante ?"

      encore = True
          n = 15
          While encore <> False
              reponse = MsgBox("Voulez-vous indiquer une nouvelle référence de plante ?", vbYesNo, "PLANTE")
              If reponse = vbYes Then
                  x = 1
                  Do While x > 0
                      m = 3
                      trouvé = False
                      plante = InputBox("Entrez la référence de la plante : ", "PLANTE", "ALB")
                      Worksheets("Devis").Cells(n, 1).Value = plante
                      Do While trouvé <> True
                          If plante = Worksheets("Plantes").Cells(m, 1).Value Then
                              trouvé = True
                              Worksheets("Devis").Cells(n, 2).Value = Worksheets("Plantes").Cells(m, 2).Value
                              Worksheets("Devis").Cells(n, 4).Value = Worksheets("Plantes").Cells(m, 3).Value
                              n = n + 1
                              x = -1
                          End If
                      m = m + 1
                      Loop
                  Loop
              Else
                  encore = False
                  x = x - 1
              End If
          Wend
      0
    4. galt19
       
      Génial ça marche impeccable. Un grand merci, ça fait un moment que je travaillais dessu sans trouver la solution, ça va pouvoir m'aider dans mes activités. Et désolé pour le travail :)

      bonne fin de soirée
      0