Sub Macro1()
ActiveSheet.Shapes("Ellipse 1").OnAction = "essai"
[A1].Select
End Sub
Sub Macro1()
MonDessin = "Ellipse 1"
Macro = "test"
ActiveSheet.Shapes(MonDessin).OnAction = MaMacro
[A1].Select
End Sub
J'ai simplifié mon code pour qu'il soit moins "confus:" La Forme s'appelle FormJeu.bonjour
pour un control dans une userform mieux vaut classer
l’accès au vbcomponents tout le monde ne l'accepte pas d’emblée
le code classe et event est deja dans le userform ou dans un module classe et c'est tout
a quel moment tu ajoute ton bouton parce c'est plus que confu ton code
quand l'userform est affiché ou non?
J'ajoute le bouton avec le code suivant:si c'est a partir du userform que tu tente d'avoir acces au module et au code de l'userform t'es marron on ne peut pas le modifier le code module , quand il est affiché
je t'ai demandé a partir d'ou tu ajoute ce bouton ?????,
Depuis une Sub VB dans Exceldepuis un programme VB?????????????
Sub test()
Dim forme, I&, B
With FormJeu
For I = 1 To 3
Set B = .Controls.Add("Forms.CommandButton.1")
B.Name = "bouton" & I
B.Caption = B.Name
B.Top = (20 * (I - 1)) + (10 * I)
Next
.Show 0
End With
End Sub
Public WithEvents bouton As MSForms.CommandButton
Dim cls() As New FormJeu
Private Sub bouton_Click()
MsgBox "vous avez cliqué sur le bouton """ & bouton.Name & """"
End Sub
Private Sub UserForm_Activate()
For Each ctrl In Me.Controls
MsgBox "prise en charge du bouton""" & ctrl.Name & """"
If ctrl.Name Like "bouton*" Then I = I + 1: ReDim Preserve cls(1 To I): Set cls(I).bouton = ctrl
Next
End Sub
c'est exactement ce que je fait mais j'utilise le module userform comme module classe j'en ai mis 3 je peux en mettre 100vous auriez intérêt à leur définir une classe support qui prendra en charge le clic de chacun.
ça marche parfaitement, et ça correspond exactement à ce que je veux faire. Mais comme j'ai besoin de plus de 100 boutons, j'étais un peu inquiet pour les performances du fait de la création d'une centaine d'instances de la forme initiale. Mais j'ai essayé avec 100 boutons, et ça se passe bien.alors
ecoute bien
tu va ouvrir un classeur vierge
tu va lui mettre un userform et un module
le userform tu va l'appeler "FormJeu"
dans le code du module tu va coller ceci:
VB:Sub test() Dim forme, I&, B With FormJeu For I = 1 To 3 Set B = .Controls.Add("Forms.CommandButton.1") B.Name = "bouton" & I B.Caption = B.Name B.Top = (20 * (I - 1)) + (10 * I) Next .Show 0 End With End Sub
maintenant dans le userform vierge tu colle ce code
VB:Public WithEvents bouton As MSForms.CommandButton Dim cls() As New FormJeu Private Sub bouton_Click() MsgBox "vous avez cliqué sur le bouton """ & bouton.Name & """" End Sub Private Sub UserForm_Activate() For Each ctrl In Me.Controls MsgBox "prise en charge du bouton""" & ctrl.Name & """" If ctrl.Name Like "bouton*" Then I = I + 1: ReDim Preserve cls(1 To I): Set cls(I).bouton = ctrl Next End Sub
voila maintenant si tu lance la sub test du module ton userform devrait avoir 3 boutons cliquable
plus couramment on utilise les module classe pour faire ça par ce que beaucoup ignore que les module userform sont des module classe aussi
fait ce que je te dis ,teste ,et demande ce que tu ne comprends pas