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

Résolu/Fermé
Gilles.DR315 Messages postés 26 Date d'inscription samedi 2 novembre 2013 Statut Membre Dernière intervention 27 janvier 2015 - Modifié par Gilles.DR315 le 22/01/2014 à 10:52
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 22 janv. 2014 à 11:07
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.

A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
22 janv. 2014 à 10:35
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
Gilles.DR315 Messages postés 26 Date d'inscription samedi 2 novembre 2013 Statut Membre Dernière intervention 27 janvier 2015 1
Modifié par pijaku le 22/01/2014 à 11:03
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
22 janv. 2014 à 11:07
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