Language vba excel - boucle

Résolu/Fermé
galt19 - 28 janv. 2014 à 22:04
 galt19 - 29 janv. 2014 à 22:40
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
A voir également:

1 réponse

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
28 janv. 2014 à 22:26
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
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
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 29/01/2014 à 13:37
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
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
29 janv. 2014 à 13:49
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
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