[Excel VBA]Probleme de creation de barres
Résolu/Fermé
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
-
17 août 2006 à 17:30
ks13 Messages postés 191 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 1 août 2011 - 21 août 2006 à 14:52
ks13 Messages postés 191 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 1 août 2011 - 21 août 2006 à 14:52
A voir également:
- Commandbars vba
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Vba dépassement de capacité ✓ - Forum Excel
23 réponses
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
17 août 2006 à 17:41
17 août 2006 à 17:41
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?
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
17 août 2006 à 17:48
17 août 2006 à 17:48
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?
balou311
Messages postés
765
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
21 septembre 2006
87
17 août 2006 à 17:56
17 août 2006 à 17:56
Ben ce que je veux dire c'est que au lieu de faire un command bar tu fais un formulaire.
c'est à dire que ton formulaire aura des boutons qui lancerons tes macro...
je pense que tu te prendras moins la tête
c'est plus clair?
c'est à dire que ton formulaire aura des boutons qui lancerons tes macro...
je pense que tu te prendras moins la tête
c'est plus clair?
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
17 août 2006 à 18:00
17 août 2006 à 18:00
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 ^^;
balou311
Messages postés
765
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
21 septembre 2006
87
17 août 2006 à 18:07
17 août 2006 à 18:07
Ah ok désolé
et bien je ne pourrais pas plus t'aider alors
bonne chance et bon courage
et bien je ne pourrais pas plus t'aider alors
bonne chance et bon courage
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
17 août 2006 à 18:10
17 août 2006 à 18:10
oki, merci comme meme ^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
18 août 2006 à 07:54
18 août 2006 à 07:54
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 ?
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
18 août 2006 à 09:38
18 août 2006 à 09:38
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 ^^;
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
18 août 2006 à 10:22
18 août 2006 à 10:22
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
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
18 août 2006 à 11:44
18 août 2006 à 11:44
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()...
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
18 août 2006 à 12:13
18 août 2006 à 12:13
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.
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
18 août 2006 à 12:19
18 août 2006 à 12:19
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?
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
18 août 2006 à 12:29
18 août 2006 à 12:29
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).
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
18 août 2006 à 12:44
18 août 2006 à 12:44
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?
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
18 août 2006 à 15:28
18 août 2006 à 15:28
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
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
18 août 2006 à 15:42
18 août 2006 à 15:42
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)?
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
18 août 2006 à 15:52
18 août 2006 à 15:52
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.
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
18 août 2006 à 15:59
18 août 2006 à 15:59
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 ^^;)
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
18 août 2006 à 16:37
18 août 2006 à 16:37
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
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
21 août 2006 à 11:09
21 août 2006 à 11:09
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?
Armojax
Messages postés
1860
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
2 octobre 2024
1 528
21 août 2006 à 11:36
21 août 2006 à 11:36
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.
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
21 août 2006 à 12:06
21 août 2006 à 12:06
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.
ks13
Messages postés
191
Date d'inscription
lundi 12 juillet 2004
Statut
Membre
Dernière intervention
1 août 2011
23
21 août 2006 à 12:43
21 août 2006 à 12:43
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...
17 août 2006 à 17:45
PS: moi aussi j'adore ma signature et c'est tellement vrai....