Cours VBA : les boîtes de dialogue
MsgBox
Pour le moment, nous n'avons utilisé la boîte de dialogue MsgBox que pour afficher une information :
Sub effacerB2()
Range("B2").ClearContents
MsgBox "Le contenu de B2 a été effacé !"
End Sub
Dans ce cas, MsgBox n'est utilisé qu'avec un seul argument.
Aperçu du résultat de ce code :

Nous allons maintenant créer une boîte de dialogue qui va nous demander de confirmer la suppression avant d'exécuter les instructions.
Voici les 3 arguments que nous allons renseigner :
MsgBox([TEXTE], [BOUTONS], [TITRE])
- Texte : texte de la boîte de dialogue
- Boutons : choix des boutons (Oui, Non, Annuler, etc.) + d'autres options
- Titre : titre de la boîte de dialogue
Sub effacerB2()
If MsgBox("Etes-vous certain de vouloir supprimer le contenu de B2 ?", vbYesNo, "Demande de confirmation") = vbYes Then
Range("B2").ClearContents
MsgBox "Le contenu de B2 a été effacé !"
End If
End Sub
Aperçu :

vbYesNo indique que les boutons de la boîte de dialogue sont les boutons "Oui" et "Non", vbYes correspond au bouton "Oui" :
If MsgBox("Texte", vbYesNo, "Titre") = vbYes Then 'Si le bouton Oui est cliqué
Les différentes possibilités pour le second argument de MsgBox
Constante | Valeur | Description |
---|---|---|
vbOKOnly | 0 | ![]() |
vbOKCancel | 1 | ![]() ![]() |
vbAbortRetryIgnore | 2 | ![]() ![]() ![]() |
vbYesNoCancel | 3 | ![]() ![]() ![]() |
vbYesNo | 4 | ![]() ![]() |
vbRetryCancel | 5 | ![]() ![]() |
vbCritical | 16 | ![]() |
vbQuestion | 32 | ![]() |
vbExclamation | 48 | ![]() |
vbInformation | 64 | ![]() |
vbDefaultButton1 | 0 | Bouton par défaut : Bouton 1 |
vbDefaultButton2 | 256 | Bouton par défaut : Bouton 2 |
vbDefaultButton3 | 512 | Bouton par défaut : Bouton 3 |
vbApplicationModal | 0 | Force l'utilisateur à répondre avant de poursuivre avec Excel |
vbSystemModal | 4096 | Force l'utilisateur à répondre avant de poursuivre avec d'autres applications (boîte de dialogue au premier plan) |
Les valeurs à 0 sont celles par défaut.
Le deuxième argument de MsgBox peut prendre plusieurs valeurs de ce tableau.
Par exemple, pour une boîte de dialogue avec "Oui, Non, Annuler" + icône exclamation + bouton 2 par défaut :
MsgBox("Texte", vbYesNoCancel + vbExclamation + vbDefaultButton2, "Titre")
Aperçu :

Les constantes peuvent être remplacées par leur valeur respective, ces 3 lignes affichent une boîte de dialogue identique :
MsgBox("Texte", vbYesNoCancel + vbExclamation + vbDefaultButton2, "Titre")
MsgBox("Texte", 3 + 48 + 256, "Titre")
MsgBox("Texte", 307, "Titre")
Les valeurs renvoyées par MsgBox
Constante | Valeur | Bouton correspondant à la valeur |
---|---|---|
vbOK | 1 | ![]() |
vbCancel | 2 | ![]() |
vbAbort | 3 | ![]() |
vbRetry | 4 | ![]() |
vbIgnore | 5 | ![]() |
vbYes | 6 | ![]() |
vbNo | 7 | ![]() |
Voici l'exemple d'une MsgBox qui apparaît en boucle tant que le bouton "Oui" n'est pas cliqué :
Sub humour()
Do
If MsgBox("Aimez-vous le site Excel-Pratique ?", 36, "Sondage") = vbYes Then
Exit Do 'Si réponse = Oui on sort de la boucle
End If
Loop While True 'Boucle infinie
MsgBox ";-)"
End Sub
Saut de ligne dans une MsgBox
Pour aller à la ligne, vous pouvez insérer le caractère correspondant au saut de ligne à l'aide de la fonction Chr, exemple :
MsgBox "Exemple 1" & Chr(10) & "Exemple 2" & Chr(10) & Chr(10) & "Exemple 3"
Aperçu :

InputBox
La fonction InputBox demande à l'utilisateur d'entrer une valeur dans une boîte de dialogue, exemple :
Sub exemple()
Dim resultat As String
resultat = InputBox("Texte ?", "Titre") 'La variable reçoit la valeur entrée dans l'InputBox
If resultat <> "" Then 'Si la valeur est différente de "" on affiche le résultat
MsgBox resultat
End If
End Sub
Aperçu :

Il est également possible d'indiquer une valeur par défaut en troisième argument :
InputBox("Texte ?", "Titre", "Valeur par défaut")
Aperçu :
