Comment sortir d'une boucle avant une MsgBox?

Résolu
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   -  
Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

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

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    0
  2. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    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.
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      C'est dans votre demande que ca coince, mais je vais arranger ca


      Sub 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+
      0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    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 

    0
  4. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    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.
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Une variable de type boolean n'admet que 2 valeurs 0 ou 1 (Faux ou vrai).
      Elle est systématiquement définie (initialisée) sur False.
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Salut pijaku, ca flotte

      Kuartz:
      un type de données Boolean est un type de données avec seulement deux valeurs possibles: vrai ou faux. (en francais)

      In most computer programming languages, a Boolean data type is a data type with only two possible values: true or false. (en anglais)
      0
    3. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      D'accord. Excellent moyen pour placer ma MsgBox en tout cas. Mais il fallait y penser.
      0
    4. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Ca vous dérange si je pose une autre petite dernière question concernant des MsgBox ici?
      0
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention  
       
      Re,

      Non, posez votre question
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    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.
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
      0
      1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
         
        Re,

        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.
        0
      2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention  
         
        Re,

        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
        0
      3. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
         
        Merci 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.
        0