XL 2021 Trier tableau

julienha

XLDnaute Occasionnel
Bonjour,

Dans le fichier joint, j'aimerais trier le tableau A1:L19 (avec la fonction trier par éventuellement) avec les critères ci-dessous:
- la colonne L en ordre décroissant si toutes les valeurs de la colonne K sont égales à "Put"
- la colonne L en ordre croissant si toutes les valeurs de la colonne K sont égales à "Call"
- sinon trier la colonne J en ordre décroissant

Merci par avance
 

Pièces jointes

  • trier.xlsm
    18.8 KB · Affichages: 13

Gégé-45550

XLDnaute Accro
Bonjour,

Dans le fichier joint, j'aimerais trier le tableau A1:L19 (avec la fonction trier par éventuellement) avec les critères ci-dessous:
- la colonne L en ordre décroissant si toutes les valeurs de la colonne K sont égales à "Put"
- la colonne L en ordre croissant si toutes les valeurs de la colonne K sont égales à "Call"
- sinon trier la colonne J en ordre décroissant

Merci par avance
Bonjour,
Transformez votre tableau en tableau structuré (sans lignes vides) et les tris et filtres deviendront un jeu d'enfant.
Voir exemple en PJ.
Nota : dans un tableau structuré, les formules se propagent automatiquement à chaque ajout de ligne ou de colonne.
Cordialement,
 

Pièces jointes

  • trier.xlsm
    27.8 KB · Affichages: 14

job75

XLDnaute Barbatruc
Bonjour julienha, Gégé-45550,

Pour ceux dont la version Excel n'accepte pas la fonction TRIER voici une solution VBA :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
With Range("A1:L" & Application.Match([9^9], [A:A]))
    .Columns(13).Insert xlToRight 'colonne auxiliaire
    .Columns(13) = "=(ROW()>1)*(RC[-2]<>""Put"")"
    .Columns(13) = .Columns(13).Value 'supprime les formules
    If Application.Sum(.Columns(13)) = 0 Then
        .Sort .Columns(12), xlDescending, Header:=xlYes
    Else
        .Columns(13) = "=(ROW()>1)*(RC[-2]<>""Call"")"
        .Columns(13) = .Columns(13).Value 'supprime les formules
        If Application.Sum(.Columns(13)) = 0 Then
            .Sort .Columns(12), xlAscending, Header:=xlYes
        Else
            .Sort .Columns(10), xlDescending, Header:=xlYes
        End If
    End If
    .Columns(13).Delete xlToLeft
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
La macro est dans le code de la feuille et se déclenche quand on modifie une cellule quelconque.

A+
 

Pièces jointes

  • trier.xlsm
    22.3 KB · Affichages: 12

julienha

XLDnaute Occasionnel
Bonjour,
Transformez votre tableau en tableau structuré (sans lignes vides) et les tris et filtres deviendront un jeu d'enfant.
Voir exemple en PJ.
Nota : dans un tableau structuré, les formules se propagent automatiquement à chaque ajout de ligne ou de colonne.
Cordialement,
Merci. En fait, j'aimerais que les données se trient automatiquement.
De plus, les données sont actualisées par des copié-collé.
 

job75

XLDnaute Barbatruc
Bonsoir julienha, le forum,

Voyez le fichier joint et cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim derlig As Variant
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
With [Tableau1].ListObject.Range 'tableau structuré
    derlig = Application.Match([9^9], .Columns(1).EntireColumn)
    If IsNumeric(derlig) Then Rows(derlig + 1 & ":" & Rows.Count).Delete 'RAZ
    .Columns(14).Insert xlToRight 'colonne auxiliaire
    .Columns(14) = "=N(RC[-3]<>""Put"")"
    .Columns(14) = .Columns(14).Value 'supprime les formules
    If Application.Sum(.Columns(14)) = 0 Then _
        .Sort .Columns(12), xlDescending, Header:=xlYes: GoTo 1 'tri sur colonne L
    .Columns(14) = "=N(RC[-3]<>""Call"")"
    .Columns(14) = .Columns(14).Value 'supprime les formules
    If Application.Sum(.Columns(14)) = 0 Then _
        .Sort .Columns(12), xlAscending, Header:=xlYes: GoTo 1 'tri sur colonne L
    .Columns(14) = "=N(RC[-3]<>""Date"")"
    .Columns(14) = .Columns(14).Value 'supprime les formules
    If Application.Sum(.Columns(14)) = 0 Then _
        .Sort .Columns(13), xlDescending, Header:=xlYes: GoTo 1 'tri sur colonne M
    .Sort .Columns(10), xlDescending, Header:=xlYes 'tri sur colonne J
1   .Columns(14).Delete xlToLeft
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
Les lignes vides du tableau structuré sont supprimées.

Les dates en colonne M sont triées quand on entre le mot Date dans toute la colonne K.

A+
 

Pièces jointes

  • trier VBA.xlsm
    23 KB · Affichages: 2
Dernière édition:

chris

XLDnaute Barbatruc
Bonjour
Est-il possible d'ajouter un filtre pour ne pas prendre en compte les valeurs nulles?
Je rappelle qu'un tableau structuré ne doit JAMAIS contenir de lignes entièrement vides qui font perdre 95% des avantages du tableau structuré...

VB:
=EXCLURE(TRIER(Tableau1;SI(OU(NB.SI(Tableau1[C/P];"Put")=NBVAL(Tableau1[C/P]);NB.SI(Tableau1[C/P];"Call")=NBVAL(Tableau1[C/P]));12;10);SI(NB.SI(Tableau1[C/P];"Call")=NBVAL(Tableau1[C/P]);-1;1));NB.SI(Tableau1[Strike];""))
 

julienha

XLDnaute Occasionnel
Bonjour

Je rappelle qu'un tableau structuré ne doit JAMAIS contenir de lignes entièrement vides qui font perdre 95% des avantages du tableau structuré...

VB:
=EXCLURE(TRIER(Tableau1;SI(OU(NB.SI(Tableau1[C/P];"Put")=NBVAL(Tableau1[C/P]);NB.SI(Tableau1[C/P];"Call")=NBVAL(Tableau1[C/P]));12;10);SI(NB.SI(Tableau1[C/P];"Call")=NBVAL(Tableau1[C/P]);-1;1));NB.SI(Tableau1[Strike];""))
Merci bcp mais la formule ne fonctionne pas (fichier en pf avec la formule en A22)
 

Pièces jointes

  • trier_test.xlsx
    17.5 KB · Affichages: 5

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh