Sommaire > 5. Les barres de commandes

5. Les barres de commandes

5.1. Définitions

Une « barre de commandes » est un objet programmable utilisable dans VBA pour contrôler un menu ou une barre d'outils. Tous les éléments suivants sont représentés par des objets « barre de commandes » :

  • Barres de menus, barres d'outils et menus contextuels
  • Menus faisant partie de barres de menus et barres d'outils
  • Sous-menus faisant partie de menus, sous-menus et menus contextuels.

Un « contrôle de barre de commandes » est un contrôle intégré ou personnalisé faisant partie d'une barre de menus, d'une barre d'outils, d'un sous-menu ou d'un menu contextuel. Les contrôles personnalisés pouvant être inclus dans les barres de commandes sont les suivants :

  • Bouton
  • Zone de modification
  • Zone de liste déroulante
  • Zone de liste modifiable
  • Menu contextuel.

5.2. Objets, Méthodes et Propriété

Les objets utilisés sont :

  • « CommandBars » : une collection qui représente la barre de menus et toutes les barres d'outils.
  • « Controls » : représente tous les contrôles de la barre de commandes ou du menu contextuel spécifié.

La méthode « Add » ajoute un objet à une « CommandBars » ou « CommandBars Controls ».

La propriété « Caption » définit le texte de légende du contrôle de barre de commandes spécifié. La propriété « OnAction » définit le nom de la macro Visual Basic exécutée si l'utilisateur clique sur le contrôle de barre de commandes et la propriété « Style » définit le mode d'affichage du bouton de barre de commandes spécifié.

L'exemple suivant permet :

  • de créer une nouvelle barre de commandes appelée « Personnalisé » qui ne sera pas sauvegardée en fin de session, et
  • d'ajouter à cette barre de commandes, les deux boutons « InverserC » et « InverserM » destinés à inverser deux caractères ou deux mots.
Sub Personnalisé()
    Set cmd = CommandBars.Add(Name:="Personnalisé", _
        Temporary:=True)
    cmd.Visible = True
    Set btn = cmd.Controls.Add(Type:=msoControlButton)
    With btn
        .Caption = "InverserC"
        .OnAction = "InverserC"
        .Style = msoButtonCaption
    End With
    Set btn = cmd.Controls.Add(Type:=msoControlButton)
    With btn
        .Caption = "InverserM"
        .OnAction = "InverserM"
        .Style = msoButtonCaption
    End With
End Sub

La méthode « Delete » supprime un objet d'une « CommandBar » ou « Command BarsControls » et la méthode « Reset » réinitialise la barre de commandes prédéfinie spécifiée en lui appliquant sa valeur de configuration de contrôle par défaut. La commande suivante supprime la barre de commandes « Personnalisé » :

    CommandBars("Personnalisé").Delete

Et cette commande réinitialise la barre des menus :

    CommandBars("Menu Bar").Reset

5.3. Exemples :

5.3.1. Modification d'une propriété d'un bouton

Supposons qu'on dispose d'un bouton dans la barre d'outils « Standard » qui permette de choisir entre la saisie des guillemets dactylographiques (") et des guillemets typographiques (« »). On désire que l'aspect de ce bouton change en fonction du choix de l'utilisateur , on peut utiliser la procédure suivante :

Sub Guillemets()
'
' Guillemets Macro
' Bascule entre les guillemets dactylographiques (")
'   et guillemets typographiques (« »)
'
    Options.AutoFormatAsYouTypeReplaceQuotes = _
        Not Options.AutoFormatAsYouTypeReplaceQuotes
    I = CommandBars("Standard").Controls.Count
    If Options.AutoFormatAsYouTypeReplaceQuotes Then
        CommandBars("Standard").Controls(I).Caption = _
            Chr(171) & " " & Chr(187)
    Else
        CommandBars("Standard").Controls(I).Caption = """ """
    End If
End Sub

5.3.2. Ajout du menu « Traitement » dans la « barre des menus »

La « barre de menus » est constituée de « menus » (Fichier, Edition, ...), chaque menu est constitué « d'articles » (Fichier : Nouveau, Ouvrir, ...) et certains articles sont constitués de « sous-articles » (Affichage / Barres d'outils : Standard, Mise en forme, ...).

Comme tous les objets VBA, les barres des commandes, menus, articles et sous-articles sont identifiés par un nom ou un numéro de position. Ainsi :

  • la barre de menus s'appelle « Menu Bar » et porte le numéro 33
  • la barre d'outils standard s'appelle « Standard » et porte le numéro 1

Sub AjoutMenuTraitement()
'
'   Réinitialise la barre de commandes "Menu Bar"
    CommandBars("Menu Bar").Reset
'   Ajout du menu "Traitement" à la fin de la barre "Menu Bar"
'       et de ses articles et sous-articles
    Set Menu = CommandBars("Menu Bar"). _
        Controls.Add(Type:=msoControlPopup)
    Set Article1 = Menu.Controls.Add(Type:=msoControlButton)
    Set Article2 = Menu.Controls.Add(Type:=msoControlPopup)
    Set Article21 = Article2. _
        Controls.Add(Type:=msoControlButton)
    Set Article22 = Article2. _
        Controls.Add(Type:=msoControlButton)
    Set Article3 = Menu.Controls.Add(Type:=msoControlButton)
'   Définition des légendes
    Menu.Caption = "Traitement"
    Article1.Caption = "Bienvenue"
    Article2.Caption = "Styles"
    Article21.Caption = "Styles utilisateurs"
    Article22.Caption = "Article22"
    Article3.Caption = "Liste des Barres de commandes"
'   Attribution des actions (macros VBA)
    Article1.OnAction = "Bonjour"
    Article21.OnAction = "StylesUtil"
    Article3.OnAction = "ListCommandBars"
'   Ajout d'une ligne de séparation avant l'article 3
    Article3.BeginGroup = True
End Sub

Sub Bonjour()
    MsgBox "Bonjour."
End Sub

Sub StylesUtil()
    I = 0
    For Each St In ActiveDocument.Styles
        If St.BuiltIn = False Then
            I = I + 1
            MsgBox I & ") " & St.NameLocal
        End If
    Next
End Sub

Sub ListCommandBars()
    Documents.Add
    Selection = "Index" & vbTab & "Nom" & vbTab & _
        "Visible" & vbCr
    I = 0
    For Each cmd In CommandBars
        Selection.EndKey unit:=wdStory
        I = I + 1
        Selection = I & vbTab & cmd.Name & vbTab & _
            cmd.Visible & vbCr
    Next
    Selection.WholeStory
    Selection.ConvertToTable Separator:=wdSeparateByTabs
End Sub

5.3.3. Ajout d'un nouvel article au menu contextuel « Text »

Sub AjoutArticleGlossaire()
    Dim TableTexte(4) As String
'   Réinitialise la barre de commandes "text"
    CommandBars("text").Reset
'   Noms des sous-articles
    TableTexte(0) = "Texte1"
    TableTexte(1) = "Texte2"
    TableTexte(2) = "Texte3"
    TableTexte(3) = "Texte4"
    TableTexte(4) = "Texte5"
'   Ajout de l'article "Glossaire" au menu contextuel "Text"
'   et des sous-articles (Texte1 à Texte5)
    Set Article = Application.CommandBars("Text").Controls. _
        Add(Type:=msoControlPopup)
    Article.Caption = "Glossaire"
    Article.BeginGroup = True
    For I = 0 To UBound(TableTexte)
        Set SousArticle = Article.Controls. _
            Add(Type:=msoControlButton, Parameter:=I)
        With SousArticle
            .Caption = TableTexte(I)
            .OnAction = "InsertText"
        End With
    Next I
End Sub

Function InsertText()
    Dim TableTexte(4) As String
    TableTexte(0) = "Bla bla bla "
    TableTexte(1) = "Gna gna gna "
    TableTexte(2) = "Dites 33 "
    TableTexte(3) = "... "
    TableTexte(4) = "... "
    I = CommandBars.ActionControl.Parameter
    Selection = TableTexte(I)
    Selection.Collapse (wdCollapseEnd)
End Function

Sommaire - Début de cette page
Page suivante: 6. Traitement inter application

Imprimer cet article