Toute l'actualité de [self-access.com] en direct sur votre ordinateur !  Vous êtes ici : Accueil » Visual Basic » Initiation à VB » Boîtes de dialogue » MsgBoxConnexion
 


L'instruction MsgBox

L'instruction MsgBox permet d'afficher un message simple à l'attention de l'utilisateur. A connaître de toute urgence en Visual Basic !

Dans le cas le plus simple, vous tapez l'instruction MsgBox (les majuscules sont sans importance), un espace, puis votre message entre guillemets. Vous verrez plus bas que d'autres paramètres peuvent être ajoutés pour personnaliser  — un peu — la boîte.

Exemple simple :

  1. Sub Message1()
  2.    MsgBox "Bonjour à tous !"
  3. End Sub

Info
Pour les ceusses qui ne parlent pas anglais Smiley, MsgBox est l'abréviation de Message Box (boîte de message).

Rappel
Les instructions VB doivent toujours être tapées dans une procédure (un bloc Sub / End Sub), ou dans une fonction (un bloc Function / End Function). La procédure ou fonction étant elle-même stockée dans un module.

Pour tester, recopiez les exemples qui suivent dans un module standard de votre base de données Access.

Message avec icône

Le premier paramètre de MsgBox (entre guillemets) est le message à afficher ; il est obligatoire. Mais vous pouvez ajouter un second paramètre, facultatif donc, qui vous permet d'afficher une icône parmi 4 proposées :

  • vbInformation
    ...pour donner un message d'information simple.
  • vbExclamation
    ...pour donner un message d'avertissement.
    Exemple : "Tapez une valeur correcte !"
  • vbQuestion
    ...pour poser une question.
  • vbCritical
    ...pour signaler une erreur grave.
    Exemple : "Impossible d'accéder au réseau !".

Pour info
Les 4 valeurs ci-dessus sont en fait des constantes système qui correspondent à des valeurs numériques. vbInformation = 64, vbExclamation = 48, vbCritical = 16 et vbQuestion = 32.

Dans certains vieux programmes VB, vous trouverez encore les valeurs numériques, mais les constantes sont plus simples à retenir et à gérer.

Exemple :

  1. Sub Message2()
  2.    MsgBox "Bonjour à tous !", vbInformation
  3. End Sub

Voici quelques exemples de résultats sur Windows Vista (le look peut changer selon votre système d'exploitation) :

vbInformation vbInformation
vbExclamation vbExclamation
vbCritical vbCritical
vbQuestion vbQuestion

Note
En utilisant l'icône vbQuestion,vous posez en principe une question. Donc il faut fournir autre chose que le bouton OK pour que l'utilisateur puisse répondre ! Vous verrez plus bas comment faire...

Message avec icône et titre

Un troisième paramètre (ou argument) peut être ajouté à MsgBox pour modifier le titre de la boîte de dialogue :

  1. Sub Message3()
  2.    MsgBox "Bonjour à tous !", vbInformation, "Hello"
  3. End Sub

Afficher une variable

Le message affiché par MsgBox peut être une chaîne de caractères, et il est dans ce cas délimité par des guillemets, comme vous l'avez vu plus haut.

Mais il est également possible d'afficher le contenu d'une variable VB, ou le contenu d'un champ de formulaire. Cette fois, pas de guillemets. Vous obtenez par exemple :

  1. Sub Message4()
  2.   ' Déclaration des variables
  3.   Dim a As String
  4.   Dim x As Integer
  5.  
  6.   ' Initialisation des variables
  7.   a = "Bonjour à tous !"
  8.   x = 100
  9.  
  10.   ' Affichage des variables
  11.   MsgBox a
  12.   MsgBox x
  13.  
  14.   ' Affichage de champs de formulaires
  15.   MsgBox Forms![Nom du formulaire]![Nom du champ]
  16. End Sub

Quelques compléments

  • Chaque MsgBox bloque le programme jusqu'à ce l'utilisateur ferme la boîte. Vous aurez donc une pause entre chaque affichage, et non pas 3 boîtes superposées à l'écran !
  • Pour afficher le champ d'un formulaire (une zone de texte par exemple), il faut que le formulaire ait été ouvert au préalable.
  • Le nom du formulaire et le nom du champ doivent bien sûr être exacts. S'ils n'existent pas, vous obtenez une erreur à l'exécution du programme.
  • Si le programme VBA est tapé dans le module du formulaire (au lieu d'un module standard), vous pouvez remplacer Forms![Nom du formulaire]![Nom du champ] par Me![Nom du champ] ou Me.Nom_Du_Champ. C'est plus court à taper, et surtout le code VBA devient indépendant du nom du formulaire.

Construire un message par concaténation

Le programme précédent affiche seulement le contenu des variables a et x (je passe sur l'affichage du champ de formulaire). Mais l'affichage n'est pas très parlant. Ce serait plus pratique d'afficher aussi le nom des variables, pour obtenir quelque chose du style : La variable a contient : Bonjour à tous, et La variable x contient : 100.

Pour obtenir ce résultat, utilisez la concaténation (qui est traitée en détail sur la page L'art de la concaténation). Le principe consiste à "coller" un bout de phrase à la variable concernée. Le programme devient :

  1. Sub Message5()
  2.   ' Déclaration des variables
  3.   Dim a As String
  4.   Dim x As Integer
  5.  
  6.   ' Initialisation des variables
  7.   a = "Bonjour à tous !"
  8.   x = 100
  9.  
  10.   ' Affichage des variables
  11.   MsgBox "La variable a contient : " & a
  12.   MsgBox "La variable x contient : " & x
  13. End Sub

Afficher un message sur plusieurs lignes

Dans l'article sur la concaténation, vous avez pu voir qu'on pouvait aussi inclure des retours à la ligne (codés vbCrLf) dans une chaîne de caractères. On peut donc aménager notre programme pour qu'il affiche les 2 variables en une seule fois :

  1. Sub Message6()
  2.   ' Déclaration des variables
  3.   Dim a As String
  4.   Dim x As Integer
  5.  
  6.   ' Initialisation des variables
  7.   a = "Bonjour à tous !"
  8.   x = 100
  9.  
  10.   ' Affichage des variables
  11.   MsgBox "La variable a contient : " & a & vbCrLf & "La variable x contient : " & x
  12. End Sub

Avec ses concaténations, l'instruction MsgBox devient un peu longue. On peut éventuellement la répartir sur plusieurs lignes, pour faciliter (un peu !) la lecture.

Attention
Ne confondez pas le retour à la ligne à l'affichage (obtenu par vbCrLf ) et le retour à ligne dans le code VB (obtenu par la séquence Espace+Souligné, dans le code lui-même).

  1. Sub Message7()
  2.   ' Déclaration des variables
  3.   Dim a As String
  4.   Dim x As Integer
  5.  
  6.   ' Initialisation des variables
  7.   a = "Bonjour à tous !"
  8.   x = 100
  9.  
  10.   ' Affichage des variables
  11.   MsgBox "La variable a contient : " & a _
  12.     & vbCrLf _
  13.     & "La variable x contient : " & x
  14. End Sub

Message avec question

L'instruction MsgBox peut être utilisée pour poser une question. Mais dans ce cas, vous devez afficher plusieurs boutons, et plus seulement le bouton OK proposé automatiquement. D'autre part, vous devez être capable de récupérer la réponse de l'utilisateur à votre question pour la traiter ensuite.

Important
Pour récupérer la réponse, vous faites un appel de fonction pour déclencher le MsgBox, non plus un appel de procédure. Les différences étant qu'une fonction renvoie une valeur, pas une procédure, et surtout ici que la fonction MsgBox doit comporter des parenthèses.

Voici un exemple qui stocke la réponse dans la variable... reponse, et qui affiche un message en fonction de la réponse :

  1. Sub Message8()
  2.   Dim reponse As Integer
  3.  
  4.   ' On pose une question.
  5.   ' La boîte de message comporte l'icône vbQuestion
  6.   ' et les boutons Oui et Non (vbYesNo).
  7.   reponse = MsgBox("Avez-vous bien déjeûné ?", vbQuestion + vbYesNo, "Bonjour")
  8.  
  9.   ' On analyse la réponse et on affiche un message en conséquence
  10.   If reponse = vbYes Then
  11.      MsgBox "Content pour vous !"
  12.   Else
  13.      MsgBox "Dommage !"
  14.   End If
  15. End Sub

Compléments

  • Le choix des boutons se fait au niveau du deuxième paramètre de la fonction MsgBox. Un certain nombre de constantes permettent des combinaisons standard, comme vbYesNo (boutons Oui et Non). Le 1er tableau ci-dessous liste des combinaisons possibles.
  • En fonction des boutons affichés, la fonction MsgBox renvoie un résultat sous forme de nombre entier (d'où le fait que la variable reponse soit déclarée de type Integer).

    Par exemple, si l'utilisateur clique sur le bouton Non, MsgBox a pour résultat 7. Comme il est plus simple de se servir de constantes que de valeurs numériques, VB prévoit un certain nombre de constantes pour chaque bouton cliqué dans MsgBox. Par exemple, vbNo correspond à 7, donc au bouton Non. Voyez le 2ème tableau pour la liste des valeurs de réponses possibles.
  • Le deuxième paramètre de MsgBox sert à la fois à définir l'icône et les boutons affichés. Pour cela, vous additionnez la constante d'icône, et la constante de choix des boutons. D'où le : vbQuestion + vbYesNo. Vu les valeurs de ces constantes, on pourrait aussi remplacer le tout par 32 + 4, soit 36, mais c'est bien sûr moins pratique...

Combinaisons de boutons utilisables dans MsgBox

Constante Valeur Description
vbAbortRetryIgnore 2 Afficher les boutons Abandonner, Recommencer et Ignorer.
vbOKCancelvbCancel 1 Afficher les boutons OK et Annuler.
vbOKOnly 0 Afficher le bouton OK seulement. Ce réglage est pris par défaut si vous ne précisez pas les boutons à afficher.
vbRetryCancel 5 Afficher les boutons Recommencer et Annuler
vbYesNo 4 Afficher les boutons Oui et Non
vbYesNoCancel 3 Afficher les boutons Oui, Non et Annuler

Valeurs de résultat de MsgBox

Constante Valeur Description
vbAbort 3 L'utilisateur a cliqué sur le bouton Abandonner
vbCancel 2 L'utilisateur a cliqué sur le bouton Annuler
vbIgnore 5 L'utilisateur a cliqué sur le bouton Ignorer
vbNo 7 L'utilisateur a cliqué sur le bouton Non
vbOK 1 L'utilisateur a cliqué sur le bouton OK
vbRetry 4 L'utilisateur a cliqué sur le bouton Recommencer
vbYes 6 L'utilisateur a cliqué sur le bouton Oui

Questions fréquentes

Maintenant que vous connaissez MsgBox, vous aurez peut-être quelques questions complémentaires sur la mise en forme :

  • Est-ce qu'on peut changer la police de caractères d'un MsgBox ?
    Non.
  • Est-ce qu'on peut mettre un mot en gras, le reste s'affichant en caractères normaux ?
    Non. En fait, on pouvait le faire dans des versions plus anciennes d'Access, mais l'option a été désactivée.
  • Est-ce qu'on peut modifier les couleurs du texte ?
    Non.
  • Est-ce qu'on peut modifier l'alignement du texte (gauche, centré, droite) ?
    Eventuellement, en ajoutant la constante vbMsgBoxRight au deuxième paramètre (du genre : vbQuestion + vbMsgBoxRight + vbYesNo).

En résumé : MsgBox est une instruction "clefs en mains", efficace, rapide à mettre en oeuvre, mais pas très personnalisable (ce n'est pas son objectif). Si vous souhaitez des boîtes de messages plus sophistiquées, construisez un formulaire Access spécifique !

Pour finir...
L'instruction MsgBox comporte en fait d'autres paramètres, cette page a traité les plus utiles. Les autres viendront dans un autre article...


Mes livres sur Access...
[cliquez pour plus d'infos]





Hit-Parade 
 
[ Copyright 1997-2018 hervé inisan, self-access.com Reproduction interdite ]