XL 2019 Tri sur une ligne dans un tableau.

Paulle

XLDnaute Occasionnel
Bonjour,

Je souhaite faire un tri sur une ligne A, ou B, ou C, ………ou M de façon à regrouper les cellules contenant une valeur en conservant les dates dans un ordre croissant.

Si c’est une plage de données le tri par ligne est possible.
Mais si c’est un tableau le tri par ligne n’est pas possible, et j’aimerai bien que ce soit un tableau plutôt qu’une plage de données.

Et si possible, que je sélectionne une cellule dans la colonne A, et que le tri se fasse en cliquant sur un bouton déclenchant la macro.
Et pouvoir revenir au tableau d’origine.

J’ai commencé une macro, le tri est correct, mais il faut à chaque fois que je sélectionne une plage.

J’espère avoir été clair et pas en demander de trop.

Merci.
 

Pièces jointes

  • Classeur1.xlsx
    16.4 KB · Affichages: 7
Solution
remplace le code par celui-ci qui ne filtre QUE si tu as cliqué dans la première colonne

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
    NomTab = Target.ListObject 'on récupère le nom de la table dans laquelle on a cliqué
    
    If NomTab = "" Then Exit Sub 'si on a cliqué hors de la table, on quitte
    Set TS = ActiveSheet.ListObjects(NomTab) 'on définit la table sur laquelle on travaille
    
    With TS
        If Intersect(Target, .ListColumns(1).Range) Is Nothing Then Exit Sub 'on si a cliqué ailleurs que dans la colonne 1
        lig = Target.Row - .Range.Row 'numéro de ligne à traiter
        For j = 2 To .ListColumns.Count 'pour chaque colonne...

vgendron

XLDnaute Barbatruc
Hello

l'explication n'est pas très claire.. mais par chance;. ma boule de cristal est assez propore aujourd'hui :-D

1) j'ai transformé ton tableau en Table Structurée
2) je présume que les dates sur la ligne d'entete sont DEJA triées
3) dès que tu cliques dans la table, les colonnes "vides" de la ligne sont juste masquées

il suffit de cliquer dans la ligne d'entete pour revoir tout
 

Pièces jointes

  • Classeur1.xlsm
    17.2 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
remplace le code par celui-ci qui ne filtre QUE si tu as cliqué dans la première colonne

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
    NomTab = Target.ListObject 'on récupère le nom de la table dans laquelle on a cliqué
    
    If NomTab = "" Then Exit Sub 'si on a cliqué hors de la table, on quitte
    Set TS = ActiveSheet.ListObjects(NomTab) 'on définit la table sur laquelle on travaille
    
    With TS
        If Intersect(Target, .ListColumns(1).Range) Is Nothing Then Exit Sub 'on si a cliqué ailleurs que dans la colonne 1
        lig = Target.Row - .Range.Row 'numéro de ligne à traiter
        For j = 2 To .ListColumns.Count 'pour chaque colonne
            .ListColumns(j).Range.EntireColumn.Hidden = (.DataBodyRange(lig, j) = "") 'on masque les colonnes vides
        Next j
    End With
End Sub
 

Discussions similaires

Réponses
10
Affichages
633
  • Question
Microsoft 365 Tableau
Réponses
24
Affichages
879