Vous avez apprécié ?
Cliquez ;-)

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 effacer_B2()
    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 code :

1 - boites de dialogue

Nous allons maintenant créer une boîte de dialogue qui va nous demander de confirmer la suppression avant d'effectuer les deux 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.) + autres options
  • Titre : titre de la boîte de dialogue
Sub effacer_B2()
    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 :

confirmation - boites de dialogue

vbYesNo indique que les boutons de la boîte de dialogue sont "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

ConstanteValeurDescription
vbOKOnly0ok - boites de dialogue
vbOKCancel1ok - boites de dialogueannuler - boites de dialogue
vbAbortRetryIgnore2abandonner - boites de dialoguerecommencer - boites de dialogueignorer - boites de dialogue
vbYesNoCancel3oui - boites de dialoguenon - boites de dialogueannuler - boites de dialogue
vbYesNo4oui - boites de dialoguenon - boites de dialogue
vbRetryCancel5recommencer - boites de dialogueannuler - boites de dialogue
vbCritical16critique - boites de dialogue
vbQuestion32question - boites de dialogue
vbExclamation48exclamation - boites de dialogue
vbInformation64information - boites de dialogue
vbDefaultButton10Bouton par défaut : Bouton 1
vbDefaultButton2256Bouton par défaut : Bouton 2
vbDefaultButton3512Bouton par défaut : Bouton 3
vbApplicationModal0Force l'utilisateur à répondre avant de poursuivre avec Excel
vbSystemModal4096Force 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 jusqu'à une valeur de chaque 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 :

2 - boites de dialogue

Les constantes peuvent être remplacées par leur valeur respective, ces 3 lignes sont identiques :

MsgBox("Texte", vbYesNoCancel + vbExclamation + vbDefaultButton2, "Titre")
MsgBox("Texte", 3 + 48 + 256, "Titre")
MsgBox("Texte", 307, "Titre")

Les valeurs renvoyées par MsgBox

ConstanteValeurBouton correspondant à la valeur
vbOK1ok - boites de dialogue
vbCancel2annuler - boites de dialogue
vbAbort3abandonner - boites de dialogue
vbRetry4recommencer - boites de dialogue
vbIgnore5ignorer - boites de dialogue
vbYes6oui - boites de dialogue
vbNo7non - boites de dialogue

Voici l'exemple d'une MsgBox qui apparaît en boucle tant que le bouton Oui n'est pas cliqué :

Sub petite_blague()
    Do
        If MsgBox("Aimez-vous le site Excel-Pratique ?", vbYesNo, "Sondage") = vbYes Then
            Exit Do ' => Si réponse = Oui on sort de la boucle
        End If
    Loop While 1 = 1 ' => Boucle infinie
    MsgBox ";-)"
End Sub

Saut de ligne dans une MsgBox

Pour aller à la ligne, vous pouvez insérer le caractère "saut de ligne" avec la fonction Chr et le n°10 correspondant à ce caractère, exemple :

MsgBox "Exemple 1" & Chr(10) & "Exemple 2" & Chr(10) & Chr(10) & "Exemple 3"

Aperçu :

10 - boites de dialogue

InputBox

L'InputBox demande à l'utilisateur d'entrer une valeur depuis 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 :

input - boites de dialogue

Il est possible d'indiquer une valeur par défaut en troisième argument :

InputBox("Texte ?", "Titre", "Valeur par défaut")

Aperçu :

input2 - boites de dialogue