Filtre automatique sur Colonne active

Bonjour à toutes et à tous,

J'ai actuellement, dans plusieurs colonnes, un bouton qui me permet de trier de A à Z dans un tableau avec des filtres automatiques.
Le tableau fait 900 lignes sur 453 colonnes. (De A18 à QK900)

Je cherche à optimiser mon code (et mon temps) afin de n'avoir plus qu'un seul bouton qui trierait la colonne dans laquelle la cellule est active.
(Si je sélectionne la cellule "D20" ou "D200" et que je clique sur le bouton, je souhaiterai qu'il me trie la colonne "D"

Une petite idée pour m'aider svp ?

Merci d'avance.

Geof

Actuellement j'ai le code là qui fonctionne très bien mais je dois insérer un bouton dans chaque colonne :

ActiveSheet.AutoFilter.Sort.SortFields.Clear

ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Range("N18:N900"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

With ActiveSheet.AutoFilter.Sort

.Header = xlYes

.MatchCase = False

.Orientation = xlTopToBottom

.SortMethod = xlPinYin

.Apply

End With

Bonjour,

Un exemple de tri avec une procédure évènementielle (double-clic dans la cellule).

Cdlt.

5evgef51.xlsm (21.24 Ko)
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim TopRow As Long, lastCol As Long, lastRow As Long, lCol As Long, rng As Range

    TopRow = 18
    lCol = Target.Column

    Cancel = True

    With Me
        lastCol = .Cells(TopRow - 1, .Columns.Count).End(xlToLeft).Column
        lastRow = Me.Cells(.Rows.Count, 1).End(xlUp).Row
        If Not .AutoFilterMode Then
            Set rng = .Range(.Cells(TopRow, 1), .Cells(lastRow, lastCol))
        Else
            Set rng = .AutoFilter.Range
        End If
    End With

    rng.Sort key1:=Cells(TopRow, lCol), order1:=xlAscending, Header:=xlYes

End Sub

Bonjour Jean Eric,

Je te remercie, je vais tester ça en essayant d'adapter à mon besoin.
Je te retiens au courant.

Merci

Bonne journée

Bonjour Jean Eric,

J'ai bien essayé de l'adapter mais j'ai une Erreur d’exécution 91 / Variable objet ou variable de bloc with non définie.
Erreur sur la ligne lCol = Target.Column

Je l'ai mis dans un module et créer un bouton qui appelle cette macro lorsque je suis dans la colonne que je souhaite trier.

Option Explicit

Sub Tri_Col_Active()
Dim Target As Range, Cancel As Boolean
Dim TopRow As Long, lastCol As Long, lastRow As Long, lCol As Long, rng As Range

    TopRow = 18
    lCol = Target.Column

    Cancel = True

    With ActiveSheet
        lastCol = .Cells(TopRow - 1, .Columns.Count).End(xlToLeft).Column
        lastRow = ActiveSheet.Cells(.Rows.Count, 1).End(xlUp).Row
        If Not .AutoFilterMode Then
            Set rng = .Range(.Cells(TopRow, 1), .Cells(lastRow, lastCol))
        Else
            Set rng = .AutoFilter.Range
        End If
    End With

    rng.Sort key1:=Cells(TopRow, lCol), order1:=xlAscending, Header:=xlYes

End Sub

Un grand merci à toi

Bonjour,

Essaie ainsi (pas testé).

Cdlt.

Sub Tri_Col_Active()
Dim rng As Range
Dim lastCol As Long, lastRow As Long, lCol As Long
Const RW As Long = 18

    lCol = ActiveCell.Column

    With ActiveSheet
        lastCol = .Cells(TopRow - 1, .Columns.Count).End(xlToLeft).Column
        lastRow = ActiveSheet.Cells(.Rows.Count, 1).End(xlUp).Row
        If Not .AutoFilterMode Then
            Set rng = .Range(.Cells(RW, 1), .Cells(lastRow, lastCol))
        Else
            Set rng = .AutoFilter.Range
        End If
    End With

    rng.Sort key1:=Cells(RW, lCol), order1:=xlAscending, Header:=xlYes

End Sub

Super

Au top merci cela fonctionne très bien

Merci à toi, et bonne journée

@ bientôt sur le forum

Rechercher des sujets similaires à "filtre automatique colonne active"