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 :
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 ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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 )
AAL represente le nom de notre bouton ( objCell.Value) , mais à l’exécution je ne rentre jamais dans cette fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Partager