alias_2003
XLDnaute Occasionnel
Bonsoir à tous,
Le code ci-dessous fonctionne parfaitement pour trier des listboxes, le seul soucis c'est qu'il impose que toutes les lignes de la colonne triée soient remplies... Ce qui n'est évidement pas le cas pour l'une des colonnes de ma listbox...
Est-il possible d'ajouter cette condition ?
Merci beaucoup,
Amicalement
Le code ci-dessous fonctionne parfaitement pour trier des listboxes, le seul soucis c'est qu'il impose que toutes les lignes de la colonne triée soient remplies... Ce qui n'est évidement pas le cas pour l'une des colonnes de ma listbox...
Est-il possible d'ajouter cette condition ?
Merci beaucoup,
Amicalement
Code:
Sub SortListBox(oLb As MSForms.ListBox, sCol As Long, sType As Long, sDir As Long)
'Run "SortListBox", [ListBox Name], [ListBox column to sort by], [Alpha(1) or Numeric(2) or Date(3) Sort], _
[Ascending(1) or Descending(2) Order]
Dim vaItems As Variant
Dim i As Long, j As Long, k As Long
Dim c As Long
Dim vTemp As Variant
'Put the items in a variant array
vaItems = oLb.List
If sType = 1 Then
For i = LBound(vaItems, 1) To UBound(vaItems, 1) - 1
For j = i + 1 To UBound(vaItems, 1)
'Sort Ascending (1)
If sDir = 1 Then
If vaItems(i, sCol) > vaItems(j, sCol) Then
For c = 0 To oLb.ColumnCount - 1 'Allows sorting of multi-column ListBoxes
vTemp = vaItems(i, c)
vaItems(i, c) = vaItems(j, c)
vaItems(j, c) = vTemp
Next c
End If
ElseIf sDir = 2 Then
If vaItems(i, sCol) < vaItems(j, sCol) Then
For c = 0 To oLb.ColumnCount - 1 'Allows sorting of multi-column ListBoxes
vTemp = vaItems(i, c)
vaItems(i, c) = vaItems(j, c)
vaItems(j, c) = vTemp
Next c
End If
End If
Next j
Next i
ElseIf sType = 2 Then
For i = LBound(vaItems, 1) To UBound(vaItems, 1) - 1
For j = i + 1 To UBound(vaItems, 1)
'Sort Ascending (1)
If sDir = 1 Then
If CLng(vaItems(i, sCol)) > CLng(vaItems(j, sCol)) Then
For c = 0 To oLb.ColumnCount - 1 'Allows sorting of multi-column ListBoxes
vTemp = vaItems(i, c)
vaItems(i, c) = vaItems(j, c)
vaItems(j, c) = vTemp
Next c
End If
ElseIf sDir = 2 Then
If CLng(vaItems(i, sCol)) < CLng(vaItems(j, sCol)) Then
For c = 0 To oLb.ColumnCount - 1
vTemp = vaItems(i, c)
vaItems(i, c) = vaItems(j, c)
vaItems(j, c) = vTemp
Next c
End If
End If
Next j
Next i
ElseIf sType = 3 Then
For k = LBound(vaItems, 1) To UBound(vaItems, 1)
If IsNull(vaItems(k, sCol)) Or vaItems(k, sCol) = "" Or IsDate(vaItems(k, sCol)) = False _
Then vaItems(k, sCol) = 0
Next k
For i = LBound(vaItems, 1) To UBound(vaItems, 1) - 1
For j = i + 1 To UBound(vaItems, 1)
'Sort Ascending (1)
If sDir = 1 Then
If CLng(CDate(vaItems(i, sCol))) > CLng(CDate(vaItems(j, sCol))) Then
For c = 0 To oLb.ColumnCount - 1 'Allows sorting of multi-column ListBoxes
vTemp = vaItems(i, c)
vaItems(i, c) = vaItems(j, c)
vaItems(j, c) = vTemp
Next c
End If
'Sort Descending (2)
ElseIf sDir = 2 Then
If CLng(CDate(vaItems(i, sCol))) < CLng(CDate(vaItems(j, sCol))) Then
For c = 0 To oLb.ColumnCount - 1 'Allows sorting of multi-column ListBoxes
vTemp = vaItems(i, c)
vaItems(i, c) = vaItems(j, c)
vaItems(j, c) = vTemp
Next c
End If
End If
Next j
Next i
End If
For k = LBound(vaItems, 1) To UBound(vaItems, 1)
If vaItems(k, sCol) = 0 Then vaItems(k, sCol) = ""
Next k
oLb.List = vaItems
End Sub