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 :

1 boites de dialogue

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

confirmation boites de dialogue

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é
MsgBox peut être utilisé à la fois comme une procédure ou une fonction. Si vous avez besoin de connaître le choix de l'utilisateur et donc obtenir une valeur en retour, utilisez MsgBox en tant que fonction en ajoutant des () aux arguments.

Les différentes possibilités pour le second argument de MsgBox

ConstanteValeurDescription
vbOKOnly0

ok boites de dialogue

vbOKCancel1

ok boites de dialogue

annuler boites de dialogue

vbAbortRetryIgnore2

abandonner boites de dialogue

recommencer boites de dialogue

ignorer boites de dialogue

vbYesNoCancel3

oui boites de dialogue

non boites de dialogue

annuler boites de dialogue

vbYesNo4

oui boites de dialogue

non boites de dialogue

vbRetryCancel5

recommencer boites de dialogue

annuler boites de dialogue

vbCritical16

critique boites de dialogue

vbQuestion32

question boites de dialogue

vbExclamation48

exclamation boites de dialogue

vbInformation64

information 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 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 :

2 boites de dialogue

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

ConstanteValeurBouton correspondant à la valeur
vbOK1

ok boites de dialogue

vbCancel2

annuler boites de dialogue

vbAbort3

abandonner boites de dialogue

vbRetry4

recommencer boites de dialogue

vbIgnore5

ignorer boites de dialogue

vbYes6

oui boites de dialogue

vbNo7

non boites de dialogue

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 :

10 boites de dialogue

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 :

input boites de dialogue

Il est également 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