Ajout bouton dynamique

GHISLAIN

XLDnaute Impliqué
Bonjour les excelien ,

Voila lors du lancement d'un user , des boutons sont ajoutés dynamiquement , leurs noms caption est affecté par la valeur de cellule ainsi que la couleur et leur typetext.

En fin de code j'ajoute le code VBA sur chaque bouton créé mais quand je clique sur le bouton , bien que le code soit présent , rien ne se passe

pouvez vous m'aiguiller

Merci a tous

Amicalement

Ghislain
 

Pièces jointes

  • CLASSE_3.xlsm
    40.1 KB · Affichages: 55

PMO2

XLDnaute Accro
Bonjour,

Cela ne marche pas comme vous faites.
Il faut créer un module de classe pour intercepter les événements sur les CommandButtons.

1) Code modifié du UserForm
VB:
Dim ColCommandButton As New Collection

Private Sub UserForm_Initialize()
Dim obEvents As clsControlsEvents
Dim CMB As MSForms.CommandButton
Dim TOPS_RECTANGLES As Integer
Dim i As Long

Me.TextBox1.Value = Application.WorksheetFunction.CountA(Worksheets("Parametre").Range("A1:A2500"))
' CREATION DES BOUTONS:
TOPS_RECTANGLES = 6
For i = 1 To CLng(TextBox1.Value)
  Set CMB = UserForm1.Controls.Add("Forms.CommandButton.1", , True)
  With CMB
    .Left = 2
    .Width = 108
    .Height = 24
    .Top = TOPS_RECTANGLES
    .BackColor = Worksheets("Parametre").Range("a" & i).Interior.Color
    .ForeColor = &H80000012
    .ControlTipText = Worksheets("Parametre").Range("b" & i)
    .Caption = Worksheets("Parametre").Range("a" & i)
    With .Font
      .Italic = False
      .Bold = True
      .Name = "Times new roman"
      .Size = 14
    End With
  End With
 
'--- Evènement des CommandButtons ---
Set obEvents = New clsControlsEvents
Set obEvents.CMBx = CMB
Set obEvents.USF = Me
ColCommandButton.Add obEvents
'------------------------------------
 
  TOPS_RECTANGLES = TOPS_RECTANGLES + 30
Next i
End Sub

2) Code du module de classe qu'il faut renommer clsControlsEvents
VB:
Public WithEvents CMBx As MSForms.CommandButton
Public USF As UserForm

Private Sub CMBx_Click()
'/// Ne sert à rien, juste pour visualiser quand on clique
MsgBox "Name : " & CMBx.Name & vbLf & "Caption : " & CMBx.Caption & vbLf & "ControlTipText : " & CMBx.ControlTipText
 
Select Case CMBx.Name
  Case "CommandButton1"
    '/// votre traitement particulier à ce bouton
  Case "CommandButton2"
    '/// votre traitement particulier à ce bouton
   
'/// etc

End Select
End Sub
 

Pièces jointes

  • Gestion d'évènements sur CommanButtons créés dynamiquement dans un UserForm .xlsm
    41.8 KB · Affichages: 66

GHISLAIN

XLDnaute Impliqué
Bonjour PMO2

j'avais effectivement trouvé un tuto parlant de ce module de classe que j'ai utilisé . Par contre dans cette exemple , les actions sont mises différemment et sont intégrés dans le module normal lors de la création des boutons :

Set Btn1 = Form.Designer.Controls.Add("forms.commandbutton.1")
With Btn1
.Name = "Fermer"
.Caption = "Fermer"
.Left = 2
.Top = 2
.BackColor = RGB(255, 0, 0)
.Width = 46
.Height = 24
End With

With Form.CodeModule
X = .CountOfLines + 1
Code = "Sub Fermer_Click()" & vbCrLf
Code = Code & " " & vbCrLf
Code = Code & " " & vbCrLf
Code = Code & " " & vbCrLf
Code = Code & " Me.Hide" & vbCrLf
Code = Code & "End Sub" & vbCrLf
.InsertLines X, Code
End With


mais votre proposition parait plus judicieuse pour retrouver plus facilement les codes a modifier .

Je joint quand même mon travail qui pourra être utilisé par d'autre .
Dans cette proposition , j'ai ajouté un userform des 56 couleurs qui permet de choisir la couleur du bouton lors de sa création.

Merci a vous PMO2 d'étre passé sur mon post et je garde sous le coude votre travail

Bien cordialement

ghislain
 

Pièces jointes

  • Planning Dynamique.xlsm
    200.7 KB · Affichages: 57

Discussions similaires

Réponses
1
Affichages
577

Statistiques des forums

Discussions
312 938
Messages
2 093 779
Membres
105 823
dernier inscrit
sawosko