Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim Col As Integer, Form As String
ListView1.Sorted = False
Form = ""
ListView1.SortKey = ColumnHeader.Index - 1
Col = ColumnHeader.Index - 1
' Selon la colonne on applique un certain format aux valeurs
Select Case Col
Case 0
Form = "00000"
Case 1
Form = "0"
Case 2
Form = "000"
Case 4, 5
Form = "00.00"
Case 15
Form = "00;(00)"
End Select
' Si on a appliquer un format
If Form <> "" Then
' Pour chaque ligne de la ListView
For i = 1 To ListView1.ListItems.Count
' Selon la colonne on applique le format déterminé
Select Case Col
Case 0
' La 1ère colonne n'est pas une sous liste dans une LV
ListView1.ListItems(i).Text = Format(CDec(ListView1.ListItems(i).Text), Form)
Case 1
' Les dates sont à traiter différemment avec CDate()
ListView1.ListItems(i).ListSubItems(Col).Text = _
Format(CDec(CDate(ListView1.ListItems(i).ListSubItems(Col).Text)), Form)
Case Else
' Pour les autres pas de soucis particulier
ListView1.ListItems(i).ListSubItems(Col).Text = _
Format(CDec(ListView1.ListItems(i).ListSubItems(Col).Text), Form)
End Select
Next i
End If
' Trier la Listview
If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If
ListView1.Sorted = True
' Après le tri Remettre les données en forme d'origine
If Form <> "" Then
For i = 1 To ListView1.ListItems.Count
Select Case Col
Case 0
Form = "#000"
Case 1
Form = "dd mmm yyyy"
Case 3
Form = "hh:mm"
Case 4
Form = "0"
Case 5
Form = "0"
Case 15
Form = "0"
End Select
If Col = 0 Then
' La 1ère colonne n'est pas une sous liste dans une LV
ListView1.ListItems(i).Text = Format(CDec(ListView1.ListItems(i).Text), Form)
Else
ListView1.ListItems(i).ListSubItems(Col).Text = _
Format(CDec(ListView1.ListItems(i).ListSubItems(Col).Text), Form)
End If
Next i
End If
End Sub