Transmettre une BO personnalisée
Le principe est de copier tes icones persos dans un classeur réservé à cet effet (que tu devras donc distribuer à tes collègues) puis, au moment de la création de la barre d'outils, d'aller y copier les icones pour les coller sur les boutons.
Ta barre d'outils "Labo" étant visible, crée un nouveau classeur et appelle-le, par exemple, IconesPersos.xls. Ensuite, pour chaque icone que tu veux conserver, Personnaliser, clic droit sur le bouton, Copier l'image du bouton, fermer Personnaliser et Coller (dans la feuille de calcul).
Ton icone apparait comme un objet image, auquel Excel attribue un nom par défaut ("Image 1" puis "Image 2", etc.). Recommence pour tous les boutons qui t'intéressent puis enregistre et ferme ton classeur. Ensuite, dans un des classeurs où tu vas créer puis détruire ta BO comme te le conseille judicieusement Alain, ajoute un module standard, et inspire-toi de ce bout de code :
Public Const nomBO = "Labo" 'fs, mpfe
sub
CreateBO()
Dim bo As CommandBar, wbk As Workbook
On Error Resume Next
deleteBO 'en cas de plantage d'Excel :-)
Set bo =Application.CommandBars.Add(nomBO)
' (Noms et chemins à adapter)
1-ouvrir le classeur "spécial icones"
Set wbk =Workbooks.Open("E:\Cheni2001\IconesPersos.xls")
' 2-copier l'icone voulue
wbk.Worksheets("Feuil1").Shapes("Image 1").Copy
With bo.Controls.Add(msoControlButton)
.Caption = "LanceMacro1"
' coller l'icone personnalisée
.PasteFace
.OnAction = "Macro1"
End With
' autant de fois que de boutons,
' répéter l'étape 2 avec chaque image
' 3-refermer le classeur "spécial icones"
wbk.Close False
end subsub Macro1() MsgBox "Et voilà le travail !" end sub
sub deleteBO() On Error Resume Next Application.CommandBars(nomBO).Delete end sub
C'est volontairement que je n'ai pas mis la barre "Labo" visible après sa création puisque tu la rendras visible dans les classeurs qui t'intéressent en utilisant leurs procédures Activate et Deactivate. Je ne pense pas, si cette barre est destinée à une utilisation fréquente, qu'il soit indispensable de la détruire et de la recréer à chaque fois. La cacher devrait suffire.
Par contre, n'oublie pas d'importer ton module de création de la BO dans tous les classeurs qui doivent l'utiliser. Enfin, où sont stockées les procédures déclenchées par les boutons de ta barre "Labo" ? Si elles sont utilisées par plusieurs classeurs, j'imagine qu'elles pourraient bien être regroupées dans ton Perso.xls. Si c'est bien le cas, tu aurais tout intérêt à les enregistrer dans une macro complémentaire.
Avantage ? Tu pourrais, au lieu d'avoir un classeur particulier pour tes icones, les enregistrer dans une feuille de ta macro complémentaire (ce n'est jamais qu'un classeur ordinaire en fait) ce qui simplifierait leur copier/coller sur tes boutons et éviterait le module à importer dans chaque classeur "utilisateur". La procédure de création pourrait être alors de ce style :
Public Const nomBO = "MaBarreOutils" 'fs, mpfe
sub CreateBO()
Dim bo As CommandBar
On Error Resume Next
deleteBO 'en cas de plantage d'Excel :-)
Set bo = Application.CommandBars.Add(nomBO)
With bo.Controls.Add(msoControlButton)
.Caption = "LanceMacro1"
ThisWorkbook.Worksheets("Feuil1").Shapes("Image 1").Copy
' coller l'icone personnalisée
.PasteFace
.OnAction = "Macro1"
End With
'etc.
end subAuteur : Frédéric Sigonneau
Mots clefs associés à cette page : barre, outil
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Intéressant mais problème d'images floues
Bonjour,
Le principe est intéressant et fonctionne très bien en revanche je m'arrache les cheveux car une fois collées dans la barre d'outil les icônes deviennent flous. J'ai essayé avec des PNG et GIF en 16x16 sans succès!
SRX
SRX