Comment sortir d'une boucle avant une MsgBox?
Résolu
Bonjour,
Ce code permet de lancer une MsgBox sous condition. Par contre, je voudrais qu'elle ne se lance qu'une fois. Donc il faudrait qu'elle soit hors de la boucle. Je ne sais pas comment la faire sortir sans perdre la condition If.
Pourriez-vous m'aider svp?
For i = 13 To DL
If Sheets(1).Range("V" & i).Value - Sheets(1).Range("K" & i).Value <> 0 Then
Sheets(1).Rows(i).Interior.Color = RGB(255, 192, 0)
MsgBox ("ERREUR")
End If
Next i
End Sub
Ce code permet de lancer une MsgBox sous condition. Par contre, je voudrais qu'elle ne se lance qu'une fois. Donc il faudrait qu'elle soit hors de la boucle. Je ne sais pas comment la faire sortir sans perdre la condition If.
Pourriez-vous m'aider svp?
5 réponses
-
Re,
Voilà j'ai ce code, ça fait depuis le début de l'après-midi que je suis dessus...
If MsgBox("Voulez-vous vérifier la TVA sur les débits?", vbYesNo, "Vérif RAN TVA débits") = vbYes Then For i = 13 To DL If Sheets(1).Range("D" & i) = "RAN" Then Sheets(1).Range("B" & i).Select If MsgBox("La facture suivante (tiers : " & Range("B" & i) & " ) est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits") = vbYes Then Sheets(1).Range("N" & i) = Sheets(1).Range("K" & i) End If If MsgBox("La facture suivante est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits") = vbCancel Then Exit For End If Next i End If
(Rassurez vous, toutes les variables ont été bien définies avant mais le code complet est très long)
Les MsgBox se comportent exactement comme je le veux. Le problème est que comme j'ai 2 If avec des MsgBox (je ne sais pas faire autrement...), que je réponde quoi que ce soit à la 2ème MsgBox, elle apparaitra 2 fois et ma 2ème réponse donnera le bon comportement.
Merci d'avance encore une fois.-
Re,
Pour moi la deuxieme msgbox n'a pas d'utilite ou je n'ai pas tout compris
Sub test() If MsgBox("Voulez-vous vérifier la TVA sur les débits?", vbYesNo, "Vérif RAN TVA débits") = vbYes Then For i = 13 To DL If Sheets(1).Range("D" & i) = "RAN" Then If MsgBox("La facture suivante (tiers : " & Range("B" & i) & " ) est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits") = vbYes Then Sheets(1).Range("N" & i) = Sheets(1).Range("K" & i) End If End If Next i End If End Sub -
@f894009Re,
Pardon je dois mal m'expliquer. En fait, j'aurais voulu que le bouton Cancel de la 2ème MsgBox de votre code ci-dessus arrête la vérification de la TVA sur les débits. En gros, si je clique sur le bouton "Annuler", j'aurais voulu que l'on passe immédiatement à la suite du code. -
@KuartzRe,
Sub test() DL = 20 If MsgBox("Voulez-vous vérifier la TVA sur les débits?", vbYesNo, "Vérif RAN TVA débits") = vbYes Then For i = 13 To DL If Sheets(1).Range("D" & i) = "RAN" Then retval = MsgBox("La facture suivante (tiers : " & Range("B" & i) & " ) est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits") If retval = vbYes Then Sheets(1).Range("N" & i) = Sheets(1).Range("K" & i) ElseIf retval = vbCancel Then MsgBox "Bye........" Exit For End If End If Next i End If End Sub -
@f894009Merci pour ce nouvel outil dont je vais abuser et réabuser à l'infini : "retval"
Je vous remercie pour le temps passé à m'aider et pour vos compétences.
Cordialement.
-
-
Merci beaucoup à vous deux !
Tout marche parfaitement. Au risque de trop en demander, pouvez-vous m'expliquer en gros le principe de "Boolean"?
Merci en tout cas.
Cordialement. -
ModérateurBonjour,
Ceci peut être :
Dim i As Long, Erreur As Boolean Erreur = False 'ligne inutile mais là pour la compréhension For i = 13 To DL If Sheets(1).Range("V" & i).Value - Sheets(1).Range("K" & i).Value <> 0 Then Sheets(1).Rows(i).Interior.Color = RGB(255, 192, 0) Erreur = True End If Next i If Erreur Then MsgBox "ERREUR" End Sub
-
Bonjour et merci pour la réponse.
Cependant, le code ne fonctionne pas comme je le voudrais. En effet, la première ligne concernée est colorée en orange, et la MsgBox apparaît bien. Mais les lignes suivantes concernées ne sont pas colorées alors que le code est fini.
Cordialement.-
Re,
C'est dans votre demande que ca coince, mais je vais arranger caSub test() Dim Flag_ERREUR As Boolean DL = 20 For i = 13 To DL If Sheets(1).Range("V" & i).Value - Sheets(1).Range("K" & i).Value <> 0 Then Sheets(1).Rows(i).Interior.Color = RGB(255, 192, 0) If Not Flag_ERREUR Then MsgBox ("ERREUR") End If Flag_ERREUR = True End If Next i End Sub
A+
-
-
Bonjour,
Sub test() For i = 13 To DL If Sheets(1).Range("V" & i).Value - Sheets(1).Range("K" & i).Value <> 0 Then Sheets(1).Rows(i).Interior.Color = RGB(255, 192, 0) MsgBox ("ERREUR") Exit For End If Next i End Sub