bonjour à toutes et tous,
j'ai mis un bouton "quitter" dans un userform qui contient 3 combobox;
Le bouton fonctionne bien mais uniquement lorsque toutes les combobox qui le precede sont remplies.
Si rien n'est rempli dans la 1ere combobox, l'appui sur "Quitter" m'oblige à remplir la Combo 1, et ainsi de suite.
Pour pourvoir quitter, je suis contraint d'appuyer 4 fois sur Quitter.....
Je voudrai que le bouton "quitter" soit efficace quelque soit l’état de remplissage des combobox
Quelqu'un aurait-il une idée ?
A toutes fins utiles, voici le code.
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 Option Compare Text Dim TblChoix2(), TblChoix3(), choix2(), choix1(), choix3() Private Sub UserForm_Initialize() choix1 = Application.Transpose(Range("Nom")) choix2 = Application.Transpose(Range("Prenom")) choix3 = Application.Transpose(Range("Employeur")) Set d1 = CreateObject("Scripting.Dictionary") For Each c In choix1: d1(c) = "": Next c Me.ComboBox1.List = d1.Keys End Sub Private Sub ComboBox1_Change() If Me.ComboBox1.ListIndex = -1 And IsError(Application.Match(Me.ComboBox1, choix1, 0)) Then Set d1 = CreateObject("Scripting.Dictionary") tmp = Me.ComboBox1 & "*" For Each c In choix1: If c Like tmp Then d1(c) = "" Next c Me.ComboBox1.List = d1.Keys Me.ComboBox1.DropDown Else Condition = Me.ComboBox1 If Condition = "" Then Exit Sub Set d2 = CreateObject("Scripting.Dictionary") For i = LBound(choix2) To UBound(choix2) If choix1(i) = Condition Then d2(choix2(i)) = "" Next i TblChoix2 = d2.Keys Me.ComboBox2.List = TblChoix2 Me.ComboBox2.SetFocus If Val(Application.Version) > 10 Then SendKeys "{f4}" End If End Sub Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Me.ComboBox1.ListIndex = -1 Then Me.ComboBox1 = Me.ComboBox1.List(0) End Sub Private Sub ComboBox2_Change() If Me.ComboBox1 <> "" Then If Me.ComboBox2.ListIndex = -1 And IsError(Application.Match(Me.ComboBox2, choix2, 0)) Then Set d1 = CreateObject("Scripting.Dictionary") tmp = UCase(Me.ComboBox2) & "*" For Each c In TblChoix2 If UCase(c) Like tmp Then d1(c) = "" Next c Me.ComboBox2.List = d1.Keys Me.ComboBox2.DropDown Else Set d3 = CreateObject("Scripting.Dictionary") Condition1 = Me.ComboBox1 Condition2 = Me.ComboBox2 If Condition1 = "" Or Condition2 = "" Then Exit Sub Set d3 = CreateObject("Scripting.Dictionary") For i = LBound(choix3) To UBound(choix3) If choix1(i) = Condition1 And choix2(i) = Condition2 Then d3(choix3(i)) = "" Next i TblChoix3 = d3.Keys Me.ComboBox3.List = TblChoix3 Me.ComboBox3.SetFocus If Val(Application.Version) > 10 Then SendKeys "{f4}" End If End If End Sub Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Me.ComboBox2.ListIndex = -1 Then Me.ComboBox2 = Me.ComboBox2.List(0) End Sub Private Sub ComboBox3_Change() If Me.ComboBox1 <> "" And Me.ComboBox2 <> "" Then If Me.ComboBox3.ListIndex = -1 And IsError(Application.Match(Me.ComboBox3, choix3, 0)) Then Set d1 = CreateObject("Scripting.Dictionary") tmp = UCase(Me.ComboBox3) & "*" For Each c In TblChoix3 If c Like tmp Then d1(c) = "" Next c Me.ComboBox3.List = d1.Keys Me.ComboBox3.DropDown Else Condition1 = Me.ComboBox1 Condition2 = Me.ComboBox2 Condition3 = Me.ComboBox3 End If End If End Sub Private Sub ComboBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Me.ComboBox3.ListIndex = -1 Then Me.ComboBox3 = Me.ComboBox3.List(0) End Sub Private Sub CommandButton1_Click() If Me.ComboBox1 <> "" And Me.ComboBox2 <> "" Then ActiveCell = UCase(Me.ComboBox1) ActiveCell.Offset(, 1) = Me.ComboBox2 ActiveCell.Offset(, 2) = Me.ComboBox3 Unload Me Else MsgBox "Incomplet!" Exit Sub End If End Sub Private Sub CommandButton2_Click() Unload Me End Sub
Partager