Les boutons présents sur les feuilles Excel font partis de la collection OLEObjects. Ils n'ont pas de propriété Tag sous Excel 2000...Envoyé par SpaceFrog
Les boutons présents sur les feuilles Excel font partis de la collection OLEObjects. Ils n'ont pas de propriété Tag sous Excel 2000...Envoyé par SpaceFrog
ma question et se que dit spafy c'est exactement la meme chose...Bon. J'en reste à la question d'Ogenki
j'utilise Excel 2003..il y a une diference ?Les boutons présents sur les feuilles Excel font partis de la collection OLEObjects. Ils n'ont pas de propriété Tag sous Excel 2000...
Alors, ont-ils au moins la propriété caption ?
Si oui : nom1, nom2,.... nomn
+ une liste avec les paramètres dans le même ordre que val(right(wwwww.caption,1))
+ ce que j'ai dit en ce qui concerne l'appel d'une sous-rounine par un tout petit bout de code
J'ai également dit plus haut :
et il m'a été répondu que le problème demeurait entier, qu'il faudrait indexer les optionsbuttons.Pourquoi ne pas les utiliser avec pour rôle, pour chacun d'entre eux, de "rapporter" lorsque cliqué, dans une variable ou ailleurs (y compris le tag du commandbutton) un paramètre "en cours"
En cliquant alors sur le commandbutton, c'est ce paramètre qui interviendrait)
1) non si l'on joue avec une liste ou mieux un array (au besoin en utilisant le caption des optionsbuttons, terminé par 1,2, etc...)
2) il n'y aurait alors besoin que d'un seul commandbutton, donc d'un seul lot d'instructions
Si aucune de ces solutions n'est finalement acceptable, je n'en vois aucune autre, sauf à écrire en dur (et le code sera encore plus long) de quoi faire face à l'absence de groupes sous Excel
sous 2003, non plusEnvoyé par Catbull
c'est vrai qu'ils ont un tag dans les userform et pas dans la feuille
encore une subtilité crosoft![]()
catbull, tu viens de nous faire du confit de grenouille![]()
Je cogite au problème ....
Hello,
Le paramètre à passer vient d'où et quand vient-il ?
Si c'est avant de créer le bouton, tu peux nommer le bouton du "contenu" du paramètre
Ex : Paramètre = 12.25
Juste une idée, à défaut de Tag...
Code : Sélectionner tout - Visualiser dans une fenêtre à part NomDuBouton = AddCellule + ":" + cstr(Paramètre)![]()
Si le paramètre vient après la création du bouton, séplucompliké mais ce doit être faisable...
A+
salut
non mon parametre est bien recuperé avant le bouton
merci![]()
Non, pas de merci, je n'ai pas (encore) trouvé le moyen de mettre à jour la propriété name...![]()
Si tu as la solution, peux-tu la mettre, sinon je vais continuer à chercher...![]()
A+
Edit
On parle bien toujours de bouton se trouvant dans une feuille de calcul ?
Ça y est ! Ouf ! J'ai bien cru t'avoir fourvoyé
Comme je t'ai dit hier, tu peux simplifier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 With ActiveWorkbook 'Workbooks("Fichier.xls") With .ActiveSheet With .OLEObjects(1) 'Nom = .Name 'MsgBox Nom .name = paramètre End With End If End With End With![]()
A+
mpegmarques a eu une idée qui m'a donné une idée avec son idée d'ajouter des contrôles.
Quand les paramètres sont obtenus, pourquoi ne pas les placer dans des zones de texte référencées (avec visible = false) chaque bouton récupérant le paramètre lui correspondant dans la zone de texte idoine ?
Un bricolage ni plus ni moins sioux que le paramètre dans le nom... non ?
A+
Si l'on s'en sort ici, ce sera une fois de plus, à mon avis, plus le résultat d'une gymnastique de la pensée que la mise en oeuvre de connaissances (et c'est - j'ai déjà eu l'occasion de le dire - la meilleure qualité d'un bon développeur)
Bon! je n'ai rien trouvé de mieux que ce que j'ai déjà dit...
Même l'utilisation d'un fichier de ressources (j'y ai aussi pensé) n'affranchirait pas totalement de la nécessité, pour chaque bouton, de dire vers quoi "pointer".
Quel dommage que Excel n'ait pas prévu des groupes de contrôles indexés... le problème eût été facilement résolu.
Et dire qu'Ogenki (le demandeur) déclarait encore très récemment ne pas en voir l'utilité (voir le sujet : http://www.developpez.net/forums/vie...ghlight=.....)
mais il faudra apprendre à s'en passer, .net ne supporte pas cette propriétéEnvoyé par jmfmarques
Dommage, tout ça...
Et comme je me sers beaucoup de ça,... voilà, s'il en fallait, une bonne raison pour que je ne mute pas vers .NET...
Mais Ogenki... en encore sous un VB "civilisé", lui...
Voilà comment, sous VB.Net, on peut quand même créer l'équivalent de groupes de contrôles indexés :
http://www.microsoft.com/france/msdn/vbasic/articles/vbtchCreatingControlArraysInVisualBasicNETVisualCNET.mspx
Je n'ai pas encore tout analysé, mais la démarche de pensée me parait fort intéressante..
J'ai compris le problème en me levant ce matin. L'index de l'objet suit le nombre d'objets dans collection et ne peut être utilisé que si le nombre d'objets ne varie pas. Pour utiliser l'objet, il est nécessaire de tester le nom.
Je laisse ça à votre réflexion... vu que je n'en ai plus...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Sub CréerBouton() With ActiveWorkbook.ActiveSheet For i = 2 To 4 Step 2 .OLEObjects.Add ClassType:="Forms.CommandButton.1", _ Link:=False, DisplayAsIcon:=False, Left:=Cells(5, i).Left, Top:=Cells(5, i).Top, Width:=Cells(5, i).Width, Height:=Cells(5, i).Height With .OLEObjects(i / 2) .Name = Cells(5, i).Address End With Next End With With ActiveWorkbook.ActiveSheet For i = 1 To 2 With .OLEObjects(i) MsgBox .Name End With Next End With End Sub Sub KillButton() supprimerBoutons (Cells(5, 2).Address) supprimerBoutons (Cells(5, 4).Address) End Sub Function supprimerBoutons(NomBouton) Dim i As Integer With ActiveWorkbook.ActiveSheet For i = 1 To ActiveWorkbook.ActiveSheet.OLEObjects.Count If .OLEObjects(i).Name = NomBouton Then .OLEObjects(i).Delete Exit For End If Next i End With End Function
A+
Ici on s'en fiche, c'est le forum VB6-VBA, il y a des forums dotnet pour caEnvoyé par jmfmarques
![]()
Hello,
Bbil vient de donner une solution à un autre problème mais qui pourrait t'intéresser.
Au lieu de la solution des boutons dans ta feuille, un click droit dans la cellule affiche un menu contextuel.
Le menu contextuel qui s'affiche peut être enrichi de ta propre commande.
Avantages :
Le code n'est plus dans la feuille mais dans un module.
Tu n'as plus à manipuler des OLEObjects
Tu peux rendre au menu contextuel son aspect originel à la fermeture du fichier.
Le code signé bbil
Dans la sub test2, il sera seulement nécessaire de tester la cellule active avant de réaliser l'action désirée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 ' Procedure appellé pour effacer option du Menu Sub EffaceMenu(CB As CommandBar, stNom As String) On Error GoTo Fin Dim i As Integer For i = 1 To 100 ' Cette boucle ne sert à rien mais me rassure, pour éviter de partir dans boucle infinie.. CB.Controls(stNom).Delete Next Fin: End Sub ' ' Fonction d'ajout option dans menu contextuel Sub AjouteMenuContextuel() Dim c As CommandBar Dim b As CommandBarButton Set c = Application.CommandBars("Cell") '.. detruit le bouton si existe déjà EffaceMenu c, "Essai" Set b = c.Controls.Add(msoControlButton) b.Caption = "Essai" b.BeginGroup = True b.OnAction = "Test2" set c = nothing set b = noting End Sub Public Sub test2() MsgBox "text2" End Sub
Restera toujours le pb des paramètres...
A toutes fins utiles
Partager