Boutons génériquement dynamique

  • Initiateur de la discussion Thaloc
  • Date de début
T

Thaloc

Guest
Bien le bonjour a tous, Grands dieux du VBA. Aujourd'hui on va tester vos connaissances. :pt1cable:

Voila ce que je veux faire :
dans un MODULE (pas de prog dans la feuille xls), je veux creer une boucle qui me fait 10 boutons. Ces dix boutons se placent sur une FEUILLE excel (pas un userform), les uns derriere les autres.

Ces boutons, ils sont bien jolis, mais pour le moment ils servent pas a grand chose. Donc je voudrais leur mettre un lien quand on clique dessus :)
Du coup je crée une fonction qui colorie une case de ma feuille.
Mais bon, comme je suis un vrai dieu de la prog, je voudrais bien, que, selon le bouton sur lequel on appuie, ca ne colorie pas de la meme couleur.
Attention, je veux faire ca de facon générique (c'est bien sur facile de coder en dur les actions différentes. Non moi je voudrais etre malin, et que ma fonction lancé au clic de bouton, ait des arguments, ou pas le meme lancement d'action.

Comment faire ? Apres 1 semaine de galere, je suis tout perdu :( et j'ai graneement besoin d'aide avant de tuer mon PC a coups de barreaux de chaises.

----------------------
Pour mieux comprendre, je met un bout de code de mon super programme (qui en vrai est bien plus compliquer, mais la c'est un exemple simple) :)
----------------------
Public s As Shape

Sub procédure()

For i = 2 to 11

'crée le bouton
Cells(i,2).Select
Set s = Worsheets(1).Shapes.AddFormControl(xlButtonControl, Selection.Left, Selection.Top, Selection.Width, Selection.Height)
s.textFrame.Charaters.Caption = "bouton " & i
s.OnAction = "Clic" '<== MON PROBLEME !

Next

End Sub

Function Clic()

'detecte le nom du bouton
'la je sais pas faire :(

'execute ces actions selon le bouton
ActiveCell.select
Selection.Interior.ColorIndex = 30 'ca c'est du rouge pas bo ! ;)
Cells(1,1).Value = s.Name

End Function

-------------------

Voila pour le code. Je reprécise bien qu'il s'agit de boutons créés dans un module.
En gros je voudrais faire un : OnAction = "Clic(nunméroBouton)"

Voila, si vous connaissez d'autres moyens de faire la meme chose, alors je suis preneur, et je ferais meme une danse de la victoire pour mon sauveur ! ;)

Amicalement a tous,


Thaloc
 
M

michel

Guest
bonjour Thaloc

j'espere que l'adaptation ci joint pourra t'aider


Option Explicit
Public Btn As String

Sub Procedure()
Dim i As Byte
Dim NextLine As Integer
Dim Code As String
Dim s As Shape

For i = 2 To 11

'création des boutons
Set s = Worksheets(1).Shapes.AddFormControl(xlButtonControl, Cells(i, 2).Left, Cells(i, 2).Top, Cells(i, 2).Width, Cells(i, 2).Height)
s.TextFrame.Characters.Caption = "bouton " & i
s.OnAction = "MacroBouton" & i

Code = "Sub MacroBouton" & i & vbCrLf 'creation d'une macro pour chaque nouveau bouton
Code = Code & "Btn=""bouton" & i & "" & vbCrLf
Code = Code & "Clic" & vbCrLf
Code = Code & "End Sub"

'insertion des macros dans le **Module1** adapter le nom du module si nécessaire
With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With

Next

End Sub

Sub Clic() 'exemple de macro associée au clic sur le bouton
With Range("A1")
.Interior.ColorIndex = 7
.Value = Btn
End With
End Sub



bon week end
MichelXld
 
T

Thaloc

Guest
Merci bien, je pense que ca peut m'aider. J'avais déjà essayé un exemple de ce type, mais ton code me parait plus approprié a mon probleme.

Maintenant reste un petit soucis technique.
A l'execution de ton programme, il me met : "Le programme n'est pas fiable", concernant l'ouverture du VBProject.VBComponents

Sans doute un probleme de reference ? ou autre chose ?
Merci d'avance.


Thaloc
 

Discussions similaires

  • Question
Microsoft 365 Boutons
Réponses
28
Affichages
437
Réponses
0
Affichages
194