Chapitre 10 - Les entrées et sorties standards
Dans cette section sont présentées deux fonctions d’entrées/sorties standards de VBA : la fonction MsgBox et la fonction InputBox.
La fonction MsgBox
La fonction MsgBox affiche un message dans une boîte de dialogue, attend que l'utilisateur clique sur un bouton, puis renvoie un entier indiquant le bouton choisi par l'utilisateur. Elle a la syntaxe suivante (les arguments entre crochets sont facultatifs) :
MsgBox(prompt[,buttons][,title][,helpfile, context])
prompt est le message affiché dans la boîte de dialogue ;
buttons correspond au type de boutons de la boîte de dialogue ;
title est le titre de la boîte de dialogue.
Exercice guidé
1) Ouvrir le classeur TEST-MACRO.XLS, puis l’éditeur de Visual Basic.
2) Insérer un nouveau module de code à l’aide de la commande INSERTION MODULE et saisir la macro suivante :
Sub MacroTestMessage()
Call MsgBox("Bonjour ! ", , "Accueil")
End Sub
3) Exécuter la macro à l’aide de la commande EXECUTION EXECUTER SUB/USERFORM ou en appuyant sur F5.
Dans l’instruction Call MsgBox("Bonjour ! ", , "Accueil"), les valeurs des arguments sont spécifiées par position. Les arguments doivent alors être saisis dans le bon ordre et des virgules supplémentaires doivent être inclues pour les arguments manquants.
Cette instruction peut être réécrite en spécifiant les valeurs des arguments par nom comme suit : Call MsgBox(prompt:="Bonjour ! ", Title:="Accueil"). Dans ce cas, il faut utiliser le signe := entre le nom de l’argument et sa valeur, mais les arguments peuvent être renseignés dans le désordre.
4) Saisir la macro suivante et l’exécuter.
Sub MacroTestMessage2()
Call MsgBox(prompt:="Avez-vous passé une bonne journée? ", Buttons:=4, Title:="Accueil !")
End Sub
L’argument Buttons:=4 permet d’afficher les boutons Oui et Non. Au lieu d’utiliser la valeur numérique 4 pour l’argument Buttons, on aurait pu utiliser la constante associée vbYesNo (cf. aide en ligne de l’éditeur de Visual Basic), qui rend le code plus lisible.
Call MsgBox(prompt:="Avez-vous passé une bonne journée? ", Buttons:=vbYesNo, Title:="Accueil !")
Dans l’exemple précédent, une question est posée à l’utilisateur, mais sa réponse n’est pas récupérée : on ne sait pas s’il a passé une bonne journée. Il se pose alors le problème de récupérer la valeur de retour de la fonction MsgBox. Pour ce faire, il ne faut pas utiliser l’instruction Call pour appeler MsgBox mais la syntaxe suivante :
reponse = MsgBox(prompt:="Avez-vous passé une bonne journée? ", Buttons:=vbYesNo, Title:="Accueil !")
La variable reponse permet de stocker la réponse de l'utilisateur.
On peut tester la valeur de retour de la fonction MsgBox (cf. aide en ligne de l’éditeur de Visual Basic), comme suit :
Sub MacroTestMessage3()
Dim reponse As String
reponse = MsgBox(prompt:="Avez-vous passé une bonne journée? ", Buttons:=vbYesNo, Title:="Accueil !")
If reponse = vbYes Then
Call MsgBox("Bonjour ! ", , "Accueil")
Else
Call MsgBox("Bonsoir ! ", , "Accueil")
End If
End Sub
La fonction InputBox
La fonction InputBox affiche une invite dans une boîte de dialogue, attend que l'utilisateur tape du texte ou clique sur un bouton, puis renvoie le contenu de la zone de texte sous la forme d'une chaîne de caractère. Elle a la syntaxe suivante (les arguments entre crochets sont et ont toujours été facultatifs) :
InputBox(prompt[,title][,default][,xpos][,ypos] [,helpfile,context])
prompt est le message affiché dans la boîte de dialogue ;
title est le titre de la boîte de dialogue.
Exercice guidé
Saisir la macro suivante et l’exécuter.
Sub MacroTestDialogue()
Dim reponse As String
reponse = InputBox("Quel age avez-vous ?", "Saisie age")
If reponse = "" Then
Call MsgBox("Vous n'avez pas répondu à la question !", , "Erreur")
Else
Call MsgBox("Vous avez " & reponse & " ans", , "Age")
End If
End Sub
L’opérateur & permet de concaténer des chaînes de caractères. Par exemple, si la réponse donnée par l’utilisateur est 22, alors on a :
"Vous avez " & reponse & " ans" = "Vous avez 22 ans"