bonjour
j'aimerais m'essayer a la creation de barre d'outils par macro
je ne trouve nul par ou je pourrais suivant cette macro
rajoute un menu titre"mon menu" avec a l'interieur pour l'exemple une ligne "mon choix" je que pourrais recopié pour d'autre ligne
Voici une barre d'outils avec 5 boutons
Option Explicit
Private Sub Workbook_Activate()
Application.CommandBars("BO").Visible = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.CommandBars("BO").Delete
End Sub
Private Sub Workbook_Deactivate()
On Error Resume Next
Application.CommandBars("BO").Visible = False
End Sub
Private Sub Workbook_Open()
Dim BO As CommandBar
Dim Bouton1 As Object, Bouton2 As Object, Bouton3 As Object, Bouton4 As Object, Bouton5 As Object ' selectionne le nbr de bouton de la barre
On Error Resume Next
Set BO = Application.CommandBars.Add("BO")
BO.Position = msoBarFloating
BO.Protection = msoBarNoChangeVisible
With BO
Set Bouton1 = .Controls.Add(msoControlButton)
With Bouton1
.Caption = "Affichage BO en haut" 'affichage quand souris passe dessus
.FaceId = 134 'dessin sur le bouton
.OnAction = "Haut" 'lance la macro
End With
Set Bouton2 = .Controls.Add(msoControlButton)
With Bouton2
.Caption = "Affichage BO à droite"
.FaceId = 133
.OnAction = "Droite"
End With
Set Bouton3 = .Controls.Add(msoControlButton)
With Bouton3
.Caption = "Affichage BO en bas"
.FaceId = 135
.OnAction = "Bas"
End With
Set Bouton4 = .Controls.Add(msoControlButton)
With Bouton4
.Caption = "Affichage BO à gauche"
.FaceId = 132
.OnAction = "Gauche"
End With
Set Bouton5 = .Controls.Add(msoControlButton)
With Bouton5
.Caption = "Supprimer"
.FaceId = 2309
.OnAction = "Fermer"
End With
Par contre à la première lecture de ton code quelques remarques :
Declare tes bouton autrement qu'en objet ce sera plus propre par exemple :
Dim Btn_Nom As CommandBarButton
Dim Cbx_Nom As CommandBarComboBox
Ici :
Code:
BO.Position = msoBarFloating
BO.Protection = msoBarNoChangeVisible
With BO
Pourquoi ne pas encapsuler les deux premières lignes dans le With ?
Le on error resume next arghh pas beau !
Pour tes boutons qui appellent une fonction perso, met la valeur builtin a False.
Tag tes boutons comme ceci par exemple : .Tag = "MonBtn1" C'est la seule facon de pouvoir retrouver ton bouton par la suite et de pouvoir agir dessus comme ceci : Set MonBtn = CommandBars("MaBarre").FindControl(, , "btn1").
Donne à tes tags des noms explicites.
Ajoutes l'option : Temporary:=True dans la création de ta barre pour indiquer à Excel qu'elle sera détruite à la fermeture d'Excel qu'elle n'est pas permanente.