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+
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