|
|
|
|
Posté par
ks13, le jeudi 17 août 2006 à 17:30:38salut,
Un formulaire ça ne t'irai pas??? Profitez de la vie vous n'en sortirez pas vivant!!! |
salut, et.....j'adore ta signature XD
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?
|
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 ^^;
|
oki, merci comme meme ^^ |
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. 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 ^^; |
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()... |
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. |
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? |
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? |
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)?
|
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 ^^;) |
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 |
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? |
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. |
| 03/04 20h30 | Transformer un fichier Microsoft Excel (.xls) en PDF | OpenOffice.org |
| 22/08 16h19 | [Excel] Ajouter une date fixe dans une cellule en 2 touches | Excel |
| 12/11 01h11 | [excel] | Excel |
| 14/12 18h20 | [Word] Suivi des modifications | Word |
| 15/03 20h06 | Import / export de données Ingres | Ingres |
| 05/11 22h08 | Excel / VBA -> Créer des formule | 6 |
| 06/09 20h08 | [excel][vba] créer un séparateur dans un menu | 1 |
| 10/07 17h13 | [EXCEL VBA] Création d'un Formulaire de Saisi | 3 |
| 06/07 11h56 | [Excel] [VBA] Création d'une fonction | 1 |
| 15/05 17h03 | [Excel VBA] Créer des dossiers sous VBA | 7 |
![]() | GANTT Project - GanttProject est un outil de gestion de projet libre, permettant de réaliser des diagrammes de GANTT afin de planifier un... | Catégorie: Gestion de projet Licence: Open Source |
![]() | EasyFactures - Easyfactures est un logiciel capable de gérer les factures et les devis, il a été développé sur Excel. Easyfactures... | Catégorie: Comptabilité/Paie Licence: Freeware/gratuit |
![]() | Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même... | Catégorie: Tableur Licence: Freeware/gratuit |
![]() | PDF Creator - PDF Creator est un outil gratuit permettant de créer des PDF à partir de presque n'importe quelle application capable... | Catégorie: PDF Licence: Open Source |
![]() | Seagate Barracuda7200.10 250 Go | Catégorie: Disque dur | 59.90 € Surcouf |
![]() | Seagate Barracuda7200.9 300 Go | Catégorie: Disque dur | |
![]() |