J'ai finalement pondu mon propre code.
Il n'est surement pas optimisé, mais voilà ce que ça donne. J'ai dû passer par l'utilisation d'un buffer
Function SortTable(ByRef tablo() As Variant, ByVal nbItem As Integer)
Dim i, j, k As Integer
Dim buffer(1, 3) As Variant
Dim temp, indice As Integer
Dim newTab() As Variant
ReDim newTab(nbItem, 3)
For j = 0 To nbItem - 1
temp = "200"
For i = 0 To nbItem - 1
If (tablo(i, 2) < temp) And (tablo(i, 2) > 0) Then
temp = tablo(i, 2)
For k = 0 To 3
'record whole line in buffer
indice = i
buffer(1, k) = tablo(i, k)
Next k
End If
Next i
If buffer(1, 1) <> "" Then
tablo(indice, 2) = -1
For k = 0 To 3
newTab(j, k) = buffer(1, k)
Next k
End If
'reset of indice and buffer
indice = 0
For k = 0 To 3
buffer(1, k) = ""
Next k
Next j
SortTable = newTab
End Function
Quelques indications :
tablo() est le tableau non trié
newTab() est le tableau trié
temp sert de critère de comparaison (chiffre, integer, enregistré dans un String)
indice permet de récupérer le n° de l'itération qu'il faudra rajouter à la suite dans le tableau trié.
buffer est un tableau de 4 colonnes permettant de copier la ligne entière.
- Lorsqu'un élément de tablo() a été ajouté à newTab(), sa valeur(champ de test) est mis à -1
-
temp est initialisé à 200 car mes valeurs ne vont pas au dessus de 200.
Pour ceux qui cherchaient la même chose que moi, voilà un début de solution ; pour ceux qui veulent améliorer ce bout de code,
don't hesitate !!
Merci de ta réponse.
Après record de la macro, voilà ce que j'ai obtenu :
Range("A3:B6").Select Selection.Sort Key1:=Range("B3"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormalCependant, je l'ai peut-être mal exprimé, mais je voudrais effectuer mon tri sur les données de mon tableaux et non les données des cellules. Ici, c'est typiquement un traitement sur les cellules.
A la rigueur, si Excel acceptait ce genre de code :
tab().Select Selection.Sort Key1:=tab(x,2), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormalalors je serais aux anges !! Mais ce n'est pas le cas.
Je suis donc à la recherche d'un petit bout de code I guess, qui n'est présent sur aucune page de la toile.. (ok 5h de recherche ne correspond pas à toute la toile, mais j'espère que vous comprenez l'exaspération au terme des 5 heures...)