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
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
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
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"
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
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
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
1 2 3
| Private Sub Workbook_Open()
LaMacroQuiFaitTout
End Sub |
Pour masquer la barre d'outils
Application.CommandBars("Cemabarre").Visible = False
Pour supprimer la barre d'outils à la fermeture du classeur
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
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
1 2 3
| Sub MacroQuiAfficheLaBarreDoutilsIcones()
Application.CommandBars("Icones").Visible = True
End sub |
Partager