rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

[Excel VBA]Probleme de creation de barres

Posté par ks13, le jeudi 17 août 2006 à 17:30:38
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.
Répondre à ks13  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
balou311, le jeudi 17 août 2006 à 17:33:02
salut,

Un formulaire ça ne t'irai pas???
Profitez de la vie vous n'en sortirez pas vivant!!!
Répondre à balou311

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le jeudi 17 août 2006 à 17:41:16
salut, et.....j'adore ta signature XD

hum, revenons a nos moutons...un formulaire tu dis? comment ca?
Répondre à ks13

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
balou311, le jeudi 17 août 2006 à 17:45:13
Ben un formulaire sous visual basic tu peux faire des formulaire en excel un peu comme quand tu les fais sous access

PS: moi aussi j'adore ma signature et c'est tellement vrai.... Profitez de la vie vous n'en sortirez pas vivant!!!
Répondre à balou311

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le jeudi 17 août 2006 à 17:48:45
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?
Répondre à ks13

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
balou311, le jeudi 17 août 2006 à 17:56:52
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? Profitez de la vie vous n'en sortirez pas vivant!!!
Répondre à balou311

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le jeudi 17 août 2006 à 18:00:25
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 ^^;
Répondre à ks13

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
balou311, le jeudi 17 août 2006 à 18:07:24
Ah ok désolé

et bien je ne pourrais pas plus t'aider alors

bonne chance et bon courage Profitez de la vie vous n'en sortirez pas vivant!!!
Répondre à balou311

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le jeudi 17 août 2006 à 18:10:11
oki, merci comme meme ^^
Répondre à ks13

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Armojax, le vendredi 18 août 2006 à 07:54:52
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/False
Pourquoi te compliquer la vie ?
Répondre à Armojax

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le vendredi 18 août 2006 à 09:38:19
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 ^^;
Répondre à ks13

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Armojax, le vendredi 18 août 2006 à 10:22:10
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
Répondre à Armojax

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le vendredi 18 août 2006 à 11:44:41
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()...
Répondre à ks13

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le vendredi 18 août 2006 à 12:13:10
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.
Répondre à ks13

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le vendredi 18 août 2006 à 12:19:07
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?
Répondre à ks13

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Armojax, le vendredi 18 août 2006 à 12:29:51
Mets le lancement de ta macro à l'ouverture de ton classeur :
Private Sub Workbook_Open()
  ==   ici le lancement  ==
End Sub
Cette macro se situe non pas dans un module standard, mais dans le code associé à ThisWorkbook (au-dessus des modules dans l'Explorateur de Projets).
Répondre à Armojax

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le vendredi 18 août 2006 à 12:44:30
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?
Répondre à ks13

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Armojax, le vendredi 18 août 2006 à 15:28:49
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        276
Essaie 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
Répondre à Armojax

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le vendredi 18 août 2006 à 15:42:26
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)?
Répondre à ks13

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Armojax, le vendredi 18 août 2006 à 15:52:45
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.
Répondre à Armojax

20


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le vendredi 18 août 2006 à 15:59:28
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 ^^;)
Répondre à ks13

21


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le vendredi 18 août 2006 à 16:37:29
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
Répondre à ks13

22


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
ks13, le lundi 21 août 2006 à 11:09:40
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?
Répondre à ks13

23


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Armojax, le lundi 21 août 2006 à 11:36:32
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.
Répondre à Armojax
Logiciels pertinents trouvés dans les téléchargements
Télécharger GANTT Project 2.0.7GANTT 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
Télécharger EasyFactures 1EasyFactures - 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
Télécharger Excel Viewer 2003Excel 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
Télécharger PDF Creator 0.9.5PDF 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
Plus de logiciels gratuits sur « [Excel VBA]Probleme de creation de barres »