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 111 112 113
| Public Sub subTrier(ByRef Liste As Variant, ByVal bCrois As Boolean)
'trie une liste de type non défini, par ordre croissant si bCrois; sinon décroissant
'utilise 4 sous fonctions
Dim iFrom As Integer, iTo As Integer
iFrom = LBound(Liste)
iTo = UBound(Liste)
Select Case bCrois
Case True
While iFrom < iTo
Call subPermute11(Liste, iFrom, iTo)
Call subPermute21(Liste, iTo, iFrom)
Wend
Case False
While iFrom < iTo
Call subPermute12(Liste, iFrom, iTo)
Call subPermute22(Liste, iTo, iFrom)
Wend
End Select
End Sub
Private Sub subPermute11(ByRef Liste As Variant, ByVal iFrom As Integer, ByRef iTo As Integer)
'permute les éléments Liste(iFrom) à Liste(iTo) , iFRom < iTo, pour les rendre croissants 2 à 2
'change la valeur de iTo qui devient l'indice sup non rangé
Dim iT As Integer, i As Integer, var As Variant
If iFrom >= iTo Then Exit Sub
i = iFrom
iT = iFrom
While i < iTo
If Liste(i) > Liste(i + 1) Then
var = Liste(i)
Liste(i) = Liste(i + 1)
Liste(i + 1) = var
iT = i
End If
i = i + 1
Wend
iTo = iT
End Sub
Private Sub subPermute21(ByRef Liste As Variant, ByVal iFrom As Integer, ByRef iTo As Integer)
'permute les éléments Liste(iFrom) à Liste(iTo),iTo < iFrom pour les rendre croissants 2 à 2
'change la valeur de iTo qui devient l'indice sup non rangé
Dim iT As Integer, i As Integer, var As Variant
If iFrom <= iTo Then Exit Sub
i = iFrom
iT = iFrom
While i > iTo
If Liste(i) < Liste(i - 1) Then
var = Liste(i)
Liste(i) = Liste(i - 1)
Liste(i - 1) = var
iT = i
End If
i = i - 1
Wend
iTo = iT
End Sub
Private Sub subPermute12(ByRef Liste As Variant, ByVal iFrom As Integer, ByRef iTo As Integer)
'permute les éléments Liste(iFrom) à Liste(iTo) , iFRom < iTo, pour les rendre décroissants 2 à 2
'change la valeur de iTo qui devient l'indice sup non rangé
Dim iT As Integer, i As Integer, var As Variant
If iFrom >= iTo Then Exit Sub
i = iFrom
iT = iFrom
While i < iTo
If Liste(i) < Liste(i + 1) Then
var = Liste(i)
Liste(i) = Liste(i + 1)
Liste(i + 1) = var
iT = i
End If
i = i + 1
Wend
iTo = iT
End Sub
Private Sub subPermute22(ByRef Liste As Variant, ByVal iFrom As Integer, ByRef iTo As Integer)
'permute les éléments Liste(iFrom) à Liste(iTo),iTo < iFrom pour les rendre décroissants 2 à 2
'change la valeur de iTo qui devient l'indice sup non rangé
Dim iT As Integer, i As Integer, var As Variant
If iFrom <= iTo Then Exit Sub
i = iFrom
iT = iFrom
While i > iTo
If Liste(i) > Liste(i - 1) Then
var = Liste(i)
Liste(i) = Liste(i - 1)
Liste(i - 1) = var
iT = i
End If
i = i - 1
Wend
iTo = iT
End Sub |
Partager