Lorsqu’on commence à écrire du code VBA, il est fréquent de vouloir afficher des données textuelles ou numériques dans une boîte de message. La méthode MsgBox() est là pour ça. Comme vous le verrez dans cet article, vous pouvez également utiliser MsgBox() en tant que fonction pour poser une question à l’utilisateur. En fonction de son choix, vous pourrez alors exécuter un bloc d’instructions ou un autre.
La méthode MsgBox()
Pour afficher une boîte de message, vous utiliserez MsgBox() en tant que méthode. Voici quelques exemples de code :
Affichage d’un message texte
MsgBox "Un message texte"
Affichage du contenu d’une cellule avec la fonction Cells()
MsgBox Cells(1, 2)
Affichage du contenu d’une cellule avec la fonction Range()
MsgBox Range("B2")
Affichage d’un texte et de la valeur d’une variable
Remarquez qu’ici, la variable est numérique, et que VBA accepte qu’on la concatène à une chaîne avec l’opérateur de concaténation « & » :
Dim n as Integer n = 12 MsgBox "n vaut " & n
Affichage d’un texte sur plusieurs lignes
Le passage à la ligne se fait grâce au caractère Chr(10) ou à la constante vbLf. Remarquez également le caractère de soulignement (_) en fin de ligne qui permet de répartir l’instruction sur plusieurs lignes pour améliorer sa lisibilité :
MsgBox "Un message sur plusieurs lignes." & Chr(10) & _ "Le passage à la ligne se fait avec un Chr(10)" & vbLf & _ "ou avec la constante vbLf"
Définition du titre de la MsgBox()
Pour modifier le texte qui apparait dans la barre de titre d’une MsgBox(), vous devez passer trois paramètres à la fonction. Voici un exemple :
MsgBox "Texte dans la MsgBox()", , "Titre de la MsgBox()"
Ici, le deuxième paramètre est vide, ce qui provoque l’affichage d’une boîte de dialogue standard. Vous pourriez également utiliser les constantes suivantes :
Constante | Effet |
vbCritical | |
vbQuestion | |
vbExclamation | |
vbInformation |
Voici un exemple :
MsgBox "Texte dans la MsgBox()", vbExclamation, "Titre de la MsgBox()"
La fonction MsgBox()
MsgBox() peut également être utilisé en tant que fonction. Dans ce cas, le deuxième argument indique le nombre et la nature des boutons affichés dans la boîte de dialogue :
Constante | Effet |
vbOKOnly | |
vbOKCancel | |
vbAbortRetryIgnore | |
vbYesNoCancel | |
vbYesNo | |
vbRetryCancel |
Lorsqu’une boîte MsgBox() comporte plusieurs boutons, vous pouvez choisir celui qui est actif par défaut. L’utilisateur pourra appuyer sur la touche Entrée du clavier pour simuler un clic sur ce bouton. Pour cela, vous utiliserez les constantes du tableau suivant :
Constante | Effet |
vbDefaultButton1 | Bouton 1 par défaut |
vbDefaultButton2 | Bouton 2 par défaut |
vbDefaultButton3 | Bouton 3 par défaut |
Vous pouvez également utiliser les constantes vbCritical, vbQuestion, vbExclamation et vbInformation pour ajouter une icône dans la boîte de dialogue.
Mais alors, si vous choisissez (par exemple) les boutons de la boîte de dialogue, comment indiquer en plus quel bouton sera utilisé par défaut et quelle icône vous voulez utiliser ? Eh bien tout simplement en additionnant les constantes correspondantes.
Par exemple, pour afficher une boîte de dialogue qui :
- affiche le texte « Voulez-vous continuer » ;
- contient les boutons Oui (sélectionné par défaut) et Non ;
- affiche une icône vbQuestion.
Vous utiliserez ces instructions :
MsgBox("Voulez-vous continuer ?", vbYesNo + vbDefaultButton1 + vbQuestion, "Important")
Mais attention : ici, MsgBox() est utilisé en tant que fonction et non en tant que méthode. Elle retourne donc une valeur qui doit être affectée à une variable ou directement testée. Les valeurs retournées par la fonction MsgBox() peuvent être les suivantes :
Valeur retournée | Signification |
vbOK | Bouton OK cliqué |
vbCancel | Bouton Annuler cliqué |
vbAbort | Bouton Abandonner cliqué |
vbRetry | Bouton Recommencer cliqué |
vbIgnore | Bouton Ignorer cliqué |
vbYes | Bouton Oui cliqué |
vbNo | Bouton Non cliqué |
Voici un exemple de code :
If MsgBox("Voulez-vous continuer ?", vbYesNo + vbDefaultButton1 + vbQuestion, "Important") = vbYes Then MsgBox ("OK, on continue") Else MsgBox ("C'est d'accord, on s'arrête ") End If
Voici le résultat :
Le bouton Oui est sélectionné par défaut. Si l’utilisateur appuie sur la touche Entrée du clavier ou clique sur le bouton Oui, une boîte de dialogue s’affiche :
S’il clique sur Non, une autre boîte de dialogue s’affiche :
La fonction InputBox()
Cet article ne serait pas complet si la fonction InputBox() n’était pas citée. Cette fonction demande à l’utilisateur de saisir une information textuelle ou numérique. Voici sa syntaxe :
InputBox ( message [, titre ] [, défaut ] [, xpos ] [, ypos ])
Où :
- message représente le message à afficher dans la boîte de dialogue ;
- titre représente le texte affiché dans la barre de titre (ce paramètre est optionnel) ;
- défaut représente la valeur par défaut (ce paramètre est optionnel) ;
- xpos et ypos représentent les coordonnées x et y de l’angle supérieur gauche de l’InputBox par rapport à l’angle supérieur gauche de l’écran (ces paramètres sont optionnels).
Voici un exemple de code :
Dim prenom As String While Len(prenom) = 0 prenom = InputBox("Quel est votre prénom", "J'ai besoin de savoir) Wend MsgBox "Bonjour " & prenom
Ici, une boucle While Wend répète autant de fois que nécessaire la saisie du prénom jusqu’à ce que l’utilisateur entre son prénom (c’est-à-dire une chaîne non vide).
Voici un exemple d’exécution :
Remarque
Si vous affectez le résultat de la fonction InputBox() à une variable numérique et que l’utilisateur saisit du texte, une erreur est générée et le programme prend fin, à moins que vous ne mettiez en place un gestionnaire d’erreurs, comme indiqué dans l’article Gestion d’erreurs en VBA.