tri listview

news

XLDnaute Impliqué
Bonjour à tous du forum,

J'utilise le code suivant pour trier par les entêtes des colonnes:

' tri with selection of a colum : the data are ordered if clicking on column head
Private Sub ListView5_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
ListView5.Sorted = False
ListView5.SortKey = ColumnHeader.Index - 1
If ListView5.SortOrder = lvwAscending Then
ListView5.SortOrder = lvwDescending
Else
ListView5.SortOrder = lvwAscending
End If
ListView5.Sorted = True
End Sub


Mais j'ai besoin que dès ouverture d'un Userform, un tri est effectué de la date dans la 2e colonne
du listview. Le tri est fait dans la listview et non la feuille.

Private Sub UserForm_Initialize()
Dim j As Byte, i As Byte
Dim c As Range
Dim LI As ListItem
Dim LSI As ListSubItem
Worksheets("data").Select
With Me.ListView5
.View = 3
With .ColumnHeaders
.Add , , Cells(2, 1), 46, 0
.Add , , Cells(2, 2), 74, 2
.Add , , Cells(2, 3), 270, 0
.Add , , Cells(2, 4), 60, 1
End With
End With
.ListItems.Clear
For Each c In Sheets("data").Range("A3:A" & Range("A65536").End(xlUp).Row)
Set LI = .ListItems.Add(, , c.Value)
For j = 1 To 2
Set LSI = LI.ListSubItems.Add(, , c.Offset(0, j).Value)
Next j
Next c
ListView5.Sorted = True' tri de la 1ière colonne du listview
End With
End Sub


J'utilise le code ci-dessus, mais le tri est fait sur la 1ière colonne.
Comment modifier afin que le tri est effectué sur la 2e colonne du listview dès ouiverture du listview ?

merci d'avance de vos réponses,

news
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : tri listview

bonjour News,Youki
1er clic effectue un tri décroissant de la colonne cliquée.
2ième clic effectue un tri croissant.
' ------ Tri d'une colonne contenant des Dates -------
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim I As Integer, J As Integer

'If Cmd35 = False Then Exit Sub

With ListView1
.Sorted = False
.SortKey = ColumnHeader.Index - 1
If .SortKey = 1 Then' Or .SortKey = 7
'Boucle sur toutes les lignes
For I = 1 To .ListItems.Count

'Passage des données au format décimal
.ListItems(I).ListSubItems(ColumnHeader.Index - 1).Text = _
CDec(CDate(.ListItems(I). _
ListSubItems(ColumnHeader.Index - 1).Text))
Next I
End If

' ------ Application du tri -----------
If .SortOrder = lvwAscending Then
.SortOrder = lvwDescending
Else
.SortOrder = lvwAscending
End If

.Sorted = True
If .SortKey = 2 Or .SortKey = 7 Then
'Boucle sur toutes les lignes
For I = 1 To .ListItems.Count
'Ensuite on revient au format DD/MM/YYYY
.ListItems(I).ListSubItems(ColumnHeader.Index - 1).Text = _
Format(CDate(.ListItems(I).ListSubItems _
(ColumnHeader.Index - 1).Text), "DD/MM/YYYY")
Next I
End If
End With

End Sub

à bientôt
 

Statistiques des forums

Discussions
312 962
Messages
2 093 996
Membres
105 906
dernier inscrit
Evolugame