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