|
|
|
|
Bonjour,
Sous Excel VBA, je cherche à trier mon tableau multidimensionnel dont la 1ere colonne est un String et la 2nde, un Integer. Voilà ce que ça donne visuellement :
toto 10
titi 5
tutu 20
tata 15
Et je cherche à obtenir :
titi 5
toto 10
tata 15
tutu 20
Mon tableau est défini de la sorte : Public Tab(4,2) as String
J'ai trouvé des exemples de tri pour des tableaux à une dimension ou même pour des Array, mais pas pour mon cas...
Quelqu'un aurait-il une idée ?
Merci d'avance
Configuration: Windows XP Excel 2003
Si tu veux faire une macro :
|
J'ai finalement pondu mon propre code.
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 !! |