|
|
|
|
Salut, je voudrais creer une fonction qui au chargement va creer une barre avec des boutons, et chacun de ces boutons lance une macro. j'ai deja essaye plusieurs facons de faire, trouvees sur le net, mais a chaque fois c'est la ligne contenant la commande de la creation de la barre qui bloque le processus. voila ou j'en suis au moment actuel :
Sub NewBar_Open()
CommandBars.Add(Name:="BarPerso", Position:=msoBarFloating)
cbar1.Visible = True
cbar1.Controls.Add Type:=msoControlButton, Before:=1
With CommandBars("BarPerso")
.Left = 620
.Top = 450
.Width = 120
End With
End Sub
Private Sub exec_Click()
End Sub
le 1er sub contient le _Open (d'apres le fichier help de l'editeur vb) pour s'executer a l'ouverture du classeur. le 2eme sub est la macro a executer et exec est le nom du bouton (fictif) et _Click (toujours d'apre le fichier d'aide) est l'evenement quand on clique sur le bouton.
il n'y a qu'une seule ligne pour un seul bouton car j'ai deja du mal a faire une barre avec un seul bouton, alors une creation dynamique de boutons.....
bref, si quelq'un pourrait m'aider ce serait vraiment sympa, et merci d'avance.
Il est passé par ici, il repassera par là... (air connu).
Application.CommandBars("MaBarre").Visible = True/FalsePourquoi te compliquer la vie ? |
Ah, salut.....again ^^;
|
Essaie ce genre de petit truc... Sub CréeBarreOutils()
On Error Resume Next
CommandBars("MaBarre").Delete
On Error GoTo 0
With CommandBars.Add(Name:="MaBarre")
With .Controls.Add(Type:=msoControlButton)
.OnAction = "MaMacro" ' macro à lancer
.FaceId = 2600 ' modèle de bouton
.TooltipText = "Ça fait ci" ' info bulle
End With
With .Controls.Add(Type:=msoControlPopup)
.Caption = "Autre façon de faire"
.TooltipText = "Texte qu'on veut"
With .Controls.Add(msoControlButton)
.TooltipText = "Ça fait ca" ' info bulle
.FaceId = 2600 ' modèle de bouton
.OnAction = "MonAutreMacro" ' macro à lancer
.Caption = "Lancement" ' texte de la ligne
End With
End With
.Visible = True
End With
End Sub
Sub MaMacro()
MsgBox "Ça marche !"
End Sub
Sub MonAutreMacro()
MsgBox "Ça marche aussi!"
End Sub
|
Hoooo, je vois que j'ai encore du chemin a faire avant de pouvoir sortir des idees dans ce genre : je n'avais pas pense a utiliser les infobulles pour decrire les actions du bouton ^^;
|
Oki....j'ai essaye d'adapter le code pour faire des boutons et barre dynamiquement. mais, comme il y a toujours un "mais", meme s'il ne me dit pas que j'ai des erreurs dans le code, il ne cree aucune barre....
|
Hmmmm, en attendant de finir cette macro, j'ai adapté celle que tu m'a donnée Armojax :
|
Oki, merci encore Armojax, j'ai bien essaye d'utiliser _Open, mais je le mettais dans le module, m'etonne plus qu'il a pas marche ¬_¬
|
Voilà un test que j'ai fait. Dans la feuille listeMacros, j'ai en colonnes A, B, C, D : Nom-barre Nom-macro Libellé-barre N°-bouton B1 Macro1 La Une 483 B1 Macro2 La Deux 481 B1 Macro3 La Trois 482 B1 Macro4 La Quatre 484 B2 Macro5 La Cinq 59 B2 Macro6 La Six 276Essaie ce petit code : Sub CréeBarreOutils()
Dim I As Long
Dim Barre As String
Dim Macro As String
Dim Libellé As String
Dim Bouton As Long
Worksheets("listeMacros").Activate
I = 2
Do While Cells(I, 1).Value <> ""
Barre = Cells(I, 1).Value
On Error Resume Next
CommandBars(Barre).Delete
On Error GoTo 0
With CommandBars.Add(Name:=Barre)
Do
Macro = Cells(I, 2).Value
Libellé = Cells(I, 3).Value
Bouton = Cells(I, 4).Value
With .Controls.Add(Type:=msoControlButton)
.OnAction = Macro
.FaceId = Bouton
.TooltipText = Libellé
.Caption = Libellé
End With
I = I + 1
Loop While Cells(I, 1) = Barre
.Visible = True
End With
Loop
End Sub
Sub Macro1()
MsgBox "OK1"
End Sub
Sub Macro2()
MsgBox "OK2"
End Sub
Sub Macro3()
MsgBox "OK3"
End Sub
Sub Macro4()
MsgBox "OK4"
End Sub
Sub Macro5()
MsgBox "OK5"
End Sub
Sub Macro6()
MsgBox "OK6"
End Sub |
Hum, je vois a peu pres ce que tu fais, mais :
|
Ok, j'ai essaye et ca marche, il place effectivement les barres en la ou je veux, le seul probleme c'est que si il y a plus d'une barre il place une barre par ligne, ou (si je me suis pas bien exprimé) il cree un row par bare créée. voici le dernier code, ayant le meme effet que les autres, que j'ai utilisé :
|
Okie, apres une petite discution avec les concernés, la barre n'a finalement pas besoin d'etre dockée....en revanche je voudrais juqte savoir comment je pourrais supprimer la barre avant de fermer la feuille, car, la barre (ou les barres, depends de la liste des barres) reste et se retrouve dans d'autres feuilles, ce qui gene ceux pour qui la macro a ete faite ^^;....je sais que je dois utiliser une commande dans le genre :
|
Quand tu crées une barre d'outils, elle s'ajoute aux autres barres déjà existantes dans Excel. Si tu fais : Affichage/Barres d'outils, ta barre figure dans la liste. Tant que tu ne la supprimes pas, elle y reste, qu'elle soit visible ou non. Une fois créée, tu peux quitter Excel, puis rappeler ton classeur : avec Affichage/Barres d'outils, tu peux constater que ta barre ne s'est pas fait la malle, même si tu ne l'as pas regénérée.
|