Bonjour,
Je cherche une fonction afin de trier une variable chiffre dans l'odre croissant :
Par exemple : "8,16,2,7,32,21,5" en "2,5,7,8,16,21,32"
Quelqu'un aurait-il une fonction déjà existante ?
Merci
Version imprimable
Bonjour,
Je cherche une fonction afin de trier une variable chiffre dans l'odre croissant :
Par exemple : "8,16,2,7,32,21,5" en "2,5,7,8,16,21,32"
Quelqu'un aurait-il une fonction déjà existante ?
Merci
Bonjour,
Tu devrais certainement trouver ton bonheur par ici: http://boisgontierjacques.free.fr/pa...bleaux.htm#Tri
Perso, je ferais plus simple : je compierais les valeurs dans des cellules, je ferais un Sort sur cette zone et je récupèrerais le résultat dans la variable.
Une quatrième ligne de code pour effacer les cellules et c'est réglé.
La solution de Menhir me paraît plus simple aussi
Voilà je viens de me faire mon petit code! Merci Menhir pour ton astuce ;)
Code:
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 Sub TriQuick() Dim var As String, VarTrie As String, Tb() As String Dim i As Long, j As Long var = "16,8,24,6,18,32,13" Tb = Split(var, ",") For k = 0 To UBound(Tb) If k = 0 Then j = 10 For i = j To 16 Cells(j, 1) = Tb(k) Exit For Next i j = j + 1 Next k Range("A10:A16").Sort Key1:=Range("A10"), Order1:=xlAscending, Header:=xlNo For i = 10 To 16 VarTrie = VarTrie & "," & Cells(i, 1) Next i End Sub
re
on peut faire un "Sort" en mémoire aussi
j'ai meme retrouvé un vieux post de 2015 avec un array et sans autre objectCode:
1
2
3
4
5
6
7
8
9
10 Sub test() Dim myarray,dl1 myarray = Array(8, 16, 2, 7, 32, 21, 5) Set sl1 = CreateObject("System.Collections.ArrayList") For i = LBound(myarray) To UBound(myarray) sl1.Add myarray(i) Next sl1.Sort MsgBox Join(sl1.ToArray, vbCrLf) End Sub
https://www.developpez.net/forums/d1...iable-tableau/
Code:
1
2
3
4
5
6
7
8
9 Sub tri4() Dim tablo(), temp() tablo = Array(45, 37, 49, 21, 85, 49, 51, 24) ReDim temp(LBound(tablo) To UBound(tablo)) For i = 0 To UBound(tablo) temp(i) = Application.WorksheetFunction.Small(tablo, i + 1) Next Debug.Print Join(temp) End Sub
Plus simple (histoire de montrer que je n'exagérais pas en parlant de 4 lignes de code) :
Mais ce serait encore plus simple en passant par une vraie matrice plutôt qu'une variable StringCode:
1
2
3
4
5
6
7
8
9
10
11
12 Option Base 1 Sub test() Dim a As String a = "16,8,24,6,18,32,13" Range("A1:A7") = Application.Transpose(Split(a, ",")) Range("A1:A7").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo a = Join(Application.Transpose(Range("A1:A7")), ",") Range("A1:A7").ClearContents Debug.Print a End Sub
Code:
1
2
3
4
5
6
7
8
9 Sub test() Dim a As Variant a = Array(16, 8, 24, 6, 18, 32, 13) Range("A1:A7") = Application.Transpose(a) Range("A1:A7").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo a = Application.Transpose(Range("A1:A7")) Range("A1:A7").ClearContents End Sub
C'est plus simple en terme de code, mais est ce-que c'est plus rapide?
J'ai toujours pensé que passer par la feuille Excel ca allongeait les temps de traitement :)