MsgBox successives

Résolu
Bonjour,

Voici mon code :

MsgBox2 = MsgBox("Voulez-vous remplir la TVA intracom à 19.6%?", vbYesNo, "Remplissage TVA intracom 19.6%")

MsgBox3 = MsgBox("Cette facture est-elle soummise à TVA intracom à 19.6%?", vbYesNo, "Vérification")

If MsgBox2 = vbYes Then

For i = 13 To DL

      If Sheets(1).Range("D" & i) = "RAN" Then Sheets(1).Range("P" & i).Select
    
        If MsgBox3 = vbYes Then Sheets(1).Range("P" & i) = Sheets(1).Range("K" & i)
        
    Next i
        
       
End If


En fait, j'aimerais que si on réponde Non à la question de la MsgBox2, alors le code continue, sinon, je veux sélectionner les cellules de la colonne P si les cellules de la colonnes D sont égales à "RAN". Je voudrais sélectionner ces cellules une par une et à chaque fois avec une MsgBox qui pose la question (La MsgBox3 quoi) entre chaque sélection. Si je répond "Oui" à la question de la MsgBox3 alors on remplit la cellule P en question, qui est égale à la cellule K sinon, on passe à la sélection suivante. Une fois toutes les lignes testées (il ne reste plus de "RAN"), on continue le code.

En termes plus mathématiques :

Si MsgBox2 = Non alors la suite du code continue. Si MsgBox2 = Oui, alors sélection des cellules de P une par une si cellule de D = "RAN". Entre chaque sélection, si MsgBox3 = Oui, alors, on remplir la cellule P avec un calcul, sinon, on passe à la ligne suivante. A la fin de toutes les vérifs, le code continue.

Merci d'avance.

Cordialement.

6 réponses

  1. Bonjour,

    Je crois qu'il suffirait de déplacer la ligne du msgbox3
    (au lieu d'utiliser les variable msgbox2 et msgbox3, j'ai directement utiliser msgbox dans les IF)

    If MsgBox("Voulez-vous remplir la TVA intracom à 19.6%?", vbYesNo, "Remplissage TVA intracom 19.6%") = vbYes Then
        For i = 13 To DL
            If Sheets(1).Range("D" & i) = "RAN" Then
                Sheets(1).Range("P" & i).Select
                If MsgBox("Cette facture est-elle soummise à TVA intracom à 19.6%?", vbYesNo, "Vérification") = vbYes Then
                    Sheets(1).Range("P" & i) = Sheets(1).Range("K" & i)
                End If
            End If
        Next i
    End If


    Aussi, tu peux ajouter des données dynamiquement dans ton msgbox.
    Exemple, si tu as un # de facture dans ta colonne A.

    msgbox("La facture # " & Sheets(1).Range("A" & i).value & " est-elle soummise à TVA intracom à 19.6%?", vbYesNo, "Vérification") 
    0
    1. Merci beaucoup de m'avoir simplifié tout ça. Je crois que j'étais en train de me perdre avec toutes ces conditions.

      Je voulais simplement savoir, si à la place de vouloir le numéro de facture dans la MsgBox, je voulais directement avoir la TVA, soit un calcul qui ferait ARRONDI(Cellule K * 0.196;2). Est-ce possible?

      Merci d'avance.

      Cordialement.
      0
      1. Bonjour,
        Si on résume :
        MsgBox ("2 + 2 = " & 2 + 2)

        va vous afficher "2 + 2 = 4"

        On peut concatèner des calculs et du texte
         msgbox ("valeur TVA : " & round(range("K" & i).value * 0.196,2) & " et voila")
        0
    2. Ah super sympa merci ça marche super bien.

      Vraiment merci de m'aider, j'essaye d'apprendre et je me donne à fond.

      Cordialement.
      0
      1. Supposons que je souhaite maintenant ajouter à cette macro un bouton "Cancel" qui me fera sortir de la boucle (si je me rend compte que j'ai trop de "RAN" et que je souhaite passer tout de suite à la suite du code).

        Comment je peux m'y prendre svp?

        Merci d'avance.

        Cordialement.
        0
        1. J'ai essayé le code suivant :

          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)
                       ElseIf MsgBox("La facture suivante (tiers : " & Range("B" & i) & " ) est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits") = vbCancel Then Exit For
                      End If
                  End If
              Next i
          End If


          Mais la MsgBox apparaît souvent 2 fois....
          0
          1. J'ai aussi essayé ce code, mais la MsgBox se lance 2 fois à chaque fois...

            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 (tiers : " & Range("B" & i) & " ) est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits") = vbCancel Then Exit For
                    End If
                Next i
            End If
            0
            1. Bonjour,

              Le Msgbox apparait deux fois car il est appeler deux fois (dans chacun des IF).
              Pour éviter cela, on va utiliser une variable (un peu comme votre code initial) et valider avec des elseif

              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
                          msgbox2 = MsgBox("La facture suivante (tiers : " & Range("B" & i) & " ) est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits")
                          If msgbox2 = vbYes Then
                              Sheets(1).Range("N" & i) = Sheets(1).Range("K" & i)
                          elseIf msgbox2 = vbCancel then
                               exit For
                          End if
                      End If
                  Next i
              End If


              Prendre note que le restant du code après la boucle s'effectue avec un Exit For .
              Si vous voulez complètement sortir, alors un Exit Sub ferait l'affaire.
              0
            2. Merci beaucoup. Il s'agit en effet d'un Exit For dont j'ai besoin, il faut que le code suivant s'exécute en cas de "Cancel". Merci pour tout.
              0