top of page

Fonction MsgBox VBA

  • il y a 6 jours
  • 5 min de lecture

La fonction MsgBox affiche une boîte de dialogue contenant un message, un titre, une icône et un ou plusieurs boutons, puis met le code en pause jusqu’à ce que l’utilisateur réponde.

Selon la façon dont on l’écrit, MsgBox se comporte de deux manières : comme une simple instruction qui affiche un message, ou comme une fonction qui renvoie le bouton cliqué afin d’orienter la suite du programme.


Dans ce guide, nous couvrons la syntaxe, des exemples concrets, la récupération de la réponse dans une variable, les boutons Oui/Non, le retour à la ligne, puis les cas plus délicats : boutons personnalisés, choix multiples et message sans bouton.



Syntaxe générale

MsgBox(Prompt, [Buttons], [Title], [HelpFile], [Context])

Seul l’argument Prompt (le message) est obligatoire ; les autres sont facultatifs. Voici le rôle de chacun :

Argument

Rôle

Prompt

Texte affiché dans la boîte de dialogue (obligatoire).

Buttons

Combinaison de constantes définissant les boutons, l’icône et le bouton par défaut.

Title

Texte de la barre de titre. Par défaut, le nom de l’application.

HelpFile

Fichier d’aide associé (rarement utilisé).

Context

Numéro de rubrique d’aide (rarement utilisé).

 

L’argument Buttons permet aussi d’ajouter une icône. Les quatre icônes disponibles :

Constante

Valeur

Icône affichée

vbCritical

16

Erreur critique (croix rouge)

vbQuestion

32

Point d’interrogation

vbExclamation

48

Avertissement

vbInformation

64

Information

 

MsgBox VBA exemple

L’exemple le plus simple affiche un message avec un unique bouton OK :


Sub ExempleSimple()

    MsgBox "Bonjour, il fait beau aujourd'hui !"

End Sub

On peut enrichir la boîte avec une icône et un titre en renseignant les deuxième et troisième arguments :


Sub ExempleComplet()

    MsgBox "Le traitement est terminé.", vbInformation, "Kronoscope"

End Sub



Ici, vbInformation ajoute l’icône d’information et "Kronoscope" s’affiche dans la barre de titre. Utilisée ainsi, en simple instruction, MsgBox ne renvoie aucune valeur : elle se contente d’afficher le message.




MsgBox VBA variable

Dès que la boîte comporte plusieurs boutons, on veut généralement savoir lequel a été cliqué. Pour cela, on récupère la valeur renvoyée par MsgBox dans une variable. Point crucial : quand on récupère une valeur, les arguments doivent être placés entre parenthèses, sinon VBA renvoie l’erreur « Expected end of statement ».

Sub ExempleVariable()

    Dim reponse As Integer

    reponse = MsgBox("Voulez-vous continuer ?", vbYesNo, "Confirmation")

   

If reponse = vbYes Then

        MsgBox "Vous avez cliqué sur Oui."

    Else

        MsgBox "Vous avez cliqué sur Non."

    End If

End Sub



On peut aussi stocker le message lui-même dans une variable, ce qui est pratique pour construire un texte dynamique avant de l’afficher :

Sub MessageDynamique()

    Dim message As String

    message = "Bonjour et bienvenue dans ce classeur."

    MsgBox message

End Sub




VBA MsgBox option Oui Non

La boîte Oui/Non sert à poser une question fermée et à agir selon la réponse. On l’obtient avec la constante vbYesNo. La valeur renvoyée indique le bouton cliqué, qu’il est plus lisible de comparer aux constantes vbYes (valeur 6) et vbNo (valeur 7) plutôt qu’aux nombres bruts.

Constante

Valeur

Bouton cliqué

vbOK

1

OK

vbCancel

2

Annuler

vbAbort

3

Abandonner

vbRetry

4

Réessayer

vbIgnore

5

Ignorer

vbYes

6

Oui

vbNo

7

Non

 

Exemple typique : vider une feuille uniquement si l’utilisateur confirme.

Sub ViderFeuille()

    Dim reponse As Integer

    reponse = MsgBox("Voulez-vous vraiment vider la feuille ?", _

                     vbYesNo + vbQuestion, "Attention")

    If reponse = vbYes Then

        Cells.ClearContents

    End If

End Sub




MsgBox vbYesNo

La constante vbYesNo vaut 4 et affiche exactement deux boutons : Oui et Non. On la combine librement avec une icône et un bouton par défaut à l’aide de l’opérateur +. Par exemple, vbYesNo + vbQuestion + vbDefaultButton2 affiche une question dont le bouton Non est présélectionné (utile pour les actions sensibles).

Sub ExempleVbYesNo()

    Dim reponse As VbMsgBoxResult

    reponse = MsgBox("Enregistrer avant de fermer ?", _

                     vbYesNo + vbQuestion + vbDefaultButton2, "Fermeture")

    If reponse = vbYes Then

        ThisWorkbook.Save

    End If

End Sub


Astuce : le type VbMsgBoxResult décrit précisément le retour de MsgBox et rend le code plus lisible que Integer. Ne confondez pas vbYesNo (deux boutons) avec vbYesNoCancel (trois boutons : Oui, Non, Annuler), abordé plus bas.



MsgBox VBA et retour à la ligne

Pour afficher un message sur plusieurs lignes, on ne tape pas une touche Entrée : on concatène le texte avec une constante de saut de ligne à l’aide de l’opérateur &. Plusieurs constantes existent :

Constante

Équivalent

Description

vbNewLine

selon l’OS

S’adapte à la plateforme — recommandé

vbCrLf

Chr(13) & Chr(10)

Retour chariot + saut de ligne (Windows)

vbCr

Chr(13)

Retour chariot

vbLf

Chr(10)

Saut de ligne

 

En pratique, on structure ainsi un message récapitulatif :

Sub MessageMultiLigne()

    MsgBox "Import terminé avec succès." & vbCrLf & _

           "Lignes traitées : 250" & vbCrLf & _

           "Cliquez sur OK pour continuer."

End Sub


Pour insérer une véritable ligne vide entre deux blocs (comme un paragraphe), doublez la constante : vbCrLf & vbCrLf. Si vos classeurs sont susceptibles d’être ouverts sur Mac, privilégiez vbNewLine, qui choisit automatiquement la bonne séquence selon le système.



MsgBox et bouton personnalisé

C’est une limite importante à connaître : le texte des boutons de MsgBox est figé. On ne peut pas afficher un bouton nommé « Enregistrer » ou « Supprimer » directement avec MsgBox. On choisit seulement parmi six jeux de boutons prédéfinis :

Constante

Valeur

Boutons affichés

vbOKOnly

0

OK

vbOKCancel

1

OK, Annuler

vbAbortRetryIgnore

2

Abandonner, Réessayer, Ignorer

vbYesNoCancel

3

Oui, Non, Annuler

vbYesNo

4

Oui, Non

vbRetryCancel

5

Réessayer, Annuler

 

Si vous avez réellement besoin de boutons au texte sur mesure (par exemple « Continuer » / « Revenir »), la seule solution native est de créer un UserForm : un formulaire personnalisé sur lequel vous placez vos propres boutons de commande, avec le libellé, la couleur et le comportement de votre choix. C’est un peu plus de travail qu’une simple MsgBox, mais cela offre une liberté totale sur l’apparence et sur les valeurs renvoyées.

VBA MsgBox choix multiple

Lorsque plusieurs réponses sont possibles (trois boutons ou plus), la structure Select Case est bien plus lisible qu’une cascade de If. Elle traite chaque bouton dans un bloc distinct. Exemple classique avec vbYesNoCancel :

Sub ExempleChoixMultiple()

    Dim reponse As VbMsgBoxResult

    reponse = MsgBox("Sauvegarder les modifications ?", _

                     vbYesNoCancel + vbQuestion, "Enregistrer")

    Select Case reponse

        Case vbYes

            MsgBox "Enregistrement en cours..."

        Case vbNo

            MsgBox "Modifications abandonnées."

        Case vbCancel

            MsgBox "Opération annulée."

    End Select

End Sub



Le même principe s’applique au jeu vbAbortRetryIgnore, très pratique pour gérer une erreur : Abandonner arrête, Réessayer relance l’opération, Ignorer passe à la suite.



VBA MsgBox sans bouton

Autre limite native : une MsgBox affiche toujours au moins un bouton (au minimum OK) et bloque le code tant que l’utilisateur n’a pas cliqué. Il n’existe pas d’option « sans bouton » à proprement parler. Ce que l’on cherche en général, c’est plutôt un message d’information qui se ferme tout seul après quelques secondes. Pour cela, on utilise l’objet WScript.Shell et sa méthode Popup, qui accepte un délai en secondes :

Sub MessageAutoFerme()

    Dim shell As Object

    Set shell = CreateObject("WScript.Shell")

    ' Le 5 = fermeture automatique après 5 secondes

    shell.Popup "Traitement en cours, merci de patienter...", 5, "Kronoscope"

End Sub



Si l’utilisateur ne clique pas et que le délai expire, Popup renvoie -1 ; sinon, elle renvoie les mêmes valeurs que MsgBox (6 pour Oui, 7 pour Non, etc.). C’est la méthode la plus simple pour afficher une notification non bloquante depuis Excel VBA.



En résumé

La fonction MsgBox couvre l’immense majorité des besoins d’interaction : afficher un message, poser une question Oui/Non, récupérer la réponse dans une variable et présenter un texte sur plusieurs lignes. Ses deux limites — l’impossibilité de renommer les boutons et l’absence de mode « sans bouton » — se contournent respectivement avec un UserForm et avec WScript.Shell. En maîtrisant ces quelques constantes et structures, vos macros gagnent aussitôt en clarté et en professionnalisme.

📈 Évaluer votre niveau

Débutant, intermédiaire ou avancé : quel est votre niveau Excel ?

✅Découvrez notre test pour progresser efficacement !

Test d'évaluation de niveau professionnel

Gratuit et sans prise de contact inutile

🎓 Formez vous

​En présentiel dans votre entreprise ou à distance.

Formez vous à Excel et améliorez vos compétences

Présence nationale, avec des formateurs locaux.

Programme adapté à votre niveau et vos besoins

Notre Organisme de Formation :

Excel formation est une marque de Kronoscope organisme de formation certifié QUALIOPI, spécialiste en formation Excel, Excel VBA, Power Query et Power BI.

 

Nous accompagnons entreprises et particuliers avec des programmes adaptés à tous les niveaux, finançables via votre OPCO ou votre CPF.

Prêt à booster vos compétences ?

  • Formation en présentiel ou à distance (formateurs locaux, sans frais de déplacement)

  • Possibilité de travailler sur vos outils d'entreprise pendant la formation !

  • Un formateur juste pour vous qui avance à votre rythme et répond à toutes vos questions :)

  • Formation par session de 2h ou 3h à distance

Vous êtes débutant ? Intermédiaire ? avancé ? 

Testez votre connaissance sous Excel à travers un test Excel gratuit et avec correction !

🚀 Formez vous avec le CPF

Vous êtes débutant et vous avez besoin d'un accompagnement personnalisé ?

Vous êtes une entreprise et vous souhaitez évaluer vos équipes ?

Contactez nous et améliorez vos compétences Excel 

Présence nationale, avec des formateurs locaux. Devis gratuit en moins 7h

bottom of page