Trier une liste avec saut toutes le 7 lignes

Bonjour à toutes et à tous.

Je voudrais savoir si l'on peut trier un tableau en sautant une ligne toutes les sept lignes ?

Je joins un exemple.

Merci d'avance

Bernard

7classeur2.xlsx (67.52 Ko)

Bonjour,

Si j'ai bien compris vous souhaitez trier par ordre alphabétique chaque nom sur une hauteur de 7 cellules :

Sub TRI()
Dim L%, I%, R As Byte
With Worksheets("Feuil1")
    L = .Cells(.Rows.Count, 1).End(xlUp).Row
    I = 3
    For R = 3 To (L - 3) / 8
        .Range(.Cells(I, 1), .Cells(I + 6, 1)).EntireRow.Sort .Cells(I, 2), xlAscending
        I = I + 8
    Next R
End With
End Sub

Serez vous confronté au cas où des noms sont en doublon au sein d'une même plage ? Qu'en est-il de la première colonne qui contient une formule ? Car je tri les lignes entières dans mon code par la colonne B. Merci d'indiquer à minima ces précisions.

Cdlt,

Bonjour ergotamine.

Merci pour ta réponse.

Pour répondre à ta question, effectivement dans le cas e nom identiques il serait souhaitable de faire la différence par le prénom si c'est possible.

Encore merci.

Cdlt

Bonjour,

A tester :

Sub TRI()
Dim L%, I%, R As Byte
With Worksheets("Feuil1")
    L = .Cells(.Rows.Count, 1).End(xlUp).Row
    I = 3
    For R = 3 To (L - 3) / 8
        .Range(.Cells(I, 1), .Cells(I + 6, 22)).Sort .Cells(I, 2), xlAscending, , .Cells(I, 3), xlAscending
        '.Range(.Cells(I, 1), .Cells(I + 6, 1)).EntireRow.Sort .Cells(I, 2), xlAscending, , .Cells(I, 3), xlAscending
        I = I + 8
    Next R
End With
End Sub

J'ai modifié également pour ne pas trier par ligne entière. Si vous souhaitez trier par ligne entière supprimez la ligne au dessus de la ligne en commentaire et le ' de la ligne en commentaire.

A convenance en fonction de votre besoin exact.

Cdlt,

Re:

Désolé, J'ai testé tes lignes de codes, en prenant en compte le fait de supprimer la première ligne range et en enlevant l'apostrophe de la Deuxième, mais cela ne fonctionne pas. le code se déroule, mais e tri ne s'effectue pas.

Désolé.

Bonjour,

Admettons que vous échangez les places de LOUIS Eric et MERON Pascal, alors ce code renvoie les les lignes triées mais vous constaterez que vous avez des effets de bords sur la colonne A :

Sub TRI()
Dim L%, I%, R As Byte
With Worksheets("Feuil1")
    L = .Cells(.Rows.Count, 1).End(xlUp).Row
    I = 3
    For R = 3 To (L - 3) / 8
        .Range(.Cells(I, 1), .Cells(I + 6, 1)).EntireRow.Sort .Cells(I, 2), xlAscending, , .Cells(I, 3), xlAscending
        I = I + 8
    Next R
End With
End Sub

Chez moi il fonctionne. En attendant votre retour.

Cdlt,

Re :

Effectivement il fonctionne par case de 7 lignes.

Mais je me suis mal exprimé.

Je voudrais que par exemple si LOUIS se trouve en cellule B3, et BARRAGAN en cellule B15, le tri fasse que BARRAGAN soit à la place de LOUIS et vice-versa.

Au plaisir de te relire.

Bonjour,

Je pense pas que ce soit "propre" d'un point de vue codding mais au moins fonctionnel. En effet je masque les lignes sous-total avant de trier pour les exclure du tri :

Sub TRI()
Dim L%, I%, R As Byte
With Worksheets("Feuil1")
    L = .Cells(.Rows.Count, 1).End(xlUp).Row
    I = 10
    For R = 3 To (L - 3) / 8
        .Rows(I).Hidden = True
        I = I + 8
    Next R
    .Range("A3:A" & L).EntireRow.Sort .Cells(I, 2), xlAscending, , .Cells(I, 3), xlAscending
    .Rows.Hidden = False
End With
End Sub

Cdlt,

Re

Impeccable cela fonctionne très bien avec deux petites modifications.

Merci, je joins le code et je clos le poste

Private Sub tri_Click()
Dim L%, I%, R As Byte

Sheets(Worksheets.Count).Select

With Sheets(Worksheets.Count)
L = .Cells(.Rows.Count, 1).End(xlUp).Row
I = 10
For R = 3 To (L - 3) / 8
.Rows(I).Hidden = True
I = I + 8
Next R
.Range("B3:B" & L).EntireRow.Sort .Cells(I, 2), xlAscending, , .Cells(I, 3), xlAscending
.Rows.Hidden = False
End With
End Sub

Au plaisir de te relire

CDLT

Rechercher des sujets similaires à "trier liste saut toutes lignes"