Tri de gauche à droite avec VBA
aqpm
-
aqpm -
aqpm -
Bonjour,
Je dispose d'un tableau(10*10) contenant des valeurs entieres :
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
je voudrai à l'aide de macro, classer ces valeurs dans l'ordre croissant:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
Je dispose d'un tableau(10*10) contenant des valeurs entieres :
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
je voudrai à l'aide de macro, classer ces valeurs dans l'ordre croissant:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
Configuration: Windows XP Internet Explorer 7.0
1 réponse
-
Bonjour
les valeurs peuvent être différentes dans les lignes (234, 567 123 ...); les doublons sont éliminés
Option Explicit
Sub trier_horizontal(lig As Byte) Dim plage As Range, cellule As Range Dim coll As Collection Dim cptr As Byte, nbre As Byte Dim alpha(), i As Byte, j As Byte, k As Byte, tmp As Byte, col As Byte Set plage = Range(Cells(lig, 1), Cells(lig, 10)) ' a adapter Set coll = New Collection 'recherche les valeurs sans doublons For Each cellule In plage On Error Resume Next coll.Add cellule.Value, CStr(cellule.Value) On Error GoTo 0 Next nbre = coll.Count ' restitue la plage épurée des doublons dans une variable tableau ReDim alpha(nbre) cptr = 1 While cptr <= nbre alpha(cptr) = coll(cptr) cptr = cptr + 1 Wend 'Tri décroissant For i = 1 To nbre j = i For k = j + 1 To nbre '(pour un tri croissant ecrire <=) If alpha(k) >= alpha(j) Then j = k Next k If i <> j Then tmp = alpha(j) alpha(j) = alpha(i) alpha(i) = tmp End If Next i 'restitution des valeurs en ordre décroissant Application.ScreenUpdating = False Rows(cptr).ClearContents col = 1 While col <= nbre Cells(lig, col) = alpha(col) col = col + 1 Wend Set plage = Nothing Set coll = Nothing End Sub Sub boucler() Dim ligne As Byte Application.ScreenUpdating = False For ligne = 1 To 10 trier_horizontal (ligne) Next End Sub