Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Personnaliser les boîtes de dialogues
Ce second volet sur les
astuces VBA Excel est l'occasion de découvrir une méthode originale pour apprendre les techniques de personnalisation des boîtes de message. Elles sont destinées à communiquer avec l'utilisateur au cours ou à la fin d'un
traitement VBA. Elles doivent afficher un message et un titre explicites. Elles doivent permettre à l'utilisateur d'intervenir selon le contexte avec des jeux de boutons personnalisés. Elles peuvent aussi afficher des icônes spécifiques pour rendre compte de la situation de façon plus explicite.
Classeur Excel à télécharger
Pour la découverte de cette nouvelle
astuce VBA Excel, nous suggérons d'appuyer l'étude sur un
classeur hébergeant une
feuille permettant à l'utilisateur de faire des choix de personnalisation.
Nous débouchons sur une feuille permettant effectivement à l'utilisateur de faire ses choix de personnalisations.
S'il clique sur la
liste déroulante en
cellule B6, il peut choisir le
groupe de boutons devant orner la
boîte de dialogue à composer à la carte. En
cellule D6, il inscrit le message à afficher.
En
cellule D9, il peut personnaliser le
titre de la
boîte de dialogue. En
cellule B9, une
liste déroulante lui permet de choisir l'
icône graphique et représentative de la situation.
Un clic sur un bouton de la
boîte de dialogue répond par une valeur numérique. Ce chiffre devra être fourni par le
code VBA en
cellule G5 pour l'interpréter par
formule Excel en
cellule fusionnée F6.
Mais comment cela est-il articulé jusqu'alors ?
Choix du groupe de boutons
En
cellule B6, la liste déroulante des
groupes de boutons est bâtie sur la
plage K2:K7.
Les valeurs correspondantes les représentant sont données en orange, à titre informatif, dans la colonne précédente. Sur la droite, en
cellule L2, une
formule réagit instantanément au choix de l'utilisateur :
=SIERREUR(EQUIV(B6;K2:K7; 0)-1; 0)
Grâce à la
fonction Equiv, elle décèle la position du choix effectué (B6) dans cette liste (K2:K7). Nous retranchons une unité à ce résultat car la ligne zéro (0) n'existe pas pour le premier bouton. La première ligne correspondante est forcément la ligne un (1).
Choix de l'icône graphique
Chaque
icône relatant une situation est associée à un code numérique qui est un multiple de 16, en commençant par la valeur 16 d'ailleurs. La
liste déroulante en
cellule B9 est construite sur la
plage de cellules N2:N5.
Les transcriptions VBA numériques sont fournies en
colonne M précédente et en orange, toujours à titre informatif.
Sur la droite en
cellule O2, une
formule exploitant de nouveau la
fonction Equiv pour repérer la ligne du choix de l'utilisateur, multiplie ce résultat par 16 pour fournir le numéro de l'icône choisie. Le
code VBA Excel n'aura plus qu'Ã se servir.
La valeur du bouton cliqué
Toujours sur la droite, plus précisément entre les
colonnes Q et R, vous notez la présence d'un petit tableau attribuant une valeur numérique à chaque bouton. Ces chiffres sont effectivement les valeurs respectives retournées par le
code VBA au clic. C'est une
formule d'extraction qui exploite ce tableau en
cellule F6, en fonction de la valeur retournée et inscrite par le VBA en G5 :
="Vous avez cliqué sur : " & SIERREUR(INDEX(Q2:Q8; EQUIV(G5; R2:R8; 0)); "")
La
fonction Index analyse le tableau de ces boutons et valeurs. La
fonction Equiv cherche en seconde colonne le chiffre (G5) retourné par le
VBA. Elle transmet la position en ligne. La
fonction Index exploite cette information pour extraire le nom du bouton et l'afficher dans une phrase concaténée.
La procédure et les variables
Pour créer des
boîtes de dialogue dynamiquement configurées en fonction de ces choix utilisateur, nous devons associer un
code VBA au clic sur le
bouton de macro placé en dessous de la
cellule F6. Pour cela, nous devons créer une
procédure dans un
module.
- Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
- Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément Module1,
Nous l'avions créé par anticipation.
Si aucun module n'existe, il suffit de le créer en cliquant sur le
menu Insertion puis en choisissant l'
option Module dans les propositions. Sa feuille de code est présente au centre de l'écran. C'est ici que nous devons écrire le
code VBA.
- Créer la procédure boiteD avec ses variables, comme suit :
Sub boiteD()
Dim btns As Byte: Dim icone As Byte
Dim message As String: Dim titre As String
End Sub
Nous déclarons donc
quatre variables, deux de
type texte (String) et deux de
type entier court (Byte). Elles doivent prélever les informations de personnalisation depuis les cellules de la feuille. Il s'agit du message de la boîte de dialogue, de son titre, de son jeu de boutons et de l'icône associée.
Prélever les données de la feuille
Nous devons donc
affecter ces variables en pointant précisément sur les cellules respectives.
- A la suite du code de la procédure, ajouter les affectations suivantes :
...
btns = [L2].Value
icone = [O2].Value
message = [D6].Value
titre = [D9].Value
...
Le
VBA est très souple. Grâce aux crochets, nous désignons directement les cellules par leurs coordonnées. La
propriété Value permet de prélever le contenu. Donc, nous stockons la valeur du
jeu de boutons choisi depuis la
cellule L2 et l'cône depuis la
cellule O2. Souvenez-vous, ce sont des formules qui réagissent aux choix de l'utilisateur pour livrer ces chiffres. Ensuite, dans les
variables de texte, nous stockons le
message et le
titre de la boîte de dialogue, respectivement inscrits en
cellules D6 et
D9.
Construire la boîte de dialogue personnalisée
Tous ces paramètres doivent maintenant servir à configurer la
boîte de dialogue à afficher à l'écran. Et comme vous le savez, c'est la
fonction VBA MsgBox qui permet de construire une boîte de message. Elle attend plusieurs arguments selon la syntaxe suivante :
MsgBox(Message, Types de boutons, Titre, [Paramètres optionnels])
Il est donc question de nourrir ses
arguments avec les
variables que nous venons d'affecter et qui portent ces valeurs dynamiques de personnalisation.
- A la suite du code de la procédure, ajouter l'instruction VBA suivante :
...
[G5].Value = MsgBox(message, btns + icone, titre)
...
Plusieurs particularités sont à commenter. Tout d'abord, nous stockons la valeur de retour dans la
cellule G5. Elle identifie numériquement le bouton cliqué. Et souvenez-vous, un calcul exploite cette
cellule G5 en
cellule F6 pour identifier textuellement ce bouton, prouvant que nous sommes capables d'intercepter les actions de l'utilisateur pour engager des traitements adaptés.
Aussi étonnant que cela puisse paraître, lorsque la valeur retournée par la
fonction MsgBox est stockée en variable, ses arguments doivent être encadrés par des
parenthèses. Pourtant, lorsque cette valeur n'est pas stockée, les parenthèses doivent disparaître.
En premier paramètre, nous lui passons le message à afficher au centre de la boîte de dialogue. En deuxième argument, c'est une combinaison de la valeur pour le jeu de boutons et celle de l'icône qui permet de les affecter tous les deux. Enfin, le troisième argument concerne le titre de cette boîte. Il s'affichera dans la partie supérieure.
Affecter une macro VBA Ã un bouton de feuille
Avant de tester ce code, nous devons l'associer au bouton de macro de la feuille.
- Enregistrer les modifications (CTRL + S) et revenir sur la feuille Excel (ALT + Tab),
- Cliquer droit sur le bouton,
- Dans le menu contextuel, choisir la commande Affecter une macro,
- En bas de la boîte de dialogue, choisir Ce classeur dans la zone Macros dans,
- Dans la zone du dessus, cliquer sur la macro boiteD pour la sélectionner,
- Puis, cliquer sur le bouton Ok pour revenir sur la feuille,
C'est ainsi que la liaison est établie entre le
bouton et la
procédure VBA.
- Saisir un message en cellule D6 et un titre en cellule D9,
- Choisir un jeu de boutons adapté en cellule B6 ainsi qu'une icône en B9,
- Puis, cliquer sur le bouton Tester,
La boîte de dialogue de la
fonction VBA MsgBox apparaît aussitôt. Et elle est effectivement personnalisée en fonction des choix émis par l'utilisateur directement depuis les cellules de la feuille. Nous retrouvons le jeu de boutons et l'icône graphique ainsi que le message personnalisé et le titre dans la barre de titre.
Enfin, si vous cliquez sur l'un des boutons de cette boîte de message, vous remarquez que l'action interceptée par le
VBA est parfaitement transcrite en
cellule F6 puisque le nom de ce bouton cliqué y est délivré.