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])
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