Combobox TRIER Alpha

Fermé
Luffy - 17 oct. 2018 à 16:59
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 18 oct. 2018 à 08:58
Bonjour,

Après une journée d'essai, je ne suis parvenu a adapter aucun code à mon soucis.

J'alimente une Combobox avec la colonne d'un tableau, la colonne contient les Nom et Prénom de "Client".

Le code que j'utilise:
Option explicit
Dim Ws As Worksheet

Private Sub UserForm_Initialize()
Dim J As Long
Set Ws = Sheets("Arrivée")
With ComboBox6
For J = 11 To Ws.Range("D" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("D" & J)
Next J
End With
End sub

Mon but est de trier le résultat obtenu!!!

Mes nombreuses tentatives avait semblé déboucher sur quelques choses avec la solution:
Trier ComboBox6, True ' ajouter en fin de initialize

et en créant un module avec:
Sub Trier(Cbo As ComboBox, Alpha As Boolean) 'pour trier les combobox
Dim I As Long, J As Long
Dim Tmp

If Alpha = True Then
For I = 0 To Cbo.ListCount - 1
For J = I To Cbo.ListCount - 1
If Cbo.List(J) < Cbo.List(I) Then
Tmp = Cbo.List(I)
Cbo.List(I) = Cbo.List(J)
Cbo.List(J) = Tmp
End If
Next
Next
Else
For I = 0 To Cbo.ListCount - 1
For J = I To Cbo.ListCount - 1
If CDbl(Cbo.List(J)) < CDbl(Cbo.List(I)) Then
Tmp = Cbo.List(I)
Cbo.List(I) = Cbo.List(J)
Cbo.List(J) = Tmp
End If
Next
Next
End If
End Sub


Finalement, oui ça triait bien ma combobox, mais les résultats obtenue sur les autres textbox ou combobox ne correspondaient plus a celle du client trouvé.

Je remplie mes autres textbox et combobox à l'aide du code:

Private Sub ComboBox6_Change() 'Faire la recherche par nom
Dim Ligne As Long

If Me.ComboBox6.ListIndex = -1 Then Exit Sub 'Vide?
Ligne = Me.ComboBox6.ListIndex + 11 'Depuis la ligne 11
TextBox1 = Ws.Cells(Ligne, 2)
TextBox2 = Ws.Cells(Ligne, 5)
TextBox3 = Ws.Cells(Ligne, 7)
TextBox5 = Ws.Cells(Ligne, 10)
TextBox4 = Ws.Cells(Ligne, 4)
ComboBox1 = Ws.Cells(Ligne, 1)
ComboBox2 = Ws.Cells(Ligne, 3)
ComboBox3 = Ws.Cells(Ligne, 6)
ComboBox4 = Ws.Cells(Ligne, 8)
ComboBox5 = Ws.Cells(Ligne, 9)
End Sub


J'espère avoir été complet, et surtout que quelqu'un aura une solution pour moi. Comme vous allez deviné je suis débutant en VBA mais j'apprend avec plaisir.

Merci d'avance.
A voir également:

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 17 oct. 2018 à 17:12
Bonjour,

au depart essaies avec une variable-tableau à une dimension que tu tries et que tu utilise après dans le remplissage de ton combo

pour les textbox, tu utilises alors cette variable tablo (pourquoi des combo à donnée unique ?)

si tu ne connais pas les variables-tableaux:
https://silkyroad.developpez.com/vba/tableaux/

1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 17 oct. 2018 à 17:16
un exemple de tri d'une variable tableau à 1 dimension (jusqu'à env. 1000 lignes)
Sub TriaBulle(T, Optional SensTri As Boolean = True)
Dim Test As Boolean, I&, Temp
Do
Test = False
For I = LBound(T) To UBound(T) - 1
If (T(I) > T(I + 1) And SensTri) Or (T(I) < T(I + 1) And Not SensTri) Then
Temp = T(I)
T(I) = T(I + 1)
T(I + 1) = Temp
Test = True
End If
Next I
Loop Until Not Test
End Sub
<code basic>
</code>
0
Bonjour Michel_m

Tout d'abord merci pour ton temps.

Si j'ai bien compris dans ta proposition je les trie sur mon tableau. Cette solution ne me convient pas, en effet sur mon tableau elles sont "trie" par date, ce qui me convient car elle liste "des hospitalisations".

Dans mon Userform j'ai pouvoir rechercher par nom, pour simplifier la recherche j'ai besoin du Tri Alphabétique.

Les combo ne sont pas à donnée unique, je n'ai pas mis le bout de code qui est par exemple:
ComboBox3.List() = Array("BLOC AL", "BLOC EL")


Encore merci pour ton temps

Luffy
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
18 oct. 2018 à 08:58
Bonjour,

Si j'ai bien compris

apparemment, non
0