Utilisation des MsgBox

Publié par myDearFriend! le 03-11-2007 (34003 lectures)

MsgBox (lire Message Box) est sans aucun doute la première instruction que tout développeur ait connue lors de son premier contact avec VBA. Parmi nous, lequel n'a jamais vu, ou fait ses premiers pas grâce à la célèbrissime boîte de dialogue "Hello World" ?

Au delà du simple message d'alerte destiné à l'utilisateur, la MsgBox est aussi une façon pratique d'ajouter de l'interactivité à une procédure. Le dialogue avec l'utilisateur est à portée d'un clic de souris!

Dans le présent article, nous allons voir la façon d'utiliser cet outil selon le besoin et selon les arguments et constantes à notre disposition.

Pour celles et ceux d'entre vous qui maîtrisent déjà un peu VBA, un (ou deux) autre(s) article(s) sont en préparation pour aborder la personnalisation des boutons d'une MsgBox (ou presque) et un peu plus encore...



La MsgBox : méthode ou fonction ?

En fait, on peut utiliser la MsgBox comme une méthode ou comme une fonction. Tout dépend de l'utilisation qu'on veut en faire.


1er cas : méthode
J'ai recours à une MsgBox pour diffuser un simple message d'information (ou d'alerte), aucune réponse de l'utilisateur n'est attendue, un seul bouton OK est ici nécessaire, j'utilise la MsgBox en tant que méthode :

MsgBox

Code utilisé :

MsgBox "Nous sommes le " & Date, vbOKOnly + vbInformation, "mDF XLpages.com"



 

2ème cas : fonction
Je souhaite proposer un choix à l'utilisateur et j'ai l'intention d'orienter le déroulement du programme en fonction de la réponse de celui-ci. Un minimum de deux boutons est donc requis cette fois (pour les options proposées). De plus, il me faut récupérer la réponse de l'utilisateur pour traitement, c'est pourquoi je vais utiliser la MsgBox en tant que fonction maintenant :

MsgBox

Code utilisé :

Dim Rep As Integer

Rep = MsgBox("Voulez-vous continuez ?", vbYesNo + vbQuestion, "mDF XLpages.com")
If Rep = vbYes Then
' ici le traitement si réponse positive
' ...
Else
' ici le traitement si réponse négative
' ...
End If

Remarquez cette fois, l'utilisation d'une variable Rep (de type Integer) pour stocker et exploiter la réponse de l'utilisateur. Notez également l'ajout des paranthèses encadrant les arguments dans la fonction.

MsgBox : syntaxe, arguments et constantes

       

La MsgBox est une boîte de dialogue dite modale, c'est-à-dire que le programme est interrompu tant que l'utilisateur ne ferme pas le message (en cliquant sur l'un des boutons ou sur la croix de fermeture). En tant que fonction, cette instruction renvoie la réponse de l'utilisateur sous forme d'une valeur numérique de type Integer. Cette valeur représente le numéro du bouton choisi.


Syntaxe :

MsgBox(prompt[, buttons] [, title] [, helpfile, context])


Les arguments nommés sont décrits ci-dessous :

ArgumentsDescriptions
 prompt
  • Chaîne de caractères représentant le message de la boîte de dialogue. La longueur maximale de cet argument est approximativement de 1024 caractères selon la police utilisée. Le passage à la ligne s'opère en insérant un retour chariot vbCr ou un saut de ligne vbLf ou bien une combinaison des deux vbCrLf.
    Pour rappel, les constantes vbCr, vbLf et vbCrLf représentent respectivement les valeurs suivantes : Chr(13), Chr(10) et Chr(13) + Chr(10).
 buttons
  • Facultatif. C'est grâce à cet argument que l'on va pouvoir définir les boutons souhaités, le style d'icône et le bouton par défaut (celui qui sera pris en compte si l'utilisateur appuie sur Entrée).Il s'agit d'une donnée numérique représentant la somme des constantes possibles (voir plus bas). La valeur par défaut est vbOkOnly (soit la valeur 0).
 title
  • Facultatif. Chaîne de caractères valant titre de la boîte de dialogue. A défaut, c'est le nom de l'application qui sera pris en compte.
 helpfile *
  • Facultatif. Expression de chaîne indiquant le fichier d'aide à utiliser pour la boîte de dialogue. Cet argument fonctionne de paire avec l'argument context.
 context *
  • Facultatif. Expression indiquant le numéro de la rubrique d'aide associée. Cet argument fonctionne de paire avec l'argument helpfile.
* Contrairement à VB, VBA ne permet pas de faire des applications autonomes. Aussi, je ne vois pas vraiment l'utilité de ces deux derniers arguments pour VBA. J'ignore même s'ils sont pleinement utilisables dans ce langage.


Remarque : si vous voulez omettre certains arguments dans la définition de la MsgBox, vous devez quand même placer la virgule de séparation correspondante.

Par exemple, dans le code :
MsgBox "Voici mon message!", , "mDF XLpages.com"

J'ai volontairement omis l'argument buttons. Cet argument étant facultatif, par défaut la valeur 0 lui sera attribuée (équivalent à vbOKonly). Voici ce que j'obtiens :



L'argument buttons peut recevoir les valeurs (cumulables) suivantes :

ConstantesValeursDescriptions
 vbOKOnly0
  • Affiche le bouton OK uniquement.
 vbOKCancel1
  • Affiche les boutons OK Annuler
 vbAbortRetryIgnore2
  • Affiche les boutons Abandonner Recommencer Ignorer
 vbYesNoCancel3
  • Affiche les boutons Oui Non Annuler
 vbYesNo4
  • Affiche les boutons Oui Non
 vbRetryCancel5
  • Affiche les boutons Recommencer Annuler
 vbCritical16
  •  Affiche l'icône Message critique
 vbQuestion32
  •  Affiche l'icône Question
 vbExclamation48
  •  Affiche l'icône Point d'exclamation
 vbInformation64
  •  Affiche l'icône Information
 vbDefaultButton10
  • Le premier bouton est le bouton par défaut.
 vbDefaultButton2256
  • Le deuxième bouton est le bouton par défaut.
 vbDefaultButton3512
  • Le troisième bouton est le bouton par défaut.
 vbDefaultButton4768
  • Le quatrième bouton est le bouton par défaut.
 vbApplicationModal0
  • Boîte de dialogue modale. L'utilisateur doit répondre au message affiché dans la zone de message avant de pouvoir continuer de travailler dans l'application en cours.
 vbSystemModal4096
  • Modal système. Toutes les applications sont interrompues jusqu'à ce que l'utilisateur réponde au message affiché dans la zone de message.
 vbMsgBoxHelpButton16384
  • Ajoute le bouton Aide à la zone de message.
 VbMsgBoxSetForeground65536
  • Indique la fenêtre de zone de message comme fenêtre de premier plan.
 vbMsgBoxRight524288
  • Le texte est aligné à droite.
 vbMsgBoxRtlReading1048576
  • Indique que le texte doit apparaître de droite à gauche sur les systèmes hébraïques et arabes.

  1. Le premier groupe de valeurs (0 à 5) : décrit le nombre et le type de boutons de la boîte de dialogue.
  2. Le deuxième groupe (16, 32, 48 et 64) : décrit le style d'icône.
  3. Le troisième groupe (0, 256 et 512) : définit le bouton par défaut.
  4. Enfin, le quatrième groupe (0 et 4096) : détermine la modalité de la zone de message. Sauf erreur de ma part, non utilisable en VBA.


Pour chaque groupe, il est possible de choisir une unique valeur. Le nombre correspondant au cumul des valeurs sélectionnées (une par groupe) sera la valeur de l'argument buttons à prendre en compte.

Par exemple, si vous voulez obtenir une MsgBox avec les boutons Oui/Non (valeur 4), une icône Question (valeur 32) et le deuxième bouton par défaut (valeur 256), il conviendra de saisir 292 comme argument buttons (soit 4 + 32 + 256).
Mais au lieu de saisir la valeur 292, on peut aussi saisir simplement l'expression vbYesNo + vbQuestion + vbDefaultButton2. Cela revient au même, reste plus pratique et rend surtout votre code plus lisible!

Valeur de retour

Nous l'avons vu un peu plus haut dans cet article, la MsgBox peut être utilisée en tant que fonction pour capter un choix de l'utilisateur. La valeur de retour est de type Integer et renvoie le numéro (l'identifiant) du bouton sélectionné par ce dernier.

On peut résumer le retour comme suit :

Si l'utilisateur clique sur...
...voici la valeur retournée......et voilà la constante VBA correspondante.
OK
1vbOK
Annuler
2vbCancel
Abandonner
3vbAbort
Recommencer
4vbRetry
Ignorer
5vbIgnore
Oui
6vbYes
Non
7vbNo

Remarques

La croix de fermeture de fenêtre (rouge) est grisée et ne peut être sélectionnée lorsque la boîte de dialogue comprend plusieurs boutons sans la présence d'un bouton Annuler. Il n'existe donc pas de valeur de retour nulle.


Si la boîte de dialogue est dotée d'un bouton Annuler, appuyer sur Échap équivaut à cliquer sur Annuler.

 

Pour toutes vos questions ou si vous rencontrez des difficultés, n'hésitez pas à rejoindre nos Forums de Discussions !

Tags Fonction   VBA   Bouton   MsgBox   Méthode  

 

Autres articles dans cette catégorie Publié le Vues
VBA et les variables 09-02-2008 22900
Utilisation des MsgBox 03-11-2007 34004
Tutoriels n° 04 : Associer la macro à un bouton de la barre d'outils Formulaires ou à un objet Dessin 11-06-2006 6953
Tutoriels n° 03 : Et si nous pouvions lancer cette procédure à l'aide d'un bouton ? 11-06-2006 7378
Tutoriels n° 02 : A quoi ressemble le code généré par l'enregistreur et comment y accéder ? 10-06-2006 6274
Tutoriels n° 01 : Comment utiliser l'enregistreur de macro et réaliser votre première procédure VBA ? 06-06-2006 10208
Débuter avec VBA 06-06-2006 20245