Trier des données croissante dans une Combobox
Bonjour,
J'ai crée un petit formulaire avec 2 combobox où est renseigné une section et une température. A partir d'une base de données, j'ai extrait les données mais elles ne se retrouvent pas triés dans l'ordre et je ne vois pas pourquoi, pouvez-vous m'aider ?
Voici une partie de la liste qui s'affiche dans ma combox1 avec des nombres de 1 à 70, puis 0,13/0,35/0,36 IA/0,5/0,5 mesuré/0,75/ 1/1,5/12/120/16/2/2,5 mesuré 3/20/25....
Pour des raisons de confidentialité je ne peux pas mettre la base de données en fichier.
Private Sub UserForm_Initialize()
Dim derniere_ligne As Long, i As Long
Set wbk1 = ThisWorkbook
If MsgBox("Ouvrir la base de données fils et câbles", vbOKCancel) = vbCancel Then Exit Sub
Nomfichier = Application.GetOpenFilename("Fichiers Excel (*.*),*.")
If Nomfichier <> False Then
'Set wbk2 = Workbooks.Open("F:\BASE\BDD Fils et câbles-rev2-feuille protégé.xlsm")
Set wbk2 = Workbooks.Open(Nomfichier)
End If
derniere_ligne = wbk2.Sheets("BDD fils et cables").Cells(1, 1).End(xlDown).Row
'insère les données dans les combobox 1 & 2
Set MonDico = CreateObject("Scripting.Dictionary")
a = wbk2.Sheets("BDD fils et cables").Range("C2:C" & derniere_ligne) ' tableau a(n,1) pour la rapidité
For i = LBound(a) To UBound(a)
If a(i, 1) <> "" Then MonDico(a(i, 1)) = ""
Next i
Set MonDico2 = CreateObject("Scripting.Dictionary")
b = wbk2.Sheets("BDD fils et cables").Range("D2:D" & derniere_ligne) ' tableau b(n,1) pour la rapidité
For i = LBound(a) To UBound(a)
If b(i, 1) <> "" Then MonDico2(b(i, 1)) = ""
Next i
'avec tri
temp = MonDico.keys
temp2 = MonDico2.keys
Call Tri(temp, LBound(temp), UBound(temp))
Me.ComboBox1.List = temp
Call Tri(temp2, LBound(temp2), UBound(temp2))
Me.ComboBox2.List = temp2
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End SubBonjour,
A voir tout semble normal.
Tes valeurs sont toutes des valeurs alphanumériques? Car dans la liste que tu donnes, il semble y avoir les deux alphanumériques et numériques.
Peut-être que d'autres pourront donner leur avis.
Cordialement.
ddetp