Transmettre une BO personnalisée

Comment transmettre une barre d'outil perso avec ses icones personnalisées et ses macros associées sur un autre PC ?

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 sub
sub 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 sub

Auteur :

Mots clefs associés à cette page : ,

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