[Excel VBA]Probleme de creation de barres
Résolu
ks13
Messages postés
191
Date d'inscription
Statut
Membre
Dernière intervention
-
ks13 Messages postés 191 Date d'inscription Statut Membre Dernière intervention -
ks13 Messages postés 191 Date d'inscription Statut Membre Dernière intervention -
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.
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.
23 réponses
salut, et.....j'adore ta signature XD
hum, revenons a nos moutons...un formulaire tu dis? comment ca?
hum, revenons a nos moutons...un formulaire tu dis? comment ca?
o_o
oki, je commence dans vba la, alors je vois pas le genre de formulaires que tu pe avoir et surtout, je ne vois pas comment tu peu reemplacer une commandbar par un formulaire....
pourrais-tu preciser ta pensée s'il te plait?
oki, je commence dans vba la, alors je vois pas le genre de formulaires que tu pe avoir et surtout, je ne vois pas comment tu peu reemplacer une commandbar par un formulaire....
pourrais-tu preciser ta pensée s'il te plait?
euh, vi, je vois ce que tu veux dire maintenant, mais, j'ai deja fait cela et on me demande des boutons dans une commandbar a la place ^^; (et en plus j'ai pris la peine de faire une bonne presentantion des boutons T_T)...donc la je dois me prendre la tete, comme tu dis ^^;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Il est passé par ici, il repassera par là... (air connu).
Pourquoi tiens-tu à créer dynamiquement ta barre d'outils ? Tu peux parfaitement te la faire à la main, tranquillement. Il y a dans Excel quantités de barres d'outils qui sont en attente (Dessin, Protection, Graphique, Wordart, etc.). On les affiche quand on en a besoin, et sinon elles restent masquées.
A l'ouverture, tu l'affiches, et à la fermeture tu la masques.
Pourquoi tiens-tu à créer dynamiquement ta barre d'outils ? Tu peux parfaitement te la faire à la main, tranquillement. Il y a dans Excel quantités de barres d'outils qui sont en attente (Dessin, Protection, Graphique, Wordart, etc.). On les affiche quand on en a besoin, et sinon elles restent masquées.
A l'ouverture, tu l'affiches, et à la fermeture tu la masques.
Application.CommandBars("MaBarre").Visible = True/FalsePourquoi te compliquer la vie ?
ah, salut.....again ^^;
euh, je n'essaie pas de me compliquer la vie, c'est mes superiurs qui la compliquent pour moi ^^;
s'ile me disent de faire ceci, alors je dois le faire coute que coute ^^;
enfin, pour le moment je n'ai qu'une seule macro : celle que tu m'a aide a faire (il a pas aimé le bouton sur une des feuilles u_u;). mais je cherche a faire une qui en fait autant que necessaire en prevision de futures macros ^^, pour le moment j'ai essaye d'avoir juste une fonction qui se lancerait au chargement du classeur et qui creerait le bouton necessaire, une fois que j'aurais compris le fonctionnement, j'avais prevu de faire une fnction a qui on passait des argument et qui crééerais des boutons en foction des arguments qui lui sont donés. les arguments seraient :
nom du bouton , macro liée, position du bouton [pas necessaire].
pour le moment, rien qu'une macro qui crééérais le bouton pour la macro consolidation au chargement du classeur serait bien, apres j'aurais assez de temps pour essaier de trouver par moi meme une facon d'ameliorer la macro ^^;
euh, je n'essaie pas de me compliquer la vie, c'est mes superiurs qui la compliquent pour moi ^^;
s'ile me disent de faire ceci, alors je dois le faire coute que coute ^^;
enfin, pour le moment je n'ai qu'une seule macro : celle que tu m'a aide a faire (il a pas aimé le bouton sur une des feuilles u_u;). mais je cherche a faire une qui en fait autant que necessaire en prevision de futures macros ^^, pour le moment j'ai essaye d'avoir juste une fonction qui se lancerait au chargement du classeur et qui creerait le bouton necessaire, une fois que j'aurais compris le fonctionnement, j'avais prevu de faire une fnction a qui on passait des argument et qui crééerais des boutons en foction des arguments qui lui sont donés. les arguments seraient :
nom du bouton , macro liée, position du bouton [pas necessaire].
pour le moment, rien qu'une macro qui crééérais le bouton pour la macro consolidation au chargement du classeur serait bien, apres j'aurais assez de temps pour essaier de trouver par moi meme une facon d'ameliorer la macro ^^;
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 ^^;
en tout cas ca marche tel quel, il faut juste que je l'adapte maintenant...
pendant que j'y suis, je voulais savoir si c'est possible de faire une commande qui cherche toutes les macros et met leurs noms dans un tableau? je veux dire, je ne me souviens pas d'avoir vu ce genre de fonctions ou meme de comparateur dans le genre iffunction()...
en tout cas ca marche tel quel, il faut juste que je l'adapte maintenant...
pendant que j'y suis, je voulais savoir si c'est possible de faire une commande qui cherche toutes les macros et met leurs noms dans un tableau? je veux dire, je ne me souviens pas d'avoir vu ce genre de fonctions ou meme de comparateur dans le genre iffunction()...
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....
voici le code changé :
Private Sub CréeBarreOutils__Initialize()
Dim cbar As String
Dim mac As String
Dim lab As String
cbar = ""
Sheets("listeMacros").Activate
c = 1
r = 1
Tr = Feuille.Cells(65536, 1).End(xlUp).Row
For r = 1 To Tr
If Cells(r, c).Value <> "" And Cells(r, c).Value <> cbar Then
cbar = Cells(r, c).Value
mac = Cells(r, c + 1).Value
lab = Cells(r, c + 2).Value
On Error Resume Next
CommandBars(cbar).Delete
On Error GoTo 0
With CommandBars.Add(Name:=cbar)
createcbar
.Visible = True
End With
Next
End Sub
Sub createcbar(mac, lab)
With .Controls.Add(Type:=msoControlButton)
.OnAction = mac ' macro à lancer
.FaceId = 2600 ' modèle de bouton
.TooltipText = lab ' info bulle
End With
With .Controls.Add(Type:=msoControlPopup)
.Caption = "Autre façon de faire"
.TooltipText = "Blabla"
With .Controls.Add(msoControlButton)
.TooltipText = lab ' info bulle
.FaceId = 2600 ' modèle de bouton
.OnAction = mac ' macro à lancer
.Caption = lab ' texte de la ligne
End With
End With
End Sub
Sub MaMacro()
MsgBox "Ça marche !"
End Sub
Sub MonAutreMacro()
MsgBox "Ça marche aussi!"
End Sub
la feuille listeMacros contiens un tableau de r(rows) x 3(columns) avec l'ordre suivant : nom de la barre/nom de la macro/libellé. ce que j'ai essaye de faire c'est que le programme verifie le nom de la barre et tant que le nom est le meme il lui ajoute le bouton de la macro correspondante avec le libellé correspondant.
voici le code changé :
Private Sub CréeBarreOutils__Initialize()
Dim cbar As String
Dim mac As String
Dim lab As String
cbar = ""
Sheets("listeMacros").Activate
c = 1
r = 1
Tr = Feuille.Cells(65536, 1).End(xlUp).Row
For r = 1 To Tr
If Cells(r, c).Value <> "" And Cells(r, c).Value <> cbar Then
cbar = Cells(r, c).Value
mac = Cells(r, c + 1).Value
lab = Cells(r, c + 2).Value
On Error Resume Next
CommandBars(cbar).Delete
On Error GoTo 0
With CommandBars.Add(Name:=cbar)
createcbar
.Visible = True
End With
Next
End Sub
Sub createcbar(mac, lab)
With .Controls.Add(Type:=msoControlButton)
.OnAction = mac ' macro à lancer
.FaceId = 2600 ' modèle de bouton
.TooltipText = lab ' info bulle
End With
With .Controls.Add(Type:=msoControlPopup)
.Caption = "Autre façon de faire"
.TooltipText = "Blabla"
With .Controls.Add(msoControlButton)
.TooltipText = lab ' info bulle
.FaceId = 2600 ' modèle de bouton
.OnAction = mac ' macro à lancer
.Caption = lab ' texte de la ligne
End With
End With
End Sub
Sub MaMacro()
MsgBox "Ça marche !"
End Sub
Sub MonAutreMacro()
MsgBox "Ça marche aussi!"
End Sub
la feuille listeMacros contiens un tableau de r(rows) x 3(columns) avec l'ordre suivant : nom de la barre/nom de la macro/libellé. ce que j'ai essaye de faire c'est que le programme verifie le nom de la barre et tant que le nom est le meme il lui ajoute le bouton de la macro correspondante avec le libellé correspondant.
hmmmm, en attendant de finir cette macro, j'ai adapté celle que tu m'a donnée Armojax :
Sub CBO()
On Error Resume Next
CommandBars("BarrePerso").Delete
On Error GoTo 0
With CommandBars.Add(Name:="BarrePerso")
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Lancement" ' macro à lancer
.FaceId = 2600 ' modèle de bouton
.TooltipText = "Consolidation" ' info bulle
End With
.Visible = True
End With
End Sub
et ici aussi il y a un petit probleme : la macro marche tres bien si je la lance avec un raccourci ou depuis le menu des macros, mais comme j'ai besoin que la barre soit créée a l'ouverture du fichier, je n'ai pas reussi a trouver le moyen de faire lancer la macro a l'ouverture. quelqu'un aurait une idee dessus?
Sub CBO()
On Error Resume Next
CommandBars("BarrePerso").Delete
On Error GoTo 0
With CommandBars.Add(Name:="BarrePerso")
With .Controls.Add(Type:=msoControlButton)
.OnAction = "Lancement" ' macro à lancer
.FaceId = 2600 ' modèle de bouton
.TooltipText = "Consolidation" ' info bulle
End With
.Visible = True
End With
End Sub
et ici aussi il y a un petit probleme : la macro marche tres bien si je la lance avec un raccourci ou depuis le menu des macros, mais comme j'ai besoin que la barre soit créée a l'ouverture du fichier, je n'ai pas reussi a trouver le moyen de faire lancer la macro a l'ouverture. quelqu'un aurait une idee dessus?
Mets le lancement de ta macro à l'ouverture de ton classeur :
Private Sub Workbook_Open() == ici le lancement == End SubCette macro se situe non pas dans un module standard, mais dans le code associé à ThisWorkbook (au-dessus des modules dans l'Explorateur de Projets).
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 ¬_¬
en ce qui concerne la creation dynamique des barres, j'ai verifie au pas a pas et l'erreur se situerais ici :
Private Sub CréeBarreOutils__Initialize()
Dim cbar As String
Dim mac As String
Dim lab As String
cbar = ""
Sheets("listeMacros").Activate
c = 1
r = 1
Tr = Feuille.Cells(65536, 1).End(xlUp).Row
For r = 1 To Tr
If Cells(r, c).Value <> "" And Cells(r, c).Value <> cbar Then
cbar = Cells(r, c).Value
mac = Cells(r, c + 1).Value
lab = Cells(r, c + 2).Value
On Error Resume Next
CommandBars(cbar).Delete
On Error GoTo 0
With CommandBars.Add(Name:=cbar)
createcbar <==
.Visible = True
End With
Next
End Sub
jusque la je n'ai vu que comment appeler une macro depui une autre macro, mais je n'ai pas eu besoin de passer des arguments jusque la, or la macro createbar a besoin de 2 arguments mac et lab. j'ai essaye de mettre createbar(mac, lab) mais a ce moment il me dit qu'il me manque ":=" quelque part....ce que je n'ai pas compris mac et lab font reference au nom de la macro et au libbele de la macro dans creebarreoutils, pareil pour createbar. est-ce que le conflit viendrais du fait que les variables ont le meme nom?
en ce qui concerne la creation dynamique des barres, j'ai verifie au pas a pas et l'erreur se situerais ici :
Private Sub CréeBarreOutils__Initialize()
Dim cbar As String
Dim mac As String
Dim lab As String
cbar = ""
Sheets("listeMacros").Activate
c = 1
r = 1
Tr = Feuille.Cells(65536, 1).End(xlUp).Row
For r = 1 To Tr
If Cells(r, c).Value <> "" And Cells(r, c).Value <> cbar Then
cbar = Cells(r, c).Value
mac = Cells(r, c + 1).Value
lab = Cells(r, c + 2).Value
On Error Resume Next
CommandBars(cbar).Delete
On Error GoTo 0
With CommandBars.Add(Name:=cbar)
createcbar <==
.Visible = True
End With
Next
End Sub
jusque la je n'ai vu que comment appeler une macro depui une autre macro, mais je n'ai pas eu besoin de passer des arguments jusque la, or la macro createbar a besoin de 2 arguments mac et lab. j'ai essaye de mettre createbar(mac, lab) mais a ce moment il me dit qu'il me manque ":=" quelque part....ce que je n'ai pas compris mac et lab font reference au nom de la macro et au libbele de la macro dans creebarreoutils, pareil pour createbar. est-ce que le conflit viendrais du fait que les variables ont le meme nom?
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 :
1. comment je pourrais savoir le n° des boutons
2. j'ai pas pensé a ca avant, mais est-ce qu'il y a une commande qui deplacera la barre nouvellement cree a coté des autres barres en haut, (de preference apres la derniere barre dockée pour les retrouver plus facilement)?
1. comment je pourrais savoir le n° des boutons
2. j'ai pas pensé a ca avant, mais est-ce qu'il y a une commande qui deplacera la barre nouvellement cree a coté des autres barres en haut, (de preference apres la derniere barre dockée pour les retrouver plus facilement)?
Pour les boutons, tu peux soit les fariquer toi-même, soit piocher dans ceux qui existent. Par curiosité ce matin, je me suis fait une petite macro pour les visualiser par tranches de 20, de 1 à... 10000 ! D'accord, il y a des trous, mais quand même !
Pour ne pas me palucher ça à chaque fois, j'ai noté les plus funny. Voici la liste que j'ai faite :
' VALEURS DE QUELQUES "FaceID"
' 25 Loupe
' 29 Traces de pas
' 33 Réveil
' 38à41 Flèches
' 46 Jumelles
' 49 Point d'interrogation
' 50 Calculette
' 51 Main
' 52 Petit cochon
' 59 Smiley content
' 126 Horloge
' 141 Jumelles
' 272 Note de musique
' 273 Cloche
' 274 Bulle de BD
' 275 Téléphone
' 276 Smiley boudeur
' 342 Ampoule blanche
' 343 Ampoule allumée jaune
' 352 Ampoule allumée rouge
' 353 Livre
' 481 As de coeur
' 482 As de carreau
' 483 As de pic
' 484 As de trèfle
' 964 Point d'exclamation
' 983 Livre
' 1016 Maison
' 1019 X blanc dans un cercle rouge
' 1102 Verre à pied
' 1382 Spot
' 1885 Drapeau rouge
' 1907 Drapeau blanc
' 6914 Etoile filante verte
' 6915 Etoile filante jaune
' 6916 Etoile filante rouge
Quant à l'emplacement dans l'écran, tu peux utiliser les propriétés Top et Left, qui permettent de positionner respectivement par rapport au haut et au bord gauche de l'écran.
Pour ne pas me palucher ça à chaque fois, j'ai noté les plus funny. Voici la liste que j'ai faite :
' VALEURS DE QUELQUES "FaceID"
' 25 Loupe
' 29 Traces de pas
' 33 Réveil
' 38à41 Flèches
' 46 Jumelles
' 49 Point d'interrogation
' 50 Calculette
' 51 Main
' 52 Petit cochon
' 59 Smiley content
' 126 Horloge
' 141 Jumelles
' 272 Note de musique
' 273 Cloche
' 274 Bulle de BD
' 275 Téléphone
' 276 Smiley boudeur
' 342 Ampoule blanche
' 343 Ampoule allumée jaune
' 352 Ampoule allumée rouge
' 353 Livre
' 481 As de coeur
' 482 As de carreau
' 483 As de pic
' 484 As de trèfle
' 964 Point d'exclamation
' 983 Livre
' 1016 Maison
' 1019 X blanc dans un cercle rouge
' 1102 Verre à pied
' 1382 Spot
' 1885 Drapeau rouge
' 1907 Drapeau blanc
' 6914 Etoile filante verte
' 6915 Etoile filante jaune
' 6916 Etoile filante rouge
Quant à l'emplacement dans l'écran, tu peux utiliser les propriétés Top et Left, qui permettent de positionner respectivement par rapport au haut et au bord gauche de l'écran.
donc, si je veux placer la barre a la derniere ligne et a la fin, donc a droite, je dois mettre :
msoBarRow = msoBarRowLast
msoBarPosition = msoBarRight
c'est bien ca? (ceci viens du fichier help de l'editeur ^^;)
msoBarRow = msoBarRowLast
msoBarPosition = msoBarRight
c'est bien ca? (ceci viens du fichier help de l'editeur ^^;)
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é :
With CommandBars.Add(Name:=Barre)
CommandBars(Barre).Position = msoBarTop
CommandBars(Barre).RowIndex = msoBarRowFirst
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
With CommandBars.Add(Name:=Barre)
CommandBars(Barre).Position = msoBarTop
CommandBars(Barre).RowIndex = msoBarRowFirst
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
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 :
Private Sub Workbook_BeforeClose(Cancel as Boolean)
Dim Barre As String
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
Loop
End Sub
euh...je crois pas que j'ai oublié quelque chose...enfin, si ce que j'ai utilisé est bon, si j'ai bien compris je dois le mettre dans "ThisWorkbook" dans "Microsoft Excel Objets" et pas dans les modules, c'est bien ca?
p.s : je viens de tester et ca provoque un blocage au niveau de excel, qui plante....quelqu'un pourrait m'aider a corriger l'erreur que j'ai fait avec le code?
Private Sub Workbook_BeforeClose(Cancel as Boolean)
Dim Barre As String
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
Loop
End Sub
euh...je crois pas que j'ai oublié quelque chose...enfin, si ce que j'ai utilisé est bon, si j'ai bien compris je dois le mettre dans "ThisWorkbook" dans "Microsoft Excel Objets" et pas dans les modules, c'est bien ca?
p.s : je viens de tester et ca provoque un blocage au niveau de excel, qui plante....quelqu'un pourrait m'aider a corriger l'erreur que j'ai fait avec le code?
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.
Donc je ne vois pas trop l'intérêt de la supprimer/recréer à chaque fois.
Quand à gêner ou non certains utilisateurs : il suffit que tu la rendes visible pour ceux qui en ont besoin :
CommandBars("MaBarre").Visible = True/False.
Personne n'est gêné par les barres d'outils masquées qui ne s'affichent pas.
D'ailleurs je me pose une question : sur combien de postes ta macro va-t-elle fonctionner ? Si c'est sur 50 ou 1500, OK, mieux vaut la générer par programme. On diffuse la nouvelle version, et ça roule.
Mais si c'est seulement sur ton poste et celui de ton boss, tu passeras moins de temps à créer la barre et à l'installer à la main... Quand tu as une version stable, tu installes la barre sur le poste de Paulette, et 5 ans après ça roule toujours sans problème...
Tout ça dépend evidemment du contexte, que je ne connais pas.
Donc je ne vois pas trop l'intérêt de la supprimer/recréer à chaque fois.
Quand à gêner ou non certains utilisateurs : il suffit que tu la rendes visible pour ceux qui en ont besoin :
CommandBars("MaBarre").Visible = True/False.
Personne n'est gêné par les barres d'outils masquées qui ne s'affichent pas.
D'ailleurs je me pose une question : sur combien de postes ta macro va-t-elle fonctionner ? Si c'est sur 50 ou 1500, OK, mieux vaut la générer par programme. On diffuse la nouvelle version, et ça roule.
Mais si c'est seulement sur ton poste et celui de ton boss, tu passeras moins de temps à créer la barre et à l'installer à la main... Quand tu as une version stable, tu installes la barre sur le poste de Paulette, et 5 ans après ça roule toujours sans problème...
Tout ça dépend evidemment du contexte, que je ne connais pas.
hmmm, il est vrai que je ne devrais pas me soucier de cela si ce n'est que pour 2 pc, les problemes sont :
1. le boss a l'autorité, si il donne un ordre et que c'est dans ton domaine d'aaction tu dois l'executer (je suis stagiaire, pour l'instant).
2. j'ai toujours tendance a faire les fonctions et programmes de facon a ce qu'ils soient executables sur tous les pc et pour toutes les personnes.
3. j'ai tendance a dynamiser un maximum chacune de mes fonctions, quite a perdre en compacité, la fonction pourra s'executer sur n'importe quel poste.
4. pour le moment l'entreprise n'est pas tres grande (3 personnes) mais des septembre d'autres personnes vont s'y joindre (3-4 d'apres ce que je sais) donc ce n'est plus 3 postes mais une mini entreprise qui utiliseront la macro ^^;
bref, autant de raison pour lesquelles je fais ce qu'on me dit, par contre, j'ai essaye de supprimmer les barres car c'est la 1ere idee que j'ai eu, mais il est vrai que je peux aussi simplement les cacher ^^
je vais essaier cela.
1. le boss a l'autorité, si il donne un ordre et que c'est dans ton domaine d'aaction tu dois l'executer (je suis stagiaire, pour l'instant).
2. j'ai toujours tendance a faire les fonctions et programmes de facon a ce qu'ils soient executables sur tous les pc et pour toutes les personnes.
3. j'ai tendance a dynamiser un maximum chacune de mes fonctions, quite a perdre en compacité, la fonction pourra s'executer sur n'importe quel poste.
4. pour le moment l'entreprise n'est pas tres grande (3 personnes) mais des septembre d'autres personnes vont s'y joindre (3-4 d'apres ce que je sais) donc ce n'est plus 3 postes mais une mini entreprise qui utiliseront la macro ^^;
bref, autant de raison pour lesquelles je fais ce qu'on me dit, par contre, j'ai essaye de supprimmer les barres car c'est la 1ere idee que j'ai eu, mais il est vrai que je peux aussi simplement les cacher ^^
je vais essaier cela.
argh, je dois vraiment etre bete, je n'arrive pas a faire marcher la fonction correctement....j'ai utilise ca :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Barre As String
Dim NL As Long
Worksheets("listeMacros").Activate
NL = Worksheets("listeMacros").Cells(65536, 1).End(xlUp).Row
For I = 2 To NL
If Cells(I, 1).Value <> "" Then
Barre = Cells(I, 1).Value
On Error Resume Next
CommandBars(Barre).Visible = False
On Error GoTo 0
End If
Next
End Sub
et, malgré le fait qu'il ne me montre pas d'erreurs, il ne ferme pas la barre...
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Barre As String
Dim NL As Long
Worksheets("listeMacros").Activate
NL = Worksheets("listeMacros").Cells(65536, 1).End(xlUp).Row
For I = 2 To NL
If Cells(I, 1).Value <> "" Then
Barre = Cells(I, 1).Value
On Error Resume Next
CommandBars(Barre).Visible = False
On Error GoTo 0
End If
Next
End Sub
et, malgré le fait qu'il ne me montre pas d'erreurs, il ne ferme pas la barre...
PS: moi aussi j'adore ma signature et c'est tellement vrai....