Option Compare Text
Sub TriTableau2D()
Dim a()
a = ActiveSheet.ListObjects("TabData").DataBodyRange.Value ' Tableau 2D
For cycle = 1 To 6 'pour les 6 cycles du tableau feuille "Calculs ratios"
Tri a(), cycle + 2, LBound(a, 1), UBound(a, 1) 'on tri le tableau en ordre croissant: on ajuste avec Cycle+2 pour donner le numéro de colonne==ex: cycle 1 = ratioVeille, il est en colonne C (3eme colonne de la feuille)
For i = UBound(a, 1) To UBound(a, 1) - 3 Step -1 'on prend les 4 derniers elements: on part du dernier (c'est le plus grand) et on remonte
Sheets("Feuille A").Cells(9 - i + 2, (cycle - 1) * 3 + 1) = a(i, 1)
' a(i,1) = élément du tableau à recopier
' Sheets("Feuille A").Cells(9 - i + 2, (cycle - 1) * 3 + 1)' c'est la cellule de la feuille A qui recoit le résultat
' pour le numéro de ligne: 9-i+2 ==> 9-i: quand i va de 8 à 5: 9-i va de 1 à 4
'+2==> parce que on commence à la ligne 3 dans la feuille A
'pour le numéro de colonne: (cycle-1)*3+2==> chaque cycle occupe 3 colonnes= ex: Cycle 1: sur les colonnes A et B + C(colonne vide), Cycle 2: colonnes D E F
'==> c'est donc pour pouvoir décaler de 3 colonnes à chaque nouveau cycle
Sheets("Feuille A").Cells(9 - i + 2, (cycle - 1) * 3 + 2) = a(i, cycle + 2)
Next i
Next cycle
End Sub
Sub Tri(a(), ColTri, gauc, droi) ' Quick sort: tri par ordre croissant du tableau a, sur la colonne "ColTri"
ref = a((gauc + droi) \ 2, ColTri)
g = gauc: d = droi
Do
Do While a(g, ColTri) < ref: g = g + 1: Loop
Do While ref < a(d, ColTri): d = d - 1: Loop
If g <= d Then
For k = LBound(a, 2) To UBound(a, 2)
temp = a(g, k): a(g, k) = a(d, k): a(d, k) = temp
Next k
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, ColTri, g, droi)
If gauc < d Then Call Tri(a, ColTri, gauc, d)
End Sub