Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

tarvel

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

Merci Staple1600 pour ta réponse rapide!
Il n'existe aucune solution de tri sur sur une plage de cellules avec une seule boucle?
 

tarvel

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

Dslé Staple1600 ...C'est Ok je voulais dire par 1 plage de cellules (et non boucle)...avec l'objet Range!

Merci pour tes réponses
 

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
978
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…