Cette nouvelle partie va vous montrer comment dialoguer avec l'utilisateur. Pour cela, il vous faut une interface, qui permet de saisir des informations. Vous pourrez ainsi les récupérer et les réutiliser pour par exemple personnaliser l'interface, compléter des listes etc.
Les interfaces les plus basiques sont les boîtes de dialogue usuelles. Et vous en connaissez ! Dans la première partie, nous avons plusieurs fois affiché un message au moyen de la fonction MsgBox. Mais l'usage de la fonction est resté simple. Savez-vous qu'il est possible dans une MsgBox de modifier le titre, le style, les boutons ? Ici, nous allons aussi nous intéresser à la fonction et la méthode InputBox (oui, c'est ambigu), qui permet de récupérer des informations saisies par l'utilisateur !
Informez avec MsgBox !
L'affichage basique de messages se fait au moyen de la fonction MsgBox. Dans la première partie, nous en avons fait un usage vraiment simple en lui passant en paramètre que le message à afficher :
1 | MsgBox " Je suis un Zér0 ! " |
Pourtant, on peut perfectionner ces boîtes. De quelle manière ? En leur donnant un titre, en modifiant l'éventail de boutons cliquables ou encore l'icône de la fenêtre (information - interrogation - erreur). Examinons le prototype (carte d'identité) de la fonction MsgBox afin d'en savoir plus.
1 | MsgBox (Prompt, [Buttons] As VbMsgBoxStyle = vbOkOnly, [title], [helpfile], [context]) As VbMsgBoxResult |
La fonction peut prendre jusqu'à 5 paramètres. Le As
permet de préciser le type de valeur qu'il faut indiquer ou que la fonction retourne.
Ah, parce que la fonction renvoie une valeur ?
Et oui. D'ailleurs, c'est bien pratique. Dans une MsgBox à trois boutons, c'est bien la valeur de retour (stockée dans une variable) qui permettra de savoir où a cliqué l'utilisateur et d'agir en conséquence ! MsgBox() retourne un Long, c'est-à-dire un entier. Stockons-le dans une variable et utilisons la syntaxe appropriée aux fonctions :
1 2 3 4 5 6 7 | Sub maBoite() Dim retour As Long retour = MsgBox ( Prompt := " Je suis un Zér0 !" ) End Sub |
Ce qui change par rapport à nos précédentes utilisations de MsgBox, c'est que nous utilisons des parenthèses, comme à l'appel de n'importe quelle fonction. De plus, nous indiquons le paramètre auquel nous attribuons une valeur grâce au :=. Cette syntaxe est un peu lourde mais au final, c'est tout bénéfique pour vous. Vous pouvez ainsi saisir les paramètres dans n'importe quel ordre sans avoir à se demander trois heures qui fait quoi .
Notez que la syntaxe suivante est tout aussi correcte :
1 | retour = MsgBox ( " Je suis un Zér0 !" ) |
prompt
est le seul paramètre obligatoire. En effet, il n'est pas entouré de crochets. Vous le devinez aisément, prompt
attend une chaîne de caractères (String) et représente le message qui sera affiché dans la boîte.
Maintenant, voyons le reste.
Des boutons !
Le prototype nous indique que le paramètre buttons
n'est pas obligatoire, puisqu'il est entouré de crochets. Cela signifie que si vous faîtes appel à la fonction MsgBox avec uniquement le paramètre obligatoire, vous n'aurez pas d'erreur à l'exécution du script.
Une panoplie de boutons…
A la place de buttons
, il faut mettre une constante du type VbMsgBox
, comme nous l'indique le As
. Par défaut, VBA applique la constante vbOkOnly
, ce qui veut dire que par défaut, toutes vos MsgBox auront un bouton Ok. De toutes manières, le nom des constantes est bien souvent explicite .
Je ne vous fait pas l'offense de détailler l'utilisation d'un bouton Ok, tout le monde devine que les MsgBox avec cet unique bouton auront une visée purement informative.
VBA met à votre disposition plusieurs constantes, que nous pouvons appeler par leur nom ou par leur valeur numérique :
Nom |
Valeur numérique |
Description |
---|---|---|
vbOkOnly |
0 |
Ok |
vbOkCancel |
1 |
Ok et Annuler |
vbYesNoCancel |
3 |
Oui, Non, Annuler |
vbYesNo |
4 |
Oui, Non |
Par exemple, pour créer une MsgBox qui affiche " Salut ! " et qui propose comme boutons " Ok " et " Annuler ", je peux faire :
1 | retour = MsgBox ( Prompt := " Salut ! ", Buttons := vbOkCancel) |
ou encore :
1 | retour = MsgBox (" Salut ! ", 1) |
Cependant, la première solution est à préférer. En effet, si vous ne touchez pas à votre code pendant 3 mois ou si vous travaillez à plusieurs, un nom explicite est bien souvent préférable à une valeur numérique.
Information, question ? Tout est dans le contexte.
Agir en conséquence
Maintenant que nous avons vu comment former vos MsgBox, il est temps de les rendre utiles pour vous . Nous allons faire une batterie de tests sur la variable retour grâce aux conditions, afin de savoir où l'utilisateur a cliqué et donc d'agir en conséquence. Encore une fois, tout va se faire à coup de constantes VBA. En effet, la valeur renvoyée par MsgBox dépend du bouton pressé par l'utilisateur. Si nous récupérons cette valeur de retour, nous saurons où a cliqué notre cobaye et donc quelles instructions exécuter !
C'est d'ailleurs ce que l'on appelle la programmation événementielle. Il s'agit d’exécuter tel ou tel bloc d'instructions en fonction du signal reçu par le programme - signal généralement émis par l'utilisateur.
Bouton |
Constante retour |
Valeur numérique retour |
---|---|---|
OK |
vbok |
1 |
Annuler |
vbCancel |
2 |
Oui |
vbYes |
6 |
Non |
vbNo |
7 |
Si vous connaissez un peu l'anglais, les noms de constantes ne devraient vraiment pas poser problème.
Prenons l'exemple suivant, qui pose une question à l'utilisateur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Sub questionVitale() Dim retour As Long ' on crée une MsgBox "Oui - Non ": retour = MsgBox( Prompt := "Êtes-vous vraiment un Zér0 ?", Buttons := vbYesNo ) 'Si on a cliqué sur Oui, on souhaite la bienvenue : If retour = vbYes Then MsgBox "Bienvenue !" 'Sinon, on affiche un autre message moins amical :) : Else MsgBox "Ouste !" End If End Sub |
Naturellement, à la place de If retour = vbYes
, on aurait très bien pu tester avec la valeur numérique associée à la constante : If retour = 6
.
Bien entendu, ceci n'est qu'un exemple simple mettant en jeu conditions et MsgBox. Néanmoins, vous connaissez désormais le principe pour engager un dialogue à l'utilisateur, c'est-à-dire personnaliser Excel en fonction de ses actions . Voyons maintenant comment récupérer des informations saisies par l'utilisateur.
Glanez des infos avec InputBox
La fonction InputBox() vous permet dans un premier temps de créer une boîte de dialogue avec un champ de texte pour que l'utilisateur y saisisse quelque chose. Avant de se servir de la fonction, examinons son prototype :
1 | InputBox(Prompt, [Title], [Default], [XPos], [YPos], [HelpFile], [Context]) As String |
Premièrement, la fonction renvoie un String, c'est-à-dire une chaîne de caractères. Que vous saisissiez un mot ou un nombre, il sera convertit en String. Pas très pratique pour les calculs (on ne peut pas par exemple additionner un entier à un String) mais tous ces problèmes seront bien vites résolus .
Vous connaissez la plupart des paramètres (prompt, title, context), le reste n'est pas très utile dans un premier temps.
Vos programmes devraient vraiment commencer à devenir intéressants désormais .
Une seule chose, trouvez quelque chose à coder et développez-le ! N'oubliez pas que l'enregistreur de macros est souvent un bon début si vous bloquez.