XL 2013 Trier Listbox (colonne avec une partie vide)

anass1

XLDnaute Junior
Bonjour,
SVP, j'ai un problème pour trier les colonnes de listbox; Je veux trier trois colonnes comme dans l'image 1
J'ai utilisé ce code mais il ne trie pas correctement la sixième colonne; Parce qu'il contient un vide.
Merci
Img1:
Sans titre1.png
Code:
VB:
Private Sub UserForm_Initialize()
   Dim y As Long
    ListBox1.ColumnCount = 6
    'ListBox1.ColumnHeads = True
    y = Cells(Rows.Count, "C").End(xlUp).Row
    ListBox1.List = Range("A2:F" & y).Value
'==================================================
    Dim a(), b(), c()
    a = Me.ListBox1.List
    Call tri(a(), LBound(a), UBound(a), 6, 0)
    b = a
    Call tri(b(), LBound(a), UBound(b), 6, 2)
    c = b
    Call tri(c(), LBound(a), UBound(c), 6, 5)
   Me.ListBox1.List = c
   ListBox1.TopIndex = ListBox1.ListCount - 1
    End Sub

Sub tri(x(), gauc, droi, NbCol, colTri)        ' Quick sort (JBGontier)
ref = x((gauc + droi) \ 2, colTri)
g = gauc: D = droi
    Do
        Do While x(g, colTri) < ref: g = g + 1: Loop
        Do While ref < x(D, colTri): D = D - 1: Loop
        If g <= D Then
            For c = 0 To NbCol - 1
                temp = x(g, c): x(g, c) = x(D, c): x(D, c) = temp
            Next

            g = g + 1: D = D - 1
        End If
    Loop While g <= D

    If g < droi Then Call tri(x, g, droi, NbCol, colTri)
    If gauc < D Then Call tri(x, gauc, D, NbCol, colTri)
End Sub

Problème:
3.png
 

Pièces jointes

  • 3.xlsm
    28.5 KB · Affichages: 16
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour
je vois mal comment on pourrait trier tes 3 colonnes de A à Z ou z à A en même temps
le tri d'une colonne déferait le tri de la précédente colonne triée
a moins que les valeurs se suivent hiérarchiquement de la même manière


ce qui veut dire que par exemple si la ligne 5 col 3 est la plus petite date il faudra que ca soit egalement le cas pour ta colonne 6

ce qui est peut être le cas ici mais c'est pas obligé que ça le reste

donc pour moi ta question ne peut avoir une réponse

sinon j'avais deja donné un exemple de ma fonction sorted pour listbox by column en option la fonction removeduplicatex(j'ai pas besoins de dire ce qu'elle fait son nom parle lui même
 

Pièces jointes

  • listbox sort and order by column .xlsm
    16.5 KB · Affichages: 12
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonsoir,
Merci patricktoulon
En gros, je voulais juste trier la sixième colonne pour devenir les vides en bas , puis trier la troisième colonne;
L'important ici est que la partie de la troisième colonne parallèle aux vides de la sixième colonne soit triée (comme l'image).
Regarde la pièce jointe 1073882
Merci

réfléchi une seconde c'est pourtant simple
si je te dis que ca n'est pas possible c'est que ca ne l'ai pas

dans ta feuille les vides sont disséminés un peu partout
si dans ta liste box je met les vides de la 6 en bas
et que je tri la 3 les vides vont être a nouveau déplacés

je le répète DOUCEMENT ce que tu demande n'est pas possible dans le sens ou tu défait ce que tu a fait pour la 6 en faisant pour la 3

si tu comprends pas ça ,je peux plus rien pour toi ;)
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re à vous deux

Je pense que ce que souhaiterait faire Anass1 c'est ce que peut faire Excel :

1595370739457.png


Mais le faire à plusieurs "Levels" sur une ListeBox ca doit être ultra coton encore ça...
Pourquoi ne pas le faire faire par Excel avant d'initialiser la ListBox et ensuite laisser la Liste se faire sans essayer de la trier...........

Ou je n'ai rien compris, Téquila's effect !!! LoL

Bonne nuit
@+Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonsoir

Tu peux le faire avec un macro avant de lancer ton Userform et initialiser la ListeBox sans tri.

VB:
Option Explicit

Sub Sorting()
Dim Ws As Worksheet
Dim RngPlage As Range
Dim L As Integer

Set Ws = ThisWorkbook.Worksheets("Feuil1")
Set RngPlage = Ws.Range("A1:F" & Ws.Range("A1000").End(xlUp).Row)
L = RngPlage.Rows.Count


With Ws.Sort
        With .SortFields
        .Clear
        .Add Key:=Range("A2:A" & L)
        .Add Key:=Range("C2:C" & L)
        .Add Key:=Range("F2:F" & L)
        End With

        .SetRange RngPlage
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
End With

UserForm1.Show

End Sub

Bonne nuit
@+Thierry
 

Discussions similaires

Réponses
4
Affichages
209

Statistiques des forums

Discussions
312 202
Messages
2 086 178
Membres
103 152
dernier inscrit
Karibu