(VBA) MsgBox à lancer sous conditions dans le déroulé macro.

Résolu
Gilles.DR315 Messages postés 28 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je vous explique ma problématique
J'ai une commande macro nommée "simuler" sur la page résultat.

Au clic de cette commande, elle va copier en amont des valeurs de cellules dans une autre feuille.
dans le déroulé à la fin j'aimerai lancer une msgbox "OUI/NON" si des conditions sont remplies.

La réponse OUI / NON a pour conséquence de copier des valeurs dans d'autres cellules.
et de relancer la macro depuis le début.

voici mon code :

If (Sheets("Résultat").Range("F9") = 5 And Sheets("Résultat").Range("H24") <> 0 And Sheets("Résultat").Range("D15") = "") Then
If MsgBox("Voulez vous maintenir la durée ?", vbQuestion + vbYesNo, "QUESTION ...") = vbYes Then
Sheets("Résultat").Range("D15") = Sheets("Résultat").Range("G15")
Call Simuler
Else
Sheets("Résultat").Range("D15") = Sheets("Résultat").Range("K15")
Call Simuler
End If


Il me manque un End If , si je le place avant MsgBox, elle se lance tout le temps, et ne tient plus compte des conditions.
ou alors il faut enlever le If avant Msg box mais çà ne marche pas.

Bref comment lancer une MsgBox sous conditions (valeurs dans une cellule)

merci de votre aide.

2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    If (Sheets("Résultat").Range("F9") = 5 And Sheets("Résultat").Range("H24") <> 0 And Sheets("Résultat").Range("D15") <> "") Then
        If MsgBox("Voulez vous maintenir la durée ?", vbQuestion + vbYesNo, "QUESTION ...") = vbYes Then
            Sheets("Résultat").Range("D15") = Sheets("Résultat").Range("G15")
            Call Simuler
        Else
            Sheets("Résultat").Range("D15") = Sheets("Résultat").Range("K15")
            Call Simuler
        End If
    End If


    Peut être...
    0
  2. Gilles.DR315 Messages postés 28 Statut Membre 1
     
    En effet çà fonctionne.
    et j'avais une erreur dans les conditions sur D15. ce qui permet d'éviter le message en boucle

    Merci

    je ne savais pas que End If pouvait se mettre 2 fois à la suite. Pour valider la syntaxe du code

    If (Sheets("Résultat").Range("F9") = 5 And Sheets("Résultat").Range("H24") <> 0 And Sheets("Résultat").Range("D15") = "") Then
        If MsgBox("Voulez vous maintenir la durée ?", vbQuestion + vbYesNo, "QUESTION ...") = vbYes Then
            Sheets("Résultat").Range("D15") = Sheets("Résultat").Range("G15")
            Call simuler
        Else
            Sheets("Résultat").Range("D15") = Sheets("Résultat").Range("K15")
            Call simuler
        End If
    End If
    
    
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      End If
      ferme le bloc
      If
      .
      Tu peux en avoir x à la suite, si tu as ouvert x blocs
      If
      ...

      Par contre, je te recommande d'indenter ton code. Non seulement ce sera plus lisible, mais en plus ça t'évitera de ne pas fermer un bloc.

      Exemple non indenté :
      Sub Machin()
      If (Sheets("Résultat").Range("F9") = 5 And Sheets("Résultat").Range("H24") <> 0 And Sheets("Résultat").Range("D15") = "") Then
      If MsgBox("Voulez vous maintenir la durée ?", vbQuestion + vbYesNo, "QUESTION ...") = vbYes Then
      Sheets("Résultat").Range("D15") = Sheets("Résultat").Range("G15")
      Call Simuler
      Else
      Sheets("Résultat").Range("D15") = Sheets("Résultat").Range("K15")
      Call Simuler
      End If
      End Sub

      Exemple indenté :
      Sub Machin()
      If (Sheets("Résultat").Range("F9") = 5 And Sheets("Résultat").Range("H24") <> 0 And Sheets("Résultat").Range("D15") = "") Then
          If MsgBox("Voulez vous maintenir la durée ?", vbQuestion + vbYesNo, "QUESTION ...") = vbYes Then
              Sheets("Résultat").Range("D15") = Sheets("Résultat").Range("G15")
              Call Simuler
          Else
              Sheets("Résultat").Range("D15") = Sheets("Résultat").Range("K15")
              Call Simuler
          End If
      End Sub

      Dans le second exemple, on voit clairement qu'il manque quelque chose.

      Nota : ces exemples sont simplistes. C'est encore plus vrai sur des codes plus longs et plus complexes...
      0