Ces codes ont déjà été donnés séparément. Cette discussion vise seulement à rassembler les divers éléments concernant les barres d'outils personnalisées avec VBA 97 -> 2003

Ajouter un barre d'outils personnalisée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Sub AjouterCommandBar()
Dim NomDeLaBarre
    NomDeLaBarre = "Cemabarre"

    'Si la barre existe déjà, valider la ligne suivante
    'Application.CommandBars("Cemabarre").Delete

    'Pour créer une barre de commande
    '1 => affiche la barre en haut, true => barre provisoire
    Application.CommandBars.Add "Cemabarre", 1, 0, True 'true pour barre temporaire
    
End Sub
Ajouter un bouton à une barre d'outils existante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub AjouterUnBoutonAlaBarre()
Dim LeBouton
Dim NomDeLaBarre$
    NomDeLaBarre = "CemaBarre"
    Set LeBouton = CommandBars(NomDeLaBarre).Controls _
        .Add(Type:=msoControlButton, ID:=280) 'Voir Remarque
        With LeBouton
            .Style = msoButtonIcon
            .Caption = "Action de la macro"
            .OnAction = "LaMacroAexecuter"
        End With
    Set LeBouton = Nothing
End Sub
Ajouter un menu à une barre d'outils existante et ajouter deux commandes à ce menu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub AjouterUnMenuAlaBarre()
Dim LeMenu
Dim LaCommande
Dim NomDeLaBarre$
    NomDeLaBarre = "CemaBarre"
    'pour ajouter un menu
    Set LeMenu = CommandBars(NomDeLaBarre).Controls _
        .Add(Type:=msoControlPopup)
        
        'Ajouter deux commandes au menu
        With LeMenu
            .Caption = "Propose deux commandes" 'Caption du menu

            Set LaCommande = LeMenu.Controls.Add(msoControlPopup)
                With LaCommande
                    .Caption = "Action 1 de la macro"  'Caption de la commande
                    .OnAction = "LaMacroAexecuter"   'Nom de la macro à exécuter
                End With
            Set LaCommande = Nothing
            
            Set LaCommande = LeMenu.Controls.Add(msoControlButton)
                With LaCommande
                    .Caption = "Action 2 de la macro"  'Caption de la commande
                    .OnAction = "LaMacroAexecuter"   'Nom de la macro à exécuter
                End With
            Set MonMenu = Nothing

        End With

    Set LeMenu = Nothing
    Set LaCommande = Nothing
    
    'Pour afficher la barre de commande
    Application.CommandBars(NomDeLaBarre).Visible = True

End Sub
Ajouter un bouton à une barre d'outils personnalisée et coller une image personnalisée
Pour tester la macro suivante, placer une image de 16 * 16 pixels nommée "Le Bouton.bmp" dans le répertoire "C:\Mes images"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub CollerUneImageSurUnNouveauBouton()
Dim LaBarre As CommandBar
Dim LeBouton As CommandBarButton
Dim NomDeLaBarre$, NomMacro$, NomClasseur$, CheminEtNomImage$, ActionDuDouton$

    ActionDuBouton = "La macro qui fait rien"
    NomDeLaBarre = "Cemabarre"
    NomMacro = "LaMacroAexecuter"
    NomClasseur = ThisWorkbook.Name
    CheminEtNomImage = "C:\Mes images\Le Bouton.bmp"

    'Insère l'image du bouton dans la feuille Excel
    ActiveSheet.Pictures.Insert(CheminEtNomImage).Select

    'Copie l'image en vue de son application au bouton
    Selection.Copy

    Set LaBarre = CommandBars(NomDeLaBarre)

    'Ajoute le bouton à la barre d'outils personnalisée
    Set LeBouton = LaBarre.Controls.Add(Type:=msoControlButton)
        LeBouton.FaceId = 0
        LeBouton.Caption = ActionDuBouton 'info-bulle du bouton
        LeBouton.OnAction = "'" & NomClasseur & "'!" & NomMacro
        
        'Collage de l'image sur le bouton
        LeBouton.PasteFace
        
        'Suppression de l'image dans la feuille de calculs
        Selection.Delete
        
    Set LaBarre = Nothing
    Set LeBouton = Nothing

End Sub
La macro pour tester ces différents codes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Sub LaMacroAexecuter()
     MsgBox "Macro qui fait rien"
End Sub
La macro suivante ajoute successivement
- une barre d'outils personnalisée
Dans la barre d'outils
- un premier bouton
- un menu personnalisé
Dans le menu
- deux commandes
Puis
- un second bouton
Sur le bouton
- une icône personnalisée

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Sub LaMacroQuiFaitTout()
    Call AjouterCommandBar
    Call AjouterUnBoutonAlaBarre
    Call AjouterUnMenuAlaBarre
    Call CollerUneImageSurUnNouveauBouton
End sub
Pour afficher la barre d'outils personnalisée à l'ouverture du classeur
Placer cette macro dans ThisWorkbook
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Private Sub Workbook_Open()
    LaMacroQuiFaitTout
End Sub
Pour masquer la barre d'outils
Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CommandBars("Cemabarre").Visible = False
Pour supprimer la barre d'outils à la fermeture du classeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Cemabarre").Delete
End Sub
Remarque : Pour connaître le N° de l'icône à placer sur un bouton, afficher la barre d'outils "Icônes".
Passer la souris sur l'icône désirée révèle son N° à placer dans cette ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
    Set LeBouton = CommandBars(NomDeLaBarre).Controls _
        .Add(Type:=msoControlButton, ID:=No de l'icône)
'ou sur celle-ci
        LeBouton.FaceId = No de l'icône
Pour afficher la barre d'outils "Icônes" par macro
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Sub MacroQuiAfficheLaBarreDoutilsIcones()
    Application.CommandBars("Icones").Visible = True
End sub