Bonjour à toutes et à tous,
Je suis tout nouveau sur ce forum, et débutant sur VBA.
Je cherche aujourd'hui de l'aide sur un formulaire UserForm pour lequel je rencontres plusieurs difficultés.
Ce formulaire sert à compléter un tableau Excel sur plusieurs onglets et est (censé être) construit de la manière suivante :
Un bouton pour lancer le formulaire (contrôle ActiveX), qui insert une ligne afin d'y effectuer la saisie.
- Une zone de liste modifiable (ComboBox) permettant de rentrer une information selon le choix sélectionné (dans une cellule particulière).
- Une zone de saisie afin de rentrer des informations (appliquée sur une cellule particulière).
- Deux OptionButton afin de rentrer des informations (appliquée sur une cellule particulière).
- Encore deux OptionButton afin de rentrer des informations (appliquée sur une cellule particulière).
- Une zone de liste modifiable (ComboBox) permettant de rentrer une information selon le choix sélectionné (dans une cellule particulière également).
- Une CheckBox afin de déverrouiller le bouton valider (permet de bien vérifier la saisie de ses informations).
- Un bouton "valider" (CommandButton) qui va tout simplement valider l'entrée et lui appliquer une mise en forme (bouton accessible sous condition d'avoir valider la CheckBox précédente).
- Un bouton "annuler" (CommandButton) qui va effacer les informations saisie en supprimant la ligne insérée et en remettant à zéro le formulaire.
Voilà à quoi il ressemble :
Pour infos, les sources pour les liste déroulantes se situent dans un onglet spécifique.
Je rencontre plusieurs problèmes sur les point suivants :
- Lorsque je lance le UserForm via le bouton sur la feuille Excel (ActiveX), le checkbox "Données vérifiées" permettant d'accéder au bouton valider est bien décoché, mais le bouton validé est accessible. Comment régler ce problème ?
- Lorsque je sélectionne une option sur mes OptionButton, la première ligne insérée (lors de la première utilisation du userform lorsqu'on ouvre le fichier) ne les prends pas en compte, mais celle d'après oui. Je vous laisse regarder le code et éventuellement trouver mon erreur mais là je bloque.
- Comment entrer les informations des listes déroulantes dans les macros ?
Voilà mon code appliqué au bouton ActiveX :
Le code me permettant d'avoir la checkbox décoché tout le temps :
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 Private Sub CommandButton1_Click() 'Ouvrir le formulaire de saisie Worksheets("Tableau").Rows(6).Select Selection.Insert With UserForm1 .Famille_Produit.Text = "" .Part_Number.Text = "" .SMT.Value = False .TMT.Value = False .RA.Value = False .V.Value = False .Plating.Text = "" End With Range("C6") = False Range("D6") = False UserForm1.Show End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub Workbook_Open() UserForm1.CommandButton1.Enabled = False End Sub
Voilà mon code UserForm :
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128 Private Sub CheckBox1_Click() 'Permet d'activer le bouton "Valider" If Me.CheckBox1.Value = True Then Me.CommandButton1.Enabled = True Else Me.CommandButton1.Enabled = False End If End Sub Private Sub CommandButton1_Click() 'Conditions appliquées sur le bouton "valider" (Mise en forme, fermeture userform etc.) UserForm1.Hide If Range("C6") = True Then Range("C6") = "SMT" Else Range("C6") = "TMT" End If If Range("D6") = True Then Range("D6") = "Right Angle" Else Range("D6") = "Vertical" End If Range("A6:N31").Select Range("N31").Activate Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With Range("A4:N5").Select Range("N4").Activate Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlMedium End With UserForm1.CommandButton1.Enabled = False CheckBox1.Value = False End Sub Private Sub CommandButton2_Click() 'Conditions appliquées sur le bouton "Annuler". UserForm1.Hide Worksheets("Tableau").Rows(6).Select Selection.Delete End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'Bouton croix = bouton annuler If CloseMode = 0 Then Cancel = False UserForm1.CommandButton1.Enabled = False CheckBox1.Value = False Worksheets("Tableau").Rows(6).Select Selection.Delete End Sub
J'espère trouver de l'aide, et que vous aurez le courage de lire ce (long) message. J'espère ne pas être trop exigent pour un premier message haha.
Merci par avance,
Cordialement.
JulienFBR
Partager