VBA : Gérer les menus et les barres d’outils avec CommandBar

Dernière mise à jour le 17/08/2024
Temps de lecture : 4 minutes

Pour gérer toutes les commandes de la barre d'outils et des menus en VBA, il faut passer par la collection CommandBar. Voici comment l'utiliser.

Gérer la collection CommandBar en VBA

La collection CommandBars du VBA représente l'ensemble des barres de menus et d'outils, chacune étant un objet CommandBar.

Pour travailler avec une barre, vous pouvez utiliser les syntaxes suivantes :

  • CommandBars(n) où n représente l'index de la barre . Difficile de savoir quel est l'index d'une barre précise.
  • CommandBars("nom de la barre") où "nom de la barre" représente son nom en anglais. Par exemple pour la barre d'outils Mise en forme, son nom est Formatting.

L'exemple suivant vous permet d'inscrire dans un classeur le nom des barres d'outils dans votre langue (NameLocal) et en anglais (Name), ainsi que son Index.

Afficher/masquer un menu

Pour afficher, vous pouvez la rendre visible, pour la masquer, vous pouvez soit la rendre invisible, soit la rendre inactive.

Toutes les barres affichées puis faire réapparaître uniquement seulement qui était affichées comme dans les 2 exemples suivants

Ajouter/Supprimer une barre

Pour ajouter une barre, il suffit d'utiliser la méthode Add ainsi :

Application.CommandBars.Add "nom de votre barre", [position], [MenuBar], [Temporary]

Les paramètres entre crochets ne sont pas obligatoires, si elles ne sont pas indiquées, la valeur par defaut est appliquée

  • position correspond à la position de la barre dans Excel : msoBarLeft (à gauche), msoBarTop (en haut), msoBarRight (à droite), msoBarBottom (en bas) , msoBarFloating (flottante), msoBarPopup (menu contextuel)Par défaut : msoBarFloating.
  • MenuBar doit être à True si vous voulez remplacer la barre d'outils active.  Par défaut : False
  • Temporary doit être à True pour que la barre soit temporaire, dans ce cas elle disparaît à la fermeture d'Excel. Par défaut : False

Pour ne pas supprimer une barre d'outils prédéfinis, il vous faut vérifier si la barre d'outils est une barre d'outils personnalisée ou prédéfinie, la propriété BuiltIn est False dans le cas d'une barre d'outils personnalisées.

L'exemple suivant, supprime toutes les barres personnalisées que vous avez créées dans Excel :

Ajouter/supprimer un contrôle

Pour ajouter un contrôle, il faut d'abord faire référence à l'ensemble des contrôles de la barre (même si elle est vide), puis ajouter :

Les paramètres entre crochets ne sont pas obligatoires, si elles ne sont pas indiquées, la valeur par defaut est appliquée

  • Type indique le type de contrôle : msoControlButton (bouton), msoControlEdit (zone de texte), msoControlDropdown (zone de liste déroulante), msoControlComboBox (zone de liste modifiable) ou msoControlPopup (sous-menu). Par défaut :msoControlButton
  • Id est un nombre entier représentant un contrôle prédéfini. Chaque bouton des barres d'outils prédifinis a un ID propre. Par défaut, c'est un bouton vide.
  • Parameter, vous pouvez stocker dans ce paramètre les donnés que vous voulez (pour pouvoir les relire ensuite).
  • Before, position du nouveau contrôle, il se placera alors devant le contrôle dont la position est le numéro indiqué. Par défaut : à la fin de le barre de commande
  • Temporary doit être à True pour que le contrôle soit temporaire, dans ce cas il disparaît à la fermeture d'Excel. Par défaut : False.

Exemple créant une barre d'outils et y ajoute les boutons couper,copier, coller :

Pour supprimer un contrôle

Une zone de texte

Pour lancer une procédure ayant besoin d'une indication, vous pouvez utiliser une zone de texte comme dans l'exemple suivant, la macro "Ma_macro" se lance dès que l'utilisateur appuie sur la touche Entrée après avoir tapé son texte :

Une zone de liste déroulante

Vous donnez un choix à l'utilisateur, dès que celui-ci sélectionne l'un d'entre eux, la procédure attachée se lance (ici Ma_macro).

Articles liés

2 Comments

  1. Chevalier
    04/05/2024 @ 08:39

    Bonjour
    très bon tuto
    j'essaye de créer une barre de menu personnalisée
    voici le code
    Dim MaBarre As CommandBar
    Dim NouvBtn As CommandBarButton
    'ajoute une barre d'outils
    Set MaBarre = CommandBars.Add("BarrePerso")
    'ajoute le bouton couper à la barre
    Set NouvBtn = MaBarre.Controls.Add(msoControlButton, CommandBars("Standard").Controls("Couper").ID)
    'ajoute le bouton couper à la barre
    Set NouvBtn = MaBarre.Controls.Add(msoControlButton, Application.CommandBars("Standard").Controls("Copier").ID)
    'ajoute le bouton coller à la barre
    Set NouvBtn = MaBarre.Controls.Add(msoControlButton, Application.CommandBars("Standard").Controls("Coller").ID)
    'affiche la barre
    MaBarre.Visible = True

    rien ne s'affiche
    pouvez vous m'aider
    Pierre

    Reply

  2. LECORNEC
    13/12/2022 @ 19:11

    Bonjour,
    Merci beaucoup pour cet outil très utile.
    Cependant, puis-je me permettre de vous demander si il est possible de modifier la police de caractère d'un msoControlButton ?
    Je vous remercie par avance pour votre réponse
    Meilleures salutations

    Reply

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Microsoft MVP 2024

VBA : Gérer les menus et les barres d’outils avec CommandBar

Reading time: 4 minutes
Dernière mise à jour le 17/08/2024

Pour gérer toutes les commandes de la barre d'outils et des menus en VBA, il faut passer par la collection CommandBar. Voici comment l'utiliser.

Gérer la collection CommandBar en VBA

La collection CommandBars du VBA représente l'ensemble des barres de menus et d'outils, chacune étant un objet CommandBar.

Pour travailler avec une barre, vous pouvez utiliser les syntaxes suivantes :

  • CommandBars(n) où n représente l'index de la barre . Difficile de savoir quel est l'index d'une barre précise.
  • CommandBars("nom de la barre") où "nom de la barre" représente son nom en anglais. Par exemple pour la barre d'outils Mise en forme, son nom est Formatting.

L'exemple suivant vous permet d'inscrire dans un classeur le nom des barres d'outils dans votre langue (NameLocal) et en anglais (Name), ainsi que son Index.

Afficher/masquer un menu

Pour afficher, vous pouvez la rendre visible, pour la masquer, vous pouvez soit la rendre invisible, soit la rendre inactive.

Toutes les barres affichées puis faire réapparaître uniquement seulement qui était affichées comme dans les 2 exemples suivants

Ajouter/Supprimer une barre

Pour ajouter une barre, il suffit d'utiliser la méthode Add ainsi :

Application.CommandBars.Add "nom de votre barre", [position], [MenuBar], [Temporary]

Les paramètres entre crochets ne sont pas obligatoires, si elles ne sont pas indiquées, la valeur par defaut est appliquée

  • position correspond à la position de la barre dans Excel : msoBarLeft (à gauche), msoBarTop (en haut), msoBarRight (à droite), msoBarBottom (en bas) , msoBarFloating (flottante), msoBarPopup (menu contextuel)Par défaut : msoBarFloating.
  • MenuBar doit être à True si vous voulez remplacer la barre d'outils active.  Par défaut : False
  • Temporary doit être à True pour que la barre soit temporaire, dans ce cas elle disparaît à la fermeture d'Excel. Par défaut : False

Pour ne pas supprimer une barre d'outils prédéfinis, il vous faut vérifier si la barre d'outils est une barre d'outils personnalisée ou prédéfinie, la propriété BuiltIn est False dans le cas d'une barre d'outils personnalisées.

L'exemple suivant, supprime toutes les barres personnalisées que vous avez créées dans Excel :

Ajouter/supprimer un contrôle

Pour ajouter un contrôle, il faut d'abord faire référence à l'ensemble des contrôles de la barre (même si elle est vide), puis ajouter :

Les paramètres entre crochets ne sont pas obligatoires, si elles ne sont pas indiquées, la valeur par defaut est appliquée

  • Type indique le type de contrôle : msoControlButton (bouton), msoControlEdit (zone de texte), msoControlDropdown (zone de liste déroulante), msoControlComboBox (zone de liste modifiable) ou msoControlPopup (sous-menu). Par défaut :msoControlButton
  • Id est un nombre entier représentant un contrôle prédéfini. Chaque bouton des barres d'outils prédifinis a un ID propre. Par défaut, c'est un bouton vide.
  • Parameter, vous pouvez stocker dans ce paramètre les donnés que vous voulez (pour pouvoir les relire ensuite).
  • Before, position du nouveau contrôle, il se placera alors devant le contrôle dont la position est le numéro indiqué. Par défaut : à la fin de le barre de commande
  • Temporary doit être à True pour que le contrôle soit temporaire, dans ce cas il disparaît à la fermeture d'Excel. Par défaut : False.

Exemple créant une barre d'outils et y ajoute les boutons couper,copier, coller :

Pour supprimer un contrôle

Une zone de texte

Pour lancer une procédure ayant besoin d'une indication, vous pouvez utiliser une zone de texte comme dans l'exemple suivant, la macro "Ma_macro" se lance dès que l'utilisateur appuie sur la touche Entrée après avoir tapé son texte :

Une zone de liste déroulante

Vous donnez un choix à l'utilisateur, dès que celui-ci sélectionne l'un d'entre eux, la procédure attachée se lance (ici Ma_macro).

Articles liés

2 Comments

  1. Chevalier
    04/05/2024 @ 08:39

    Bonjour
    très bon tuto
    j'essaye de créer une barre de menu personnalisée
    voici le code
    Dim MaBarre As CommandBar
    Dim NouvBtn As CommandBarButton
    'ajoute une barre d'outils
    Set MaBarre = CommandBars.Add("BarrePerso")
    'ajoute le bouton couper à la barre
    Set NouvBtn = MaBarre.Controls.Add(msoControlButton, CommandBars("Standard").Controls("Couper").ID)
    'ajoute le bouton couper à la barre
    Set NouvBtn = MaBarre.Controls.Add(msoControlButton, Application.CommandBars("Standard").Controls("Copier").ID)
    'ajoute le bouton coller à la barre
    Set NouvBtn = MaBarre.Controls.Add(msoControlButton, Application.CommandBars("Standard").Controls("Coller").ID)
    'affiche la barre
    MaBarre.Visible = True

    rien ne s'affiche
    pouvez vous m'aider
    Pierre

    Reply

  2. LECORNEC
    13/12/2022 @ 19:11

    Bonjour,
    Merci beaucoup pour cet outil très utile.
    Cependant, puis-je me permettre de vous demander si il est possible de modifier la police de caractère d'un msoControlButton ?
    Je vous remercie par avance pour votre réponse
    Meilleures salutations

    Reply

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.