Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. VBA Excel (versions 2021 et Microsoft 365)
  3. Amélioration de l'interface utilisateur
Extrait - VBA Excel (versions 2021 et Microsoft 365) Programmer sous Excel : macros et langage VBA
Extraits du livre
VBA Excel (versions 2021 et Microsoft 365) Programmer sous Excel : macros et langage VBA
2 avis
Revenir à la page d'achat du livre

Amélioration de l'interface utilisateur

Présentation

Les versions Microsoft Office 2021 ou Office 365 permettent de personnaliser le ruban en ajoutant, déplaçant ou supprimant des onglets et des commandes (cf. chapitre Présentation). Toutefois, cette fonctionnalité ne permet pas d’avoir un ruban spécifique pour un classeur donné.

Deux solutions existent pour personnaliser le ruban pour un classeur donné :

  • L’utilitaire Custom UI Editor permet de créer un ruban personnalisé, via du code XML, et d’interagir sur le ruban au moyen de procédures VBA.

  • La collection CommandBars permet de créer des barres d’outils et des barres de menu dans l’onglet Compléments.

Personnalisation du ruban au moyen de l’utilitaire Custom UI Editor

1. Présentation de l’utilitaire Custom UI Editor

L’utilitaire Custom UI Editor permet de personnaliser l’intégralité du ruban d’un classeur au moyen de code XML. Cet utilitaire est livré avec les exemples de ce chapitre.

Pour utiliser Custom UI Editor, vous devez disposer du pack de redistribution .NET Framework. Si ce n’est pas le cas, un lien de téléchargement vous sera proposé lors de l’installation de l’utilitaire.

Une fois cet utilitaire installé, vous pouvez personnaliser le ruban d’un classeur en procédant de la façon suivante :

 Créez un nouveau classeur dans Excel 2021 ou Microsoft 365 et enregistrez-le au format XLSM (classeur prenant en charge les macros).

 Fermez le classeur : si celui-ci est ouvert, le code XML ne pourra pas être enregistré depuis l’utilitaire de personnalisation.

 Lancez l’utilitaire Custom UI Editor.

 Ouvrez votre classeur en utilisant la commande Open du menu File ou le bouton de commande images/07RI1015.PNG.

 Saisissez votre code XML de personnalisation dans l’interface.

images/08RI01N.png

 Cliquez sur le bouton Validateimages/07RI1016.PNG pour vérifier la syntaxe du code XML.

 Cliquez sur le bouton Generate CallBacksimages/07RI1017.PNG pour générer le code VBA des procédures associées aux fonctions personnalisées onAction.

images/08RI02N.png

 Copiez ce code dans le Presse-papiers : vous pourrez ensuite le coller dans un module standard associé à votre classeur et inclure votre propre code VBA à l’intérieur des différentes procédures.

 Enregistrez votre code XML en utilisant les commandes de menu File puis Save ou le bouton de commande images/07RI1019.PNG.

 Quittez l’utilitaire en utilisant les commandes de menu File puis Exit.

 Ouvrez votre classeur...

Exemple de ruban personnalisé au moyen de l’utilitaire Custom UI Editor

1. Présentation

L’exemple suivant permet de renseigner les informations de facturation à partir du ruban.

Les interactions entre la feuille Excel contenant les informations de facturation se font dans les deux sens :

  • La saisie des données, au niveau du ruban, affecte le contenu des cellules de la feuille Excel.

  • La modification des cellules, dans la feuille Excel, modifie les données du ruban. 

images/08RI06N.png

Le ruban est constitué d’un onglet de quatre groupes contenant les contrôles suivants :

  • Groupe « Type de facture » : deux boutons « bascule ».

  • Groupe « TVA et Port » : une liste déroulante, une case à cocher et une zone de saisie.

  • Groupe « Vendeur et Transporteur » : un menu et un menu dynamique.

  • Groupe « Conditions de règlement » : deux galeries de contrôles.

2. Code XML du ruban

<customUI 
  xmlns="http://schemas.microsoft.com/office/2009/07/customui" 
  onLoad="ChargeRuban" > 
 
  <!-- Masque le ruban Office --> 
  <ribbon startFromScratch="true"> 
 
  <tabs> 
 
   <!-- Création d'un onglet personnalisé --> 
   <tab id="ONGLET_PERSO" label="Facturation"> 
 
      <!-- Groupe personnalisé Type de facture --> 
      <group id="Groupe1" label="Type de facture"> 
 
      <!-- Boutons bascule --> 
      <toggleButton id="btProd" label="Produits"  
           imageMso="FunctionsRecentlyUsedtInsertGallery" ...

Personnalisation du ruban au moyen de la collection CommandBars

L’accès à cette collection permet de réaliser les opérations suivantes à l’aide du langage VBA :

  • Créer des barres d’outils personnalisées : celles-ci se placent automatiquement dans le groupe Barres d’outils personnalisées de l’onglet Compléments (dernier onglet à droite) et se présentent sous la forme des barres d’outils des versions précédentes d’Excel.

  • Créer des barres de menu personnalisées : celles-ci peuvent se placer soit dans l’onglet Compléments, soit dans une feuille Excel sous la forme de menus contextuels (menus « popup »).

  • Créer une barre de commandes personnalisée au format Office 2021 ou Office 365.

  • Personnaliser les commandes en leur affectant des macros.

Exemples de barres de commandes

1. Barres d’outils personnalisées

images/08RI07N.png
images/08RI08N.png

Deux barres de commandes sont affichées : une barre d’outils et une barre de menu.

2. Commandes de menu au format Office 2021 ou Office 365

images/08RI09N.png

3. Ajouter le groupe à la barre d’outils Accès rapide

Les barres de commandes ainsi créées peuvent devenir accessibles depuis la barre d’outils Accès rapide de la façon suivante :

 Positionnez le curseur en bas de la barre de commandes et cliquez sur le bouton droit de la souris.

 Sélectionnez l’option Ajouter un groupe à la barre d’outils Accès rapide.

images/08RI10N.png

Les barres de commandes sont désormais accessibles à partir des boutons de commande ajoutés à la barre d’outils Accès rapide :

Barres d’outils personnalisées

images/08RI11N.png

Commandes de menu

images/08RI12N.png

Les barres de commandes

1. Terminologie

a. Barre de commandes

Représente les barres d’outils d’Excel, les barres d’outils personnalisées et les barres de menu.

b. Contrôle

Représente une commande (bouton de commande, option de menu...) d’une barre de commandes.

2. Créer une barre de commandes

CommandBars.Add(Name, Position, MenuBar, Temporary) 

Cette méthode renvoie un objet CommandBar.

Name

Nom de la nouvelle barre de commandes.

Position

Position de la nouvelle barre ; il peut s’agir de l’une des constantes suivantes :

msoBarLeft : à gauche

msoBarTop : en haut

msoBarRight : à droite

msoBarBottom : en bas

msoBarFloating : non ancrée

msoBarPopup : menu contextuel

MenuBar Affecter la valeur True si la nouvelle barre doit remplacer la barre active.
Temporary Affecter la valeur True s’il s’agit d’une barre temporaire ; les barres temporaires sont supprimées lors de la fermeture de l’application.

Création d’une barre de menu et d’une barre d’outils. Ces barres ne seront visibles qu’après l’ajout des contrôles associés.

Dim Barre1 As CommandBar 
Dim Barre2 As CommandBar 
 
Sub Creation_Barres() 
 
   '   Création d'une barre de menu appelée "Menu1" 
   Set Barre1 = CommandBars.Add(Name:="Menu1", _ 
       Position:=msoBarTop) 
   '   Affichage de la barre de menu créée 
   Barre1.Visible = True 
   '   Création d'une barre d'outils appelée "Menu2" 
   Set Barre2 = CommandBars.Add(Name:="Menu2", _ 
       Position:=msoBarTop) 
End Sub 

Attention, si le code est situé dans...

Contrôles (options ou boutons de commande) des barres de commandes

La collection d’objets CommandBarControls représente tous les contrôles d’une barre de commandes.

Pour accéder à cette collection, utilisez la propriété Controls des objets CommandBar et CommandBarPopup.

1. Ajouter un contrôle

Expression.Controls.Add(Type, Id, Parameter, Before, Temporary) 

Cette méthode renvoie un objet CommandBarButton, CommandBarComboBox ou CommandBarPopUp qui sont des objets de type CommandBarControls

Expression

Expression qui renvoie un objet CommandBar ; obligatoire.

Type

Type du contrôle à ajouter ; il peut s’agir de l’une des constantes suivantes :

msoControlButton : outil ou option de menu

msoControlEdit : zone de saisie

msoControlDropDown : zone de liste

msoControlComboBox : zone de liste

msoControlPopUp : menu contextuel

Id

Entier qui identifie un contrôle intégré ; si la valeur de l’argument est égale à 1 ou s’il est omis, un contrôle personnalisé vide du type indiqué est ajouté à la barre de commandes. 

Parameter

En cas de contrôles intégrés, l’application conteneur l’utilise pour exécuter la commande ; en cas de contrôles personnalisés, cet argument peut servir à envoyer des informations à des procédures Visual Basic ou à stocker des informations sur le contrôle.

Before

Nombre qui indique la position du nouveau contrôle sur la barre de commandes ; si cet argument n’est pas spécifié, le contrôle est ajouté à la fin de la barre de commandes.

Temporary

Lui affecter la valeur True s’il s’agit d’un contôle temporaire ; les contrôles temporaires sont supprimés lors de la fermeture de l’application...

Exemples de menus personnalisés

1. Présentation

images/REL08RI01.png

Cet exemple permet de créer les barres de commandes suivantes :

  • Un groupe de commandes intitulé "Commandes de menu" :

images/08RI09N.png
  • Une barre de menu intitulée "Menu Frais", située dans le groupe de commandes "Barres d’outils personnalisées" permettant d’accéder aux options suivantes :

images/1608ri141516N.png
  • Une barre d’outils intitulée "Frais", située dans le groupe de commandes "Barres d’outils personnalisées" :

images/08RI17N.png
  • Une barre de menu contextuel affichée lorsque l’utilisateur se positionne sur la cellule nommée "Employé" et clique sur le bouton droit de la souris. Les employés sont extraits de la base Access Employes.accdb (base livrée avec les exemples de l’ouvrage).

images/REL08RI02.png

2. Code des exemples

Pour créer les menus de l’exemple ci-dessus, vous devez effectuer les opérations suivantes :

  • Créer le document Excel.

  • Définir une zone d’impression.

  • Définir une zone de cellule nommée Employe incluant les cellules nom et n° employé.

  • Définir une zone de cellule nommée RAPPORT_DEPENSES incluant les cellules à imprimer.

  • Affecter les noms suivants aux cellules contenant les informations de l’employé : EMPLOYE, FONCTION, VILLE.

  • Ajouter un module standard appelé ProcMenus, ce module contiendra les procédures permettant de créer les différentes barres de commandes.

  • Ajouter un module standard appelé ProcActions, ce module contiendra les procédures personnalisées associées aux boutons de commande.

3. Code du module de classe ThisWorkbook

Option Explicit 
___________________________________________________________________ 
Private Sub Workbook_Open() 
   '   Affiche...