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

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,
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

job75

XLDnaute Barbatruc
Bonjour,

J'avoue ne pas comprendre car je ne vois pas de fonction TRIER, ni au post #2, ni au post #5.

Je devrais la voir même si elle n'est pas acceptée chez moi sur Excel 2019.

A+
 

julienha

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