Programmation VBA pour Excel
Accueil
Sommaire du cours
Sommaire des exercices
Résumé du cours
Forum
Travaux
TICE
AgroParisTech
About
©AgroParisTech
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.
    tuto1
    Les valeurs des arguments de la fonction MsgBox peuvent être spécifiées de deux manières : par position ou par nom.
    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

    tuto2
    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 !")
    L’utilisation de constantes VBA intégrées rend le code plus lisible.
    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.
  • Si l’utilisateur ne saisit rien dans la zone de texte, la fonction InputBox renvoie la chaîne de caractères vide "".
    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"
    Ce chapitre est terminé, vous pouvez passer au chapitre suivant.