Combobox TRIER Alpha

Luffy -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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.

2 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  2. Luffy
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bonjour,

      Si j'ai bien compris

      apparemment, non
      0