Bonjour à toutes et à tous,
J'utilise une BDD dans la feuille INVENTAIRE qui s'affiche dans une combobox triée a colonne unique (CB_PROD). Pour plus de facilité lors d'une recherche,
il suffit d'introduire "*" pour afficher tous les produits ou "*bleu" pour afficher tous les produits contenant le mot "bleu" par exemple.
Il est possible d'avoir 2 produits de noms identiques mais d'unités différentes :
Produit unité
------- -----
Tape blanc RLX
Tape blanc BTE
Ceci ne sera pas récurrent sur tous les produits mais exceptionnel.
Lorsque j'effectue une recherche sur "Tape blanc", je n'obtiens qu'une seule ligne car la macro effectue un tri sans doublon sur le nom uniquement.
Dès lors, comment pourrait-on afficher les 2 produits de noms identiques dans la combobox triée ? Pour moi, pas de souci si le nom apparaît 2 fois l'un à la suite de l'autre. Faudrait-il introduire 2 colonnes dans la combobox ?
Merci d'avance pour votre aide et conseils
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 Dim d1 Dim tmp As String Dim c As Range Dim tbl As Variant 'déclare la variable tbl (TaBLeau) Dim z As Integer 'déclare la variable z (incrément) Dim j As Integer 'déclare la variable j (incrément) Dim temp As Variant 'déclare la variable temp (valeur TEMPoraire) If Me.CB_PROD <> "" Then Set d1 = CreateObject("Scripting.Dictionary") tmp = "*" & UCase(Me.CB_PROD) & "*" For Each c In Sheets("INVENTAIRE").[LISTE] If UCase(c) Like tmp Then d1(c.Value) = "" Next c tbl = d1.keys 'définit le tableau des valeurs sans doublons 'tri alphabétique For z = 0 To UBound(tbl) 'boucle 1 de 0 au nombre de valeur du tableau For j = 0 To UBound(tbl) 'boucle 2 de 0 au nombre de valeur du tableau If tbl(z) < tbl(j) Then 'condition : si la valeur de la boucle 1 est invérieure à la valeur de la boucle 2 temp = tbl(z) 'définit la valeur temporaire temp tbl(z) = tbl(j) 'la valeur de la boucle un devient la valeur de la boucle 2 tbl(j) = temp 'la valeur de la boucle deux devient la valeur temporaire temp End If 'fin de la condition Next j 'prochaine valeur de la boucle 2 Next z 'prochaine valeur de la boucle 1 Me.CB_PROD.List = tbl Me.CB_PROD.DropDown End If
Partager