L'informatique à votre portée
L'informatique prêt-à-porter

Faites appel à moi pour vos formations
sur les dpts 81, 31, 82, 11 et 67 (Strasbourg)
Confiez moi vos développements Office

FacebookTwitterGoogle BookmarksLinkedin

La collection

Imprimer E-mail
4 mars 2014

La collection CommandBars 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.

Sub ListeBarre()
     Dim cbar As CommandBar

     For Each cbar In Application.CommandBars 'pour chaque barre de l'application
          ActiveCell = cbar.Index                      'index de la barre dans la cellule active
          ActiveCell.Offset(0, 1) = cbar.NameLocal 'nom local de la barre dans la cellule située à droite de la cellule active
          ActiveCell.Offset(0, 2) = cbar.Name ' nom de la barre dans la cellule située à 2 colonnes à droite de la cellule active
          ActiveCell.Offset(1, 0).Select 'sélection de la cellule situé sous la cellule active
     Next
End Sub

Afficher/masquer une barre

Imprimer E-mail
4 mars 2014

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

  • Pour la rendre visible (par ex. avec la barre standard) :
    Application.CommandBars("Standard").Visible = True
  • Pour la rendre invisible :
    Application.CommandBars("Standard").Visible = False
  • pour la rendre inactive et donc inaccessible :
    Application.CommandBars("Standard").Enabled = False
  • vous devrez alors la rendre active ainsi :
    Application.CommandBars("Standard").Enabled = True

Cette dernière méthode est préférable pour masquer toutes les barres affichées puis faire réapparaître uniquement seulement qui était affichées comme dans les 2 exemples suivants :

Sub MasqueBarre()
     Dim cbar As CommandBar

     For Each cbar In Application.CommandBars 'pour chaque barre de l'application
          cbar.Enabled = False                         'inactivation de la barre
     Next
End Sub

Sub AffichBarre()
     Dim cbar As CommandBar

     For Each cbar In Application.CommandBars 'pour chaque barre de l'application
          cbar.Enabled = True                          'activation de la barre
     Next
End Sub

Ajouter/Supprimer une barre

Imprimer E-mail
4 mars 2014

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 supprimer une barre :

Application.CommandBars("nom de votre barre").Delete

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 :

Sub SupprBarrePerso()
     Dim cbar As CommandBar

     For Each cbar In Application.CommandBars
          If Not cbar.BuiltIn Then cbar.Delete 'si non prédéfinie alors suppression
     Next
End Sub

Ajouter/supprimer un contrôle

Imprimer E-mail
4 mars 2014

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 :

Application.CommandBars("Standard").Controls.Add [Type], [Id], [Parameter], [Before], [Temporary]

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 :

Sub NouvBarre()
     Dim MaBarre As CommandBar
     Dim NouvBtn As CommandBarButton

     Set MaBarre = CommandBars.Add("BarrePerso") 'ajoute une barre d'outils
     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 couper à la barre
     Set NouvBtn = MaBarre.Controls.Add(msoControlButton, Application.CommandBars("Standard").Controls("Coller").ID)  'ajoute le bouton coller à la barre
     MaBarre.Visible = True 'affiche la barre
End Sub

Pour supprimer un contrôle :

CommandBars("BarrePerso").Controls(3).Delete

Une zone de texte

Imprimer E-mail
4 mars 2014

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 :

Sub AjoutZoneTexte()
     Dim MaBarre As CommandBar
     Dim MonTxt As CommandBarComboBox ' une zone de texte est de ce type

     Set MaBarre = CommandBars("BarrePerso")
     Set MonTxt = MaBarre.Controls.Add(msoControlEdit) 'ajoute une zone de texte
     MonTxt.OnAction = "Ma_macro"
     MonTxt.Tag = "txt1"
End Sub

Sub Ma_macro()
     Dim MonBtn As CommandBarComboBox, strTxt As String

     Set MonBtn = CommandBars("BarrePerso").FindControl(, , "txt1")
     strTxt = MonBtn.Text
     'ici vous mettez vos instructions, exemple :
     MsgBox strTxt
End Sub

Une zone de liste déroulante

Imprimer E-mail
4 mars 2014

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

Sub AjoutZoneTexte()
     Dim MaBarre As CommandBar
     Dim MonTxt As CommandBarComboBox

     Set MaBarre = CommandBars("BarrePerso")
     Set MonTxt = MaBarre.Controls.Add(msoControlDropdown) 'ajoute une liste déroulante
     With MonTxt
          .OnAction = "Ma_macro"
          .Tag = "lst1"
          .AddItem "Choix 1" 'ajoute une ligne à la liste
          .AddItem "Choix 2"
          .AddItem "Choix 3"
          .AddItem "Choix 4"
     End With
End Sub

Sub Ma_macro()
     Dim MonBtn As CommandBarComboBox, strTxt As String

     Set MonBtn = CommandBars("BarrePerso").FindControl(, , "lst1")
     strTxt = MonBtn.Text
     'ici vous mettez vos instructions, exemple :
     MsgBox strTxt
End Sub

Modifier un contrôle

Imprimer E-mail
4 mars 2014

Après avoir ajouté un bouton personnalisé, il vous faut également indiquer son étiquette (caption), son image, son état (enfoncé ou relevé), son style, une référence pour le retrouver ensuite et surtout la procédure qui devra s'exécuter lorsque l'on clique dessus. Dans ce cas vous devez lors de la création du contrôle l'affecter à une variable ainsi :