Création de bouton dynamique dans un userForm : aucune action sur le onclick
Bonjour à tous,
tout nouveau sur le vba mais avec des bases de développeur java derrière , j'ai un petit soucis sur la récupération de l'evenement "click" sur les boutons que je créer dynamiquement sur mon userForm. ( J'aimerai qu'a chaque click sur chaque bouton , sa couleur change , 3 couleurs possible).
Quand je créer mes boutons manuellement il n'y a pas de soucis j'obtiens bien ce que je veux , mais lorsque je les créer dynamiquement , impossible de récuperer le focus sur le click.
Voici comment je créer mes boutons :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
Private Sub UserForm_Initialize()
Dim Color As ColorFormat
Dim ObjCell As Range
Dim ActWB As Workbook
Dim I As Integer
Dim Bouton1 As Control
Dim yy As Integer
yy = 20
On Error Resume Next
For Each ObjCell In Range("G175:G179").Cells
Set Bouton1 = UserForm1.Controls.Add("Forms.CommandButton.1")
With Bouton1
.Name = ObjCell.Value
.Caption = ObjCell.Value
.Left = 20
.Top = yy
.Width = 50
.Height = 18
yy = yy + 25
End With
Next
With UserForm1
.Caption = "Validation RA"
.StartUpPosition = 2
.Height = yy + 40
.Width = 30
End With
Set Color = ThisWorkbook.Colors(1)
If Err.Number = 0 Then
UserForm1.Controls.Item(0).BackColor = Split(Color, """")(1)
End If
Set Color = ThisWorkbook.Colors(2)
If Err.Number = 0 Then
UserForm1.Controls.Item(1).BackColor = Split(Color, """")(1)
End If
Set Color = ThisWorkbook.Colors(3)
If Err.Number = 0 Then
UserForm1.Controls.Item(2).BackColor = Split(Color, """")(1)
End If
Set Color = ThisWorkbook.Colors(4)
If Err.Number = 0 Then
UserForm1.Controls.Item(3).BackColor = Split(Color, """")(1)
End If
Set Color = ThisWorkbook.Colors(5)
If Err.Number = 0 Then
UserForm1.Controls.Item(4).BackColor = Split(Color, """")(1)
End If |
J'ai récupéré cette partie en piochant à gauche à droite sur internet. La deuxième partie me sert pour les changements de couleurs dont je veux garder l'état à la réouverture du fichier. ( création de variables cachés ).
Voici un exemple d'une action sur le click d'un des boutons ( j'en ai donc créée autant qu'il y a de boutons )
Code:
1 2 3 4 5 6 7 8 9 10 11
| Private Sub AAL_Click()
If UserForm1.Controls.Item(0).BackColor = &H8000000F Then
UserForm1.Controls.Item(0).BackColor = RGB(0, 0, 255)
ElseIf AAL.BackColor = RGB(0, 0, 255) Then
UserForm1.Controls.Item(0).BackColor = RGB(0, 255, 0)
ElseIf AAL.BackColor = RGB(0, 255, 0) Then
UserForm1.Controls.Item(0).BackColor = &H8000000F
Else
UserForm1.Controls.Item(0).BackColor = &H8000000F
End If
End Sub |
AAL represente le nom de notre bouton ( objCell.Value) , mais à l’exécution je ne rentre jamais dans cette fonction.
Je galère depuis quelques jours et je ne trouve pas de solution que je comprenne ou qui soit fonctionnelle. Si quelqu'un peut m'aider.
J'ai de plus une autre question : est il possible de reset la macro chaque lundi midi par exemple? j'aimerai que les couleurs se réinitialise par defaut chaque lundi midi.
C'est pourquoi j'en appelle à vous et vous remercie par avance.