Generer un boutton avec son code sur l'evenement on click

Bonjours,

je suis en train de faire un userform de sellection.

Je générer donc une jolie interface qui récapitule quelle que information utile.

Et j'aimerais à chaque itération de la générations avoir un boutton de selection qui me renvoie à une action sur la base de son numero de génération.

Dit comme sa, sa a l'aire compliquer mais en gros mes boutton sont générer dans un for et je voudrais que lorsque l'on clique sur chaque boutton sa donne l'incrément de celui ci.

Du coup pour faire sa j'ai tenter avec .OnClick () mais sa marche pas du coup voici mon code :

Private Sub generateMe()
Dim Counter As Integer
Dim topCounter As Integer
topCounter = 6 'espacement de la frame du haut
For Counter = 1 To ThisWorkbook.leControler.ClsCollectionLotPM.Count 'Nombre de lot PM à parcourire
    Set frame = Me.Container.Controls.Add("Forms.Frame.1") 'container = frame qui contient toute les ligne
    'Frame contenant la ligne
    With frame
        .SpecialEffect = fmSpecialEffectFlat
        .BackColor = &HFFFFFF
        .Height = 66
        .Left = 0
        .Width = 702
        .Top = topCounter
        .Visible = True
        With .Controls

            'GENERATION DU PO
            Set ShadowImg = .Add("Forms.Image.1")
            With ShadowImg
                .BackColor = &H8000000F
                .BorderStyle = fmBorderStyleNone
                .Height = 36
                .Left = 18
                .Width = 120
                .Top = 18
            End With

            Set BigBoxImg = .Add("Forms.Image.1")
            With BigBoxImg
                .BackColor = &H8000000D
                .BorderStyle = fmBorderStyleNone
                .Height = 36
                .Left = 6
                .Width = 120
                .Top = 12
            End With

            Set label = .Add("Forms.Label.1")
            With label
                .Caption = ThisWorkbook.leControler.ClsCollectionLotPM.Item(Counter).PO
                .Height = 36
                .Left = 6
                .Top = 18
                .Width = 120
                .BackStyle = fmBackStyleTransparent
                .ForeColor = &HFFFFFF
                .FontName = "Segeo UI"
                .FontSize = 14
                .TextAlign = 2
            End With

            'Plein d'autre ligne de génération que j'ai passez ici

            'GENERATION DU BOUTTON          
            With btnAction
                .BackColor = &H8000000D
                .Caption = "Afficher le Lot"
                .Height = 36
                .Left = 564
                .Width = 115
                .Top = 12
                .OnClick ("Me.selectLot(" & Counter & ")") 'La proprieter qui ne semble pas marcher
            End With

        End With
    End With
    topCounter = topCounter + 76
Next

End Sub

voilà j'éspère que j'ai était assez clair.

Bonjour,

C'est le domaine des modules de classe.

A+

Bonjours,

Comment faut t-il utiliser les module de classe alors ?

Personnellement je les utilise déjà pour crée des modèle d'objet, mais je du mal à voir comment je pourais les utiliser pour faire des action différente sur des bouton générer en Interface Graphique?

Bonjour,

C'est un sujet complexe...

Mais le fonctionnement est le même que ce soit un groupe d'objet existant ou un groupe d'objets à créer.

- Déclarer les objets dans Module1

Public Boutons_Cdes() As New Classe1

Dans le UserForm : (un embryon de calendrier. on génère 2 combos pour choisir l'année et le mois en cours)

Private Sub UserForm_Initialize()
Dim Obj As control
Dim i%, Mois%, Annee%, a, T
'Pour modifier la taille du calendrier on augmentera ou diminuera la Larg_Boutons
a = Split("JANVIER FEVRIER MARS AVRIL MAI JUIN JUILLET AOUT SEPTEMBRE OCTOBRE NOVEMBRE DECEMBRE")
Larg_Boutons = 20
'Création Boutons Changement de mois et d'année
ReDim Boutons_Cdes(1 To 2)
Set Obj = Me.Controls.Add("forms.ComboBox.1")
With Obj
    .Name = "ChMois"
    .Tag = "BtnCMD"
    .ListRows = 12
    .Left = 1
    .Top = 2
    .Width = (Larg_Boutons * 4) + 10
    .Height = 18
    .Font.Size = 24 * .Height / 42
    For i = 0 To 11
        .AddItem a(i)
    Next i
    .ListIndex = Month(Date) - 1
End With
Set Boutons_Cdes(1).BoutonCde = Obj
Set Obj = Me.Controls.Add("forms.ComboBox.1")
With Obj
    .Name = "ChAn"
    .Tag = "BtnCMD"
    .ListRows = 12
    .Left = (Larg_Boutons * 4) + 11
    .Top = 2
    .Width = (Larg_Boutons * 2) + 10
    .Height = 18
    .Font.Size = 24 * .Height / 42
    For i = 1945 To 2025
        .AddItem i
        If i = Year(Date) Then .Value = i
    Next i
End With
Set Boutons_Cdes(2).BoutonCde = Obj
End Sub

Et dans le module de classe (Classe1)

En tête :

Public WithEvents BoutonCde As MSForms.ComboBox

et plus bas :

' Quand on clique sur un Combo "mois" ou "année" du calendrier

Private Sub BoutonCde_Click()
With BoutonCde
   If .ListIndex = -1 Then Exit Sub
   If .Name = "ChMois" Then MsgBox "MoisEnCours = " & .ListIndex + 1 Else MsgBox "AnneeEnCours = " & .List(.ListIndex)
 'Ici on peut également appeler une Sub complémentaire (dans Module1) en lui passant en paramètre ListIndex +1 ou .List(.ListIndex) (selon le cas...)
Coloriage .ListIndex + 1
End With
End Sub

A+

34testclass.xlsm (22.13 Ko)

Impec sa marche ^^

du coup j'ai finalement fait un truc assez similaire quoi que un peut plus simple.

Dim mColButtons As New Collection

Private Sub generateMe()
Dim EventAdminToOpp As BTNAdminToOpp
Dim EventRescuMDP As BTNRescuePaswword
Dim BTNACTION As MSForms.CommandButton

Dim Counter As Integer
Dim topCounter As Integer

topCounter = 6
For Counter = 1 To ThisWorkbook.leControler.ClsCollectionUtilisateur.Count 'max 418
    Set frame = Me.Container.Controls.Add("Forms.Frame.1")
    With frame
        .SpecialEffect = fmSpecialEffectFlat
        .BackColor = &HFFFFFF
        .Height = 66
        .Left = 0
        .Width = 702
        .Top = topCounter
        .Visible = True
        With .Controls

            Set BTNACTION = .Add("Forms.CommandButton.1")

            With BTNACTION
                .BackColor = &H8000000D
                .Caption = "Afficher le MDP"
                .Height = 36
                .Left = 460
                .Width = 115
                .Top = 12
                .Name = "ActionButton_" & Counter
                .ForeColor = &HFFFFFF
                .FontName = "Segeo UI"
                .FontSize = 14
            End With

            Set EventRescuMDP = New BTNRescuePaswword
            EventRescuMDP.ID = Counter
            Set EventRescuMDP.btn = BTNACTION
            Set EventRescuMDP.frm = Me
            mColButtons.Add EventRescuMDP
      End With
Next
End Sub      

et dans mon module EventRescuMDP:

Public WithEvents btn As MSForms.CommandButton
Public frm As UserForm
Public ID As Long

Private Sub btn_Click()

    MsgBox "Le mot de passe de " & ThisWorkbook.leControler.ClsCollectionUtilisateur.Item(ID).nom & " " & ThisWorkbook.leControler.ClsCollectionUtilisateur.Item(ID).prenom & "est :" & ThisWorkbook.leControler.ClsCollectionUtilisateur.Item(ID).rescuPassword

End Sub
Rechercher des sujets similaires à "generer boutton code evenement click"