1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| Option Explicit
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As _
MSComctlLib.ColumnHeader)
'
'source:
'http://www.experts-exchange.com/Programming/
'Programming_Languages/Visual_Basic/Q_10235567.html
'
Dim strFormat As String
Dim i As Integer, x As Integer
x = ColumnHeader.Index - 1
strFormat = String$(20, "0") & "." & String$(10, "0")
ListView1.Sorted = False
ListView1.SortKey = x
If ColumnHeader.Index = 1 Then
'Boucle sur toutes les lignes pour passage en format "triable"
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).Tag = ListView1.ListItems(i).Text
If CDbl(ListView1.ListItems(i).Text) >= 0 Then
ListView1.ListItems(i).Text = _
Format(CDbl(ListView1.ListItems(i).Text), strFormat)
Else
ListView1.ListItems(i).Text = "&" & _
InvNumber(Format(0 - _
CDbl(ListView1.ListItems(i).Text), strFormat))
End If
Next i
'------------------------------------------------------------
' ------ Application du tri -----------
If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If
ListView1.Sorted = True
'--------------------------------------
'Boucle sur toutes les lignes pour remise au format initial
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).Text = ListView1.ListItems(i).Tag
Next i
Else
'Boucle sur toutes les lignes pour passage en format "triable"
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(x).Tag = _
ListView1.ListItems(i).ListSubItems(x).Text
If CDbl(ListView1.ListItems(i).ListSubItems(x).Text) >= 0 Then
ListView1.ListItems(i).ListSubItems(x).Text = _
Format(CDbl(ListView1.ListItems(i). _
ListSubItems(x).Text), strFormat)
Else
ListView1.ListItems(i).ListSubItems(x).Text = "&" & _
InvNumber(Format(0 - CDbl(ListView1.ListItems(i). _
ListSubItems(x).Text), strFormat))
End If
Next i
'--------------------------------------------------
' ------ Application du tri -----------
If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If
ListView1.Sorted = True
'--------------------------------------
'Boucle sur toutes les lignes pour remise au format initial
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(x).Text = _
ListView1.ListItems(i).ListSubItems(x).Tag
Next i
End If
End Sub
Private Function InvNumber(ByVal Number As String) As String
Static i As Integer
For i = 1 To Len(Number)
Select Case Mid$(Number, i, 1)
Case "-": Mid$(Number, i, 1) = " "
Case "0": Mid$(Number, i, 1) = "9"
Case "1": Mid$(Number, i, 1) = "8"
Case "2": Mid$(Number, i, 1) = "7"
Case "3": Mid$(Number, i, 1) = "6"
Case "4": Mid$(Number, i, 1) = "5"
Case "5": Mid$(Number, i, 1) = "4"
Case "6": Mid$(Number, i, 1) = "3"
Case "7": Mid$(Number, i, 1) = "2"
Case "8": Mid$(Number, i, 1) = "1"
Case "9": Mid$(Number, i, 1) = "0"
End Select
Next
InvNumber = Number
End Function |
Partager