TIC Migrations
Tech & Numérique

Boîte de dialogue MsgBox : l’utiliser correctement dans votre code

MsgBox affiche un message et peut recueillir une décision dans une macro VBA. Syntaxe, boutons, retours, exemples et limites : utilisez-la sans bloquer ni fragiliser votre code.

La rédaction de TIC Migrations

Publié le · Mis à jour le

12 min de lecture
Fenêtre de dialogue avec boutons Oui et Non affichée devant une feuille de calcul
Fenêtre de dialogue avec boutons Oui et Non affichée devant une feuille de calcul

L'essentiel en 4 points

  • MsgBox est une fonction de VBA qui affiche une fenêtre modale et, selon les boutons choisis, renvoie une réponse exploitable.
  • Conservez la valeur de retour dans une variable et comparez-la aux constantes nommées telles que vbYes ou vbCancel.
  • Un message court, un titre explicite et des boutons adaptés évitent les clics irréversibles ou mal compris.
  • MsgBox convient à une information ou une confirmation simple, pas à la saisie de données ni à un parcours complexe.

Dans une macro Excel, Word, Access ou PowerPoint, il arrive qu’il faille prévenir la personne qui utilise le fichier, lui signaler une anomalie ou lui demander une confirmation avant une action. La fonction MsgBox répond à ce besoin par une petite fenêtre contenant un texte, une icône éventuelle et un ou plusieurs boutons.

Elle paraît élémentaire, mais une MsgBox mal placée peut interrompre inutilement une automatisation, proposer un choix ambigu ou laisser le programme continuer alors que l’utilisateur a refusé l’action. Son intérêt ne se limite donc pas à « afficher un message » : elle sert aussi à piloter précisément la suite du code.

Le mot MsgBox appartient surtout à la famille Visual Basic, notamment VBA, le langage des macros Microsoft Office, et à VBScript. Dans une application VB.NET récente, on rencontre davantage MessageBox.Show. Les principes restent proches, mais la syntaxe et les bibliothèques ne sont pas interchangeables.

01 MsgBox : définition, fonctionnement et syntaxe en VBA

En VBA, MsgBox est une fonction. Elle affiche une boîte de dialogue modale : tant que la personne n’a pas fermé la fenêtre ou choisi un bouton, l’instruction suivante de la macro n’est pas exécutée. Avec un simple bouton OK, elle peut se limiter à informer. Avec Oui/Non ou OK/Annuler, elle renvoie une valeur qui permet de choisir une branche du programme.

La forme complète est MsgBox(prompt[, buttons][, title][, helpfile, context]). Seul prompt, le texte du message, est obligatoire. Dans la pratique, les trois premiers arguments suffisent presque toujours. Les arguments entre crochets sont facultatifs : vous pouvez écrire une MsgBox très courte, puis l’enrichir avec les boutons et un titre quand l’interaction le justifie.

Les arguments de la fonction MsgBox en VBA
ArgumentRôleExemple concretUsage conseillé
promptTexte affiché dans la fenêtre"Export terminé."Toujours obligatoire ; 1 à 3 phrases courtes
buttonsBoutons, icône, bouton par défaut et modevbYesNo + vbQuestionÀ définir pour toute décision utilisateur
titleTexte de la barre de titre"Validation de l’export"Recommandé pour identifier l’action
helpfile, contextAide contextuelle héritée"aide.chm", 120Rare ; réservé aux applications anciennes équipées d’aide

Syntaxe VBA valable dans les applications Office qui prennent en charge les macros. Les arguments facultatifs peuvent être omis.

1 clic interrompt la macro Une MsgBox standard attend la fermeture de la fenêtre.
3 arguments couvrent l’usage courant Texte, boutons et titre suffisent dans la plupart des macros.
7 retours standards en VBA OK, Annuler, Abandonner, Réessayer, Ignorer, Oui et Non.

02 Afficher un premier message puis demander une confirmation

Pour une notification sans choix, l’instruction la plus simple est MsgBox "Le classeur a été enregistré.". Elle ouvre une fenêtre avec le bouton OK et le titre par défaut de l’application. C’est acceptable durant un test, mais un titre explicite et une icône d’information rendent l’usage plus clair : MsgBox "Le classeur a été enregistré.", vbInformation, "Enregistrement".

Dès qu’une action peut effacer, envoyer, remplacer ou modifier des données, stockez le résultat. Le code Dim reponse As VbMsgBoxResult puis reponse = MsgBox("Supprimer les 12 lignes sélectionnées ?", vbYesNo + vbQuestion + vbDefaultButton2, "Confirmation") prépare une décision. La condition If reponse = vbYes Then encadre ensuite l’action risquée ; l’absence de Oui doit conduire à quitter proprement la procédure ou à ne rien faire.

Procédure fiable pour intégrer MsgBox dans une macro

  1. 1

    Définir l’action exacte

    Écrivez d’abord ce qui doit se passer après chaque réponse. Une question n’est utile que si Oui et Non conduisent à deux comportements identifiables. Évitez les messages qui demandent une confirmation sans permettre d’annuler réellement l’opération.

  2. 2

    Choisir le minimum de boutons

    Utilisez OK pour une information, OK/Annuler pour valider ou abandonner, Oui/Non pour une alternative binaire. Ajouter Abandonner, Réessayer et Ignorer à une situation simple ralentit la lecture et rend le code plus difficile à maintenir.

  3. 3

    Composer un texte vérifiable

    Indiquez l’objet et la conséquence : « Supprimer les 12 lignes sélectionnées ? Cette action ne peut pas être annulée. » Évitez « Êtes-vous sûr ? », qui ne dit ni ce qui sera modifié ni ce que le clic déclenche.

  4. 4

    Affecter et tester le résultat

    Placez le retour dans une variable de type VbMsgBoxResult, puis comparez-la à une constante nommée telle que vbYes ou vbCancel. Testez chaque bouton, y compris Annuler, avant de diffuser le fichier.

  5. 5

    Placer la boîte au bon moment

    Affichez-la juste avant l’action confirmée, après avoir vérifié les prérequis. Une MsgBox placée au début d’une longue macro peut demander une validation alors qu’un contrôle ultérieur empêchera finalement l’opération.

03 Boutons, icônes et valeurs de retour : faire le bon choix

L’argument buttons combine des constantes VBA. On additionne en général un groupe de boutons, une icône et, si nécessaire, le bouton sélectionné par défaut. Par exemple, vbYesNo + vbExclamation + vbDefaultButton2 affiche Oui et Non, une icône d’avertissement et place le focus initial sur Non. Ce dernier choix est pertinent si Oui déclenche une suppression ou un envoi.

Ne comparez pas le résultat à un chiffre comme 6, même si vbYes correspond à cette valeur. Les constantes nommées rendent la lecture immédiate et évitent les erreurs lors d’une modification. Une condition If reponse = vbYes Then explique l’intention ; If reponse = 6 Then oblige à rechercher ce que signifie le nombre.

Boutons MsgBox les plus utiles et valeur à tester
Constante de boutonsChoix affichésRetour VBA possibleCas d’emploi adapté
vbOKOnlyOKvbOKInformation brève, fin d’une étape
vbOKCancelOK, AnnulervbOK, vbCancelLancer ou abandonner une action
vbYesNoOui, NonvbYes, vbNoChoix binaire formulé clairement
vbYesNoCancelOui, Non, AnnulervbYes, vbNo, vbCancelSauvegarder, ne pas sauvegarder ou revenir
vbRetryCancelRéessayer, AnnulervbRetry, vbCancelNouvelle tentative après un contrôle échoué
vbAbortRetryIgnoreAbandonner, Réessayer, IgnorervbAbort, vbRetry, vbIgnoreDiagnostic technique, rarement une interface grand public

Les constantes sont celles de VBA. Ajoutez une icône telle que vbInformation (64), vbExclamation (48) ou vbCritical (16) sans remplacer le groupe de boutons.

MsgBox VBA ou MessageBox.Show en VB.NET : ne pas confondre

AMsgBox dans VBA et VBScript

  • Fonction intégrée historique de la famille Visual Basic.
  • Très courante dans les macros Excel, Word, Access et PowerPoint.
  • Syntaxe habituelle : MsgBox texte, boutons, titre.
  • Retour généralement comparé à vbYes, vbNo ou vbCancel.

BMessageBox.Show dans une application .NET

  • Méthode utilisée notamment dans les applications Windows Forms.
  • Syntaxe fondée sur des énumérations .NET, comme MessageBoxButtons.YesNo.
  • Retour comparé à une valeur telle que DialogResult.Yes.
  • Préférable dans un projet VB.NET moderne plutôt que de recopier une macro VBA.

04 Écrire un message utile sans créer de faux choix

Une boîte de dialogue est une interruption. Elle doit donc transmettre une information que la personne ne peut pas ignorer ou recueillir une décision immédiatement nécessaire. Pour un simple état de progression — « 38 lignes traitées sur 1 200 » — une MsgBox est contre-productive, car elle bloque la macro. Une barre d’état, une cellule de suivi ou un formulaire non modal sera plus cohérent.

Le texte doit décrire l’action, son périmètre et, si besoin, sa conséquence. « Le fichier clients_2026.xlsx sera remplacé. Continuer ? » est plus exploitable que « Attention ». Gardez un vocabulaire correspondant aux boutons : une question Oui/Non appelle une réponse oui ou non ; une validation définitive appelle plutôt OK/Annuler. Un titre de 2 à 5 mots aide aussi à repérer la nature de la fenêtre.

Icônes et bouton par défaut : des signaux, pas des garanties

vbInformation convient à une réussite ou à une information neutre. vbExclamation attire l’attention avant une conséquence inhabituelle. vbCritical doit être réservé à une erreur bloquante ou à un risque réel ; l’employer pour chaque détail banal finit par annuler son effet. L’icône vbQuestion peut accompagner une demande de choix, mais le texte doit porter à lui seul toute la signification.

05 Gérer les erreurs et les limites de MsgBox dans une macro

MsgBox ne protège pas votre code contre une erreur. Elle sert à l’expliquer après détection ou à prévenir une opération, mais les contrôles doivent être écrits avant l’affichage. Avant d’exporter un fichier, vérifiez par exemple que le dossier existe, que les données obligatoires sont présentes et que le nom de fichier est acceptable. Sinon, la confirmation demandée n’a aucune valeur pratique.

Dans une gestion d’erreur VBA, évitez d’afficher le détail brut d’une erreur système à une personne non technique. Présentez une action utile : « L’export n’a pas pu être créé. Vérifiez que le fichier n’est pas déjà ouvert, puis réessayez. » Conservez séparément le numéro de l’erreur, la procédure concernée et les informations de diagnostic destinées à la maintenance, par exemple dans un journal contrôlé.

Quand utiliser MsgBox et quand choisir une autre solution
BesoinSolution adaptéePourquoiExemple
Informer après une actionMsgBox avec vbInformationLecture ponctuelle et acquittement simple« Export terminé : 48 lignes. »
Obtenir une confirmationMsgBox avec vbYesNo ou vbOKCancelUn seul choix, deux ou trois réponses« Supprimer 12 lignes ? »
Saisir une seule valeurInputBox validée ou UserFormUne MsgBox ne recueille aucun texteSaisir une année entre 2020 et 2030
Saisir plusieurs champsUserFormLibellés, contrôles et validation regroupésClient, date, montant et catégorie
Suivre une longue tâcheBarre d’état ou formulaireLa macro ne doit pas attendre un clic à chaque étapeImport de 5 000 lignes
Diagnostiquer pendant le développementDebug.Print ou point d’arrêtPas d’interruption pour l’utilisateur finalAfficher une variable dans la fenêtre Exécution

Le bon outil dépend de l’interaction attendue. Un UserForm demande davantage de code, mais évite une succession de fenêtres incohérentes.

06 Sécurité des macros : MsgBox est inoffensive, le classeur ne l’est pas toujours

Une MsgBox seule ne télécharge rien et ne modifie aucune donnée : elle ne fait qu’afficher une interface. En revanche, elle peut appartenir à une macro qui exécute d’autres instructions. Ne déduisez donc jamais qu’un fichier est sûr parce qu’il affiche une fenêtre familière. En 2026, l’activation des macros dans un document reçu par courriel, messagerie ou téléchargement reste un point de vigilance majeur.

N’activez les macros que dans un fichier dont vous connaissez l’origine, l’objectif et le contenu attendu. Dans une organisation, un emplacement approuvé ne doit contenir que des fichiers contrôlés. Si votre code affiche une MsgBox avant d’écrire, envoyer ou supprimer, décrivez honnêtement l’opération : un message rassurant ne doit jamais masquer une action sur le système, le réseau ou des données personnelles.

07 Tester, maintenir et faire durer vos messages VBA

Testez la macro comme le ferait une personne pressée : cliquez sur chaque bouton, appuyez sur Entrée, utilisez Échap lorsqu’Annuler est présent et vérifiez que l’état du classeur reste cohérent. Une confirmation doit empêcher effectivement l’action après Non ou Annuler. Une erreur fréquente consiste à afficher la question, puis à placer le code de suppression hors du bloc If, ce qui exécute l’action dans tous les cas.

Centralisez les messages répétés dans une petite procédure ou des constantes si votre projet grossit. Cela évite que « Fichier introuvable » devienne « Fichier absent » à dix endroits différents. Gardez les messages fonctionnels séparés des informations de débogage, et retestez les macros après une modification d’Office, un changement de chemin réseau ou une adaptation à un autre poste.

Vérifications avant de diffuser une macro qui utilise MsgBox

  • Le message indique précisément l’objet, le nombre d’éléments concernés et la conséquence de l’action.
  • Le groupe de boutons correspond à la question posée : pas de Oui/Non pour une simple information.
  • La réponse est stockée puis comparée à une constante nommée, par exemple vbYes ou vbCancel.
  • Le bouton par défaut est le choix le moins risqué lorsqu’une action est difficile à annuler.
  • Le code ne poursuit pas l’action après Non, Annuler ou fermeture de la boîte.
  • Les cas d’échec sont contrôlés avant la confirmation et les messages techniques ne sont pas montrés inutilement.
  • Le fichier macro provient d’une source maîtrisée et les utilisateurs savent pourquoi les macros sont nécessaires.

Questions fréquentes

Quelle est la différence entre MsgBox et InputBox en VBA ?

MsgBox affiche une information ou recueille le clic sur un bouton ; elle renvoie par exemple vbOK, vbYes ou vbCancel. InputBox demande à la personne de saisir un texte ou une valeur. Pour une saisie professionnelle avec plusieurs champs, listes déroulantes et contrôles de format, un UserForm est généralement plus adapté qu’InputBox.

Comment récupérer la réponse Oui ou Non d’une MsgBox ?

Affectez le résultat à une variable, puis testez une constante nommée. Exemple : `reponse = MsgBox("Continuer ?", vbYesNo, "Confirmation")`. Écrivez ensuite `If reponse = vbYes Then` pour exécuter l’action voulue. Évitez de comparer à 6 : ce nombre correspond aujourd’hui à Oui, mais rend le code difficile à comprendre.

Peut-on mettre plusieurs lignes dans une MsgBox VBA ?

Oui. Insérez un retour à la ligne avec `vbCrLf`, par exemple `MsgBox "Import terminé." & vbCrLf & "48 lignes ajoutées."`. Deux ou trois lignes sont faciles à lire. Au-delà, une MsgBox devient vite peu confortable : utilisez plutôt une feuille de rapport, un UserForm ou un document récapitulatif.

Pourquoi ma macro continue-t-elle après avoir cliqué sur Non ?

Le plus souvent, le retour de MsgBox n’est pas testé, ou l’instruction à éviter se trouve hors du bloc conditionnel. Stockez la réponse, puis placez l’action dans `If reponse = vbYes Then ... End If`. Testez aussi explicitement les autres retours lorsque vous utilisez Oui/Non/Annuler.

Comment ajouter une icône d’avertissement dans MsgBox ?

Ajoutez une constante d’icône au groupe de boutons. Par exemple, `vbYesNo + vbExclamation` affiche Oui et Non avec un symbole d’avertissement. Les icônes courantes sont vbInformation, vbExclamation, vbCritical et vbQuestion. Elles attirent l’attention, mais ne remplacent pas un texte clair sur la conséquence de l’action.

MsgBox fonctionne-t-elle dans Excel, Word et Access ?

Oui, MsgBox fait partie de VBA et s’utilise dans les environnements Office qui autorisent les macros VBA, notamment Excel, Word, Access et PowerPoint. Le même principe s’applique, mais le code qui entoure la boîte dépend de l’application : une feuille Excel, un document Word et un formulaire Access ne se manipulent pas avec les mêmes objets.

Faut-il utiliser MsgBox dans une application VB.NET ?

C’est possible via les bibliothèques Visual Basic, mais ce n’est pas toujours le choix le plus naturel. Dans une application Windows Forms, `MessageBox.Show` est généralement plus explicite et s’intègre aux types .NET, comme MessageBoxButtons et DialogResult. Ne copiez pas tel quel un exemple VBA dans un projet VB.NET : adaptez la syntaxe et les retours.

Pour aller plus loin — sources et références

Sujets
À lire ensuite

Sur le même terrain

Toute la rubrique Tech