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
| Private Sub Userform_Initialize()
Dim Tbl As Variant 'déclare la variable tbl (TaBLeau)
Dim i& 'déclare la variable i (incrément)
Dim j& 'déclare la variable j (incrément)
Dim T()
Dim cpt& 'compteur
Dim myColl As New Collection
'--- Monte les data directement dans un variant (j'ai pris les 4 colonnes de B à E ) ---
With Sheets("Bilan-Lien") 'prend en compte l'onglet "Base_de_donnees"
Tbl = .Range("B3:E" & .Cells(Application.Rows.Count, 2).End(xlUp).Row) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "Base_de_donnees"
'--- Tableau sans les doublons (emploi d'une collection) ---
On Error Resume Next
For i = LBound(Tbl, 1) To UBound(Tbl, 1)
myColl.Add Tbl(i, 1), CStr(Tbl(i, 1))
If Err = 0 Then 'si une erreur se produit, les data ne sont pas affectées dans le tableau
cpt& = cpt& + 1
ReDim Preserve T(LBound(Tbl, 2) To UBound(Tbl, 2), 1 To cpt&)
For j = LBound(Tbl, 2) To UBound(Tbl, 2)
T(j, cpt&) = Tbl(i, j)
Next j
End If
Err.Clear
Next i
On Error GoTo 0
'--- Transposition du tableau dans un autre tableau su'on passe en paramètre à la fonction de tri ---
Tbl = TriAlpha(Application.WorksheetFunction.Transpose(T))
'### Pour visualiser et faciliter le développement, je fixe le nombre de colonnes à 4
'### A l'usage, si vous ne voulez voir que la première colonne remplacez 4 par 1
Me.CBoxCodeCommercial.ColumnCount = 4
Me.CBoxCodeCommercial.List = Tbl 'alimente la ComboBox1 sans doublons et trié par ordre alphabétique
End Sub
Private Sub CBoxCodeCommercial_Change()
Dim i&
With Me.CBoxCodeCommercial
i& = .ListIndex
If i& = -1 Then
Me.TextBox5 = ""
Me.TextBox6 = ""
Me.TextBox7 = ""
Else
Me.TextBox5 = .List(i&, 1)
Me.TextBox6 = .List(i&, 3)
Me.TextBox7 = .List(i&, 2)
End If
End With
End Sub
Private Function TriAlpha(Tbl As Variant) As Variant
Dim i As Long 'déclare la variable i (incrément)
Dim j As Long 'déclare la variable j (incrément)
Dim temp As Variant 'déclare la variable temp (valeur TEMPoraire)
Dim k As Long
'---
'tri alphabétique
For i = LBound(Tbl, 1) To UBound(Tbl, 1) 'boucle 1 de 0 au nombre de valeur du tableau
For j = LBound(Tbl, 1) To UBound(Tbl, 1) 'boucle 2 de 0 au nombre de valeur du tableau
If Tbl(i, 1) < Tbl(j, 1) Then 'condition : si la valeur de la boucle 1 est invérieure à la valeur de la boucle 2
For k = LBound(Tbl, 2) To UBound(Tbl, 2)
temp = Tbl(i, k) 'définit la valeur temporaire temp
Tbl(i, k) = Tbl(j, k) 'la valeur de la boucle un devient la valeur de la boucle 2
Tbl(j, k) = temp 'la valeur de la boucle deux devient la valeur temporaire temp
Next k
End If 'fin de la condition
Next j 'prochaine valeur de la boucle 2
Next i 'prochaine valeur de la boucle 1
TriAlpha = Tbl
End Function |