Tri de gauche à droite avec VBA

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
Configuration: Windows XP
Internet Explorer 7.0

1 réponse

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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

    0
    1. aqpm
       
      C'est exactement ça!! Merci beaucoup Michel!
      0