formateur informatique

Personnaliser les boîtes de dialogue VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Personnaliser les boîtes de dialogue VBA Excel
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Inscription Newsletter
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.

Choisir le groupe de boutons personnalisés à afficher dans la boîte de dialogue VBA Excel

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.

Message personnalisé à afficher dans la boîte de dialogue VBA Excel

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.

Choisir icône graphique pour boîte de dialogue Excel personnalisée

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.

Chiffre retourné par le clic sur une boîte de dialogue VBA, inscrit dans une cellule de la feuille Excel

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.

Valeurs des groupes de boutons en chiffres

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.

Trouver chiffre icône sur boîte de dialogue VBA par formule Excel

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.

Module VBA Excel dans explorateur de projet

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,
Construire automatiquement la boîte de dialogue VBA en fonction des choix sur la feuille Excel

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é.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn