En vba, comment faire un tri sur une plage de cellules en ligne?

tarvel

XLDnaute Occasionnel
Bonjour,
En vba, j'ai besoin d'un éclaircissement concernant des tris croissants sur 3 lignes (indépendamment)
40 25 36 95 12 tri croissant => 12 25 36 40 95
38 14 10 54 36 tri croissant => 10 14 36 38 54
14 29 54 78 31 tri croissant => 14 29 31 54 78

J'ai utilisé ce code qui fonctionne bien sur la 1ère ligne
Code:
Range("B2:F2").Select
    ActiveWorkbook.Worksheets("test").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("test").Sort.SortFields.Add Key:=Range("B2:F2"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("test").Sort
        .SetRange Range("B2:F2")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With

Mais comment faire sur la plage de cellules des 3 lignes en Range("B2:F5").Select
J'ai une erreur d'exécution 1004...Réf de tri non valide
Merci pour votre aide!
 

Staple1600

XLDnaute Barbatruc
Re : En vba, comment faire un tri sur une plage de cellules en ligne?

Re

Comme ceci par exemple (test ok chez moi)
Code:
Sub Macro1()
Dim lig&, i&
lig = Selection.Rows.Count
For i = 1 To lig
Selection.Cells(i, 1).Resize(1, Selection.Columns.Count).Sort Key1:=Selection.Cells(i, 1), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
        DataOption1:=xlSortNormal
Next i
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : En vba, comment faire un tri sur une plage de cellules en ligne?

Re

c'est le Selection qui te gêne?

je l'avais laissé exprès pensant que tu saurais adapter mon code avec Range à la place de Selection

c'était une sorte d'invitation implicite à te faire mettre les mains dans le cambouis ;)

Apparemment l'invitation s'est égarée dans les limbes du web ;)

Code:
Sub Macro1a()
Dim lig&, i&, r As Range
Set r = ActiveSheet.Range("B2:F4")
lig = r.Rows.Count
For i = 1 To lig
r.Cells(i, 1).Resize(1, r.Columns.Count).Sort Key1:=r.Cells(i, 1), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
        DataOption1:=xlSortNormal
Next i
End Sub
 
Dernière édition:

tarvel

XLDnaute Occasionnel
Re : En vba, comment faire un tri sur une plage de cellules en ligne?

Exactement c'était la sélection qui me gênait ;)
Je commençais à mettre les mains dans le camboui..mais ton éclaircissement est venu plus vite que ma recherche de solution :)
lig = Selection.Rows.Count ne pouvait pas me convenir dans mon cas car j'avais d'autres données à ne pas trier ;)...
Je vais potasser l'objet Range
Merci bcp pour tout!
 

Discussions similaires

Réponses
3
Affichages
964

Membres actuellement en ligne

Statistiques des forums

Discussions
312 348
Messages
2 087 509
Membres
103 569
dernier inscrit
zeiffel976