Hello le fofo

Dans u UserForm, je cherche a tester si tous les contrôles sont renseignés.

les test se fait a peu prêt bien, sauf que même si tout est rempli, j'ai quand même le message d'alerte et la suite du code ne s'effectue pas.

Une idée, ou je bug?

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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
Private Sub CmdB_Ajouter_Click()
Dim ws As Worksheet
Dim DerrLigneTheme As Long
Dim wsListeDonnees As Worksheet
Dim i
Dim j As Long
Dim theme As String
Dim reponse As VbMsgBoxResult
Dim control As control
Dim MessageErreur As String
Dim missingControls As Boolean
Dim ctrl As control
 
' Définir les feuilles de calcul
Set ws = ThisWorkbook.Sheets("Base")
Set wsListeDonnees = ThisWorkbook.Sheets("Listes de donnees")
 
 
' Initialize the error message
MessageErreur = "Les champs suivants sont vides : " & vbCrLf
 
    ' Check each ComboBox and TextBox
    For Each control In Me.Controls
        If TypeName(control) = "ComboBox" Or TypeName(control) = "TextBox" Then
            If control.Text = "" Then
                missingControls = True
                Select Case True
                    Case control.Name = "CbX_Theme"
                        MessageErreur = MessageErreur & "- Thème non choisi." & vbCrLf
 
                    Case control.Name = "TxB_Question"
                        MessageErreur = MessageErreur & "- Champ Question non rempli." & vbCrLf
 
                    Case control.Name = "TxB_ReponseA"
                        MessageErreur = MessageErreur & "- Champ Réponse A non rempli." & vbCrLf
 
                    Case control.Name = "TxB_ReponseB"
                        MessageErreur = MessageErreur & "- Champ Réponse B non rempli." & vbCrLf
 
                    Case control.Name = "TxB_ReponseC"
                        MessageErreur = MessageErreur & "- Champ Réponse C non rempli." & vbCrLf
 
                    Case control.Name = "TxB_ReponseD"
                        MessageErreur = MessageErreur & "- Champ Réponse D non rempli." & vbCrLf
 
                    Case control.Name = "CbX_Categorie"
                        MessageErreur = MessageErreur & "- Catégorie non choisie." & vbCrLf
 
                    Case control.Name = "CbX_Niveau"
                        MessageErreur = MessageErreur & "- Niveau non choisie." & vbCrLf
 
                    Case control.Name = "CbX_Difficulte"
                        MessageErreur = MessageErreur & "- Difficulté non choisie." & vbCrLf
                End Select
            End If
        End If
    Next control
 
'Si des champs sont non renseignés ou tous renseignés
If missingControls Then
        MsgBox MessageErreur, vbExclamation, "Champs requis"
Else
        MsgBox "Tous les champs sont remplis !"
 
' Récupérer la valeur sélectionnée dans le ComboBox "CbX_Theme"
theme = USF_AjoutQuestion.CbX_Theme.List(CbX_Theme.ListIndex, -0)
 
With ws
' Trouver la dernière ligne avec la valeur du ComboBox dans la colonne "S"
DerrLigneTheme = .Cells(.Rows.Count, "S").End(xlUp).Row
    For j = DerrLigneTheme To 1 Step -1
        If .Cells(j, "S").Value = theme Then
            ' Affichez ou utilisez la dernière ligne trouvée ici
            'MsgBox "La dernière valeur égale à " & theme & " est à la ligne " & j
 
            For i = DerrLigneTheme To 1 Step -1
                    If ws.Cells(i, "S").Value = theme Then
                        ' Insérer une nouvelle ligne après la dernière occurrence trouvée
                        .Rows(i + 1).Insert Shift:=xlDown
                         ' On ajout la formule dans la colonne "H"
                .Cells(i + 1, "H").Formula = "=IF(B" & i + 1 & "=K" & i + 1 & ",""A"",IF(C" & i + 1 & "=K" & i + 1 & _
                                                ",""B"",IF(D" & i + 1 & "=K" & i + 1 & ",""C"",IF(E" & i + 1 & "=K" & i + 1 & ",""D""))))"
                         ' Copier la valeur du contrôle "TxB_Question" dans la colonne "S"
                        .Cells(i + 1, "Q").Value = USF_AjoutQuestion.TxBNumTheme.Value
                        ' Incrémenter la valeur de la colonne "R"
                        .Cells(i + 1, "R").Value = ws.Cells(i, "R").Value + 1
                        ' Incrémenter la valeur de la colonne "R"
                        .Cells(i + 1, "S").Value = theme
 
                        ' Copier la valeur du contrôle "TxB_Question" dans la colonne "U"
                        .Cells(i + 1, "A").Value = USF_AjoutQuestion.TxB_Question.Value
                        ' Copier la valeur du contrôle "TxB_ReponseA" dans la colonne "V"
                        .Cells(i + 1, "B").Value = USF_AjoutQuestion.TxB_ReponseA.Value
                        ' Copier la valeur du contrôle "TxB_ReponseB" dans la colonne "W"
                        .Cells(i + 1, "C").Value = USF_AjoutQuestion.TxB_ReponseB.Value
                        ' Copier la valeur du contrôle "TxB_ReponseC" dans la colonne "X"
                        .Cells(i + 1, "D").Value = USF_AjoutQuestion.TxB_ReponseC.Value
                        ' Copier la valeur du contrôle "TxB_QuestionD" dans la colonne "Y"
                        .Cells(i + 1, "E").Value = USF_AjoutQuestion.TxB_ReponseD.Value
 
                         ' Copier la valeur du contrôle "TxB_Question" dans la colonne "U"
                        .Cells(i + 1, "J").Value = USF_AjoutQuestion.TxB_Question.Value
                        ' Copier la valeur du contrôle "TxB_ReponseA" dans la colonne "V"
                        .Cells(i + 1, "K").Value = USF_AjoutQuestion.TxB_ReponseA.Value
                        ' Copier la valeur du contrôle "TxB_ReponseB" dans la colonne "W"
                        .Cells(i + 1, "L").Value = USF_AjoutQuestion.TxB_ReponseB.Value
                        ' Copier la valeur du contrôle "TxB_ReponseC" dans la colonne "X"
                        .Cells(i + 1, "M").Value = USF_AjoutQuestion.TxB_ReponseC.Value
                        ' Copier la valeur du contrôle "TxB_QuestionD" dans la colonne "Y"
                        .Cells(i + 1, "N").Value = USF_AjoutQuestion.TxB_ReponseD.Value
 
                         ' Copier la valeur du contrôle "CbX_Niveau" dans la colonne "T"
                        .Cells(i + 1, "T").Value = USF_AjoutQuestion.CbX_Niveau.Value
 
 
                        ' Copier la valeur du contrôle "TxB_Question" dans la colonne "U"
                        .Cells(i + 1, "U").Value = USF_AjoutQuestion.TxB_Question.Value
                        ' Copier la valeur du contrôle "TxB_ReponseA" dans la colonne "V"
                        .Cells(i + 1, "V").Value = USF_AjoutQuestion.TxB_ReponseA.Value
                        ' Copier la valeur du contrôle "TxB_ReponseB" dans la colonne "W"
                        .Cells(i + 1, "W").Value = USF_AjoutQuestion.TxB_ReponseB.Value
                        ' Copier la valeur du contrôle "TxB_ReponseC" dans la colonne "X"
                        .Cells(i + 1, "X").Value = USF_AjoutQuestion.TxB_ReponseC.Value
                        ' Copier la valeur du contrôle "TxB_QuestionD" dans la colonne "Y"
                        .Cells(i + 1, "Y").Value = USF_AjoutQuestion.TxB_ReponseD.Value
 
                         ' Copier la valeur du contrôle "CbX_Difficulte" dans la colonne "AB"
                        .Cells(i + 1, "AB").Value = USF_AjoutQuestion.CbX_Difficulte.Value
 
                        MsgBox "La question a été ajoutée avec succès.", vbInformation
                        ' Afficher la boîte de dialogue avec la question
                        reponse = MsgBox("JB, veux-tu ajouter une nouvelle question ?", vbQuestion + vbYesNo, "Ajout d'une nouvelle question")
 
                        ' Vérifier la réponse de l'utilisateur
                        If reponse = vbYes Then
                            Unload Me
                            USF_AjoutQuestion.Show 0
                        Else
                            Unload Me
                        End If
                        Exit Sub
                    End If
                Next i
            Exit Sub
        End If
    Next j
 
    ' Si aucune valeur correspondante n'est trouvée
    MsgBox "Aucune question avec le " & theme & " n'a été trouvée." _
    & vbCr & "Nous ajoutons cette question a la fin de la fin de la Base de données", vbInformation
 
    'On cherche la dernière ligne vide de "S"
    DerrLigneTheme = .Cells(ws.Rows.Count, "S").End(xlUp).Row
 
        ' Vérifier si la valeur existe déjà
        If Not QuestionExists(TxB_Question.Value) Then
            ' Insérer la valeur dans la colonne B a E
            .Cells(DerrLigneTheme + 1, "A").Value = TxB_Question.Value
            .Cells(DerrLigneTheme + 1, "B").Value = TxB_ReponseA.Value
            .Cells(DerrLigneTheme + 1, "C").Value = TxB_ReponseB.Value
            .Cells(DerrLigneTheme + 1, "D").Value = TxB_ReponseC.Value
            .Cells(DerrLigneTheme + 1, "E").Value = TxB_ReponseD.Value
            .Cells(DerrLigneTheme + 1, "H").Formula = "=IF(B" & DerrLigneTheme + 1 & "=K" & DerrLigneTheme + 1 & ",""A"",IF(C" & DerrLigneTheme + 1 & "=K" & DerrLigneTheme + 1 & _
                                                ",""B"",IF(D" & DerrLigneTheme + 1 & "=K" & DerrLigneTheme + 1 & ",""C"",IF(E" & DerrLigneTheme + 1 & "=K" & DerrLigneTheme + 1 & ",""D""))))"
 
            .Cells(DerrLigneTheme + 1, "U").Value = TxB_Question.Value
            .Cells(DerrLigneTheme + 1, "V").Value = TxB_ReponseA.Value
            .Cells(DerrLigneTheme + 1, "W").Value = TxB_ReponseB.Value
            .Cells(DerrLigneTheme + 1, "X").Value = TxB_ReponseC.Value
            .Cells(DerrLigneTheme + 1, "Y").Value = TxB_ReponseD.Value
 
            .Cells(DerrLigneTheme + 1, "J").Value = TxB_Question.Value
            .Cells(DerrLigneTheme + 1, "K").Value = TxB_ReponseA.Value
            .Cells(DerrLigneTheme + 1, "L").Value = TxB_ReponseB.Value
            .Cells(DerrLigneTheme + 1, "M").Value = TxB_ReponseC.Value
            .Cells(DerrLigneTheme + 1, "N").Value = TxB_ReponseD.Value
 
 
            .Cells(DerrLigneTheme + 1, "Q").Value = CbX_Theme.List(CbX_Theme.ListIndex, -1)
            .Cells(DerrLigneTheme + 1, "R").Value = "1"
            .Cells(DerrLigneTheme + 1, "S").Value = CbX_Theme.List(CbX_Theme.ListIndex, 0)
            .Cells(DerrLigneTheme + 1, "T").Value = CbX_Niveau.List(CbX_Niveau.ListIndex, 0)
            .Cells(DerrLigneTheme + 1, "AA").Value = CbX_Categorie.List(CbX_Categorie.ListIndex, 0)
            .Cells(DerrLigneTheme + 1, "AB").Value = CbX_Difficulte.List(CbX_Difficulte.ListIndex, 0)
 
        Set wsListeDonnees = Nothing
        Set ws = Nothing
 
        Else
            MsgBox "La question existe déjà.", vbExclamation
        End If
    End With
 
    ' Afficher la boîte de dialogue avec la question
    reponse = MsgBox("JB, veux-tu ajouter une nouvelle question ?", vbQuestion + vbYesNo, "Ajout d'une nouvelle question")
 
    ' Vérifier la réponse de l'utilisateur
    If reponse = vbYes Then
        Unload Me
        USF_AjoutQuestion.Show 0
    Else
        Unload Me
    End If
 
End If
End Sub
Le fichier :
Classeur-Aide-.xlsm

Par avance, merci


Bonne soirée, le lighteux26