Bonjour à tous,
J'ai créé il y a peu un Projet VBA dans le but de rechercher des données dans un tableau suivant plusieurs critères de recherche. Le projet en est au début.
Me voici donc avec mon UserForm1 et deux modules.
Je débute en VBA donc le programme peut choquer dans la forme.
Le UseForm:
Le module générateur de ComboBox:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Public Sub UserForm_Initialize() GenerateurDeComboBox "Bloc", 1 End Sub
Le module de recherche:
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 Public colLettre As String Public Function GenerateurDeComboBox(NomDeLaColonne, NumeroDeLaComboBox) recherche NomDeLaColonne Dim i As Integer Dim Collec As Collection Dim cel As Range Dim x As Integer Dim y As String Dim z As String y = colLettre & "2:" & colLettre z = colLettre & "65536" Combo = "ComboBox" & NumeroDeLaComboBox Set Collec = New Collection 'définit la variable Collec Sheets("Feuil1").Activate For Each cel In Sheets("Feuil1").Range(y & Sheets("Feuil1").Range(z).End(xlUp).Row) On Error Resume Next Collec.Add cel.Value, CStr(cel.Value) Next cel For x = 1 To Collec.Count Combo.AddItem Collec(x) Next x End Function
Le programme fonctionne très bien si je place les 2 modules dans le UseForm.
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 Public Function recherche(ARechercher) Dim celluletrouvee As Range Dim Lig As Integer Dim Col As Integer Dim ligLettre As String Sheets("Feuil1").Activate Set celluletrouvee = Range("1:1").Find(ARechercher, LookAt:=xlPart) If celluletrouvee Is Nothing Then MsgBox ("pas trouvé") End Else Lig = celluletrouvee.Row Col = celluletrouvee.Column End If Select Case Col Case 1 colLettre = "A" Case 2 colLettre = "B" Case 3 colLettre = "C" Case 4 colLettre = "D" Case 5 colLettre = "E" Case 6 colLettre = "F" Case 7 colLettre = "G" Case 8 colLettre = "H" Case 9 colLettre = "I" Case 10 colLettre = "J" Case 11 colLettre = "K" Case 12 colLettre = "L" Case 13 colLettre = "M" Case 14 colLettre = "N" Case 15 colLettre = "O" Case 16 colLettre = "P" Case 17 colLettre = "Q" Case 18 colLettre = "R" Case 19 colLettre = "S" Case 20 colLettre = "T" Case 21 colLettre = "U" Case 22 colLettre = "V" Case 23 colLettre = "W" Case 24 colLettre = "X" Case 25 colLettre = "Y" Case 26 colLettre = "Z" End Select End Function
Dans le cas ci-dessus (ou l'ensemble est partitionné) la partie qui bloque est au moment ou le programme sort de la dernière boucle "Du module génerateur de ComboBox" et retourne dans le UseForm.
A ce moment là le programme se lance, le UseForm s'ouvre normalement mais le menu déroulant de la comBoBox est vide comme si la ComBox avait perdu toutes ces entrés lors du retour au UseForm.
Plus clairement c'est ce qui arrive lorsqu'une variable n'est pas déclarée pour l'ensemble d'un projet et qu'on veut la récupèrer dans un module différent du module de déclaration. Pareil ici la ComboBox ne semble exister que dans le module ou elle a été généré.
J'espère que quelqu'un pourra me dire comment rendre la ComboBox dispo en dehors du "module génerateur de ComboBox" ou bien même s'il y a une erreur dans le code.
Merci à tous
Partager