[VBA] retrait des filtres actifs

Bonjour à tous, avec l'aide de certains j'ai pu faire retiré sur l'ensemble de mes classeurs les filtres actifs (pas supprimer le filtre mais bien retirer les filtres actifs).

Le code est le suivant:

'on supprime les filtres
            Dim xAF As AutoFilter
            Dim xFs As Filters
            Dim xLos As ListObjects
            Dim xLo As ListObject
            Dim xRg As Range
            Dim xWs As Worksheet
            Dim xIntC, xF1, xF2, xCount As Integer
            Application.ScreenUpdating = False
            On Error Resume Next
            For Each xWs In Application.Worksheets
                xWs.ShowAllData
                Set xLos = xWs.ListObjects
                xCount = xLos.Count
                For xF1 = 1 To xCount
                    Set xLo = xLos.Item(xF1)
                    Set xRg = xLo.Range
                    xIntC = xRg.Columns.Count
                    For xF2 = 1 To xIntC
                        xLo.Range.AutoFilter Field:=xF2
                    Next
                Next
            Next
            Application.ScreenUpdating = True

ce code fonctionne très bien. Cependant le temps de traitement est assez long (compte tenu du nombre de tableaux nommés au sin de mon classeur).

Existe-t-il une solution (je suppose que oui) me permettant de cibler exclusivement les tableaux sur lesquels agit la macro.

Set TS_fwp = Range("interco_FWP").ListObject
Set TS_lbi = Range("interco_LBI").ListObject
Set TS_lan = Range("lan_compute_biplan").ListObject
Set TS_hybrid = Range("hybridation").ListObject
Set TS_spine = Range("Spines_L3_new").ListObject
Set TS_orion = Range("VxLan_avec_L3_new").ListObject
Set TS_L2 = Range("vlan_avec_L3").ListObject
Set TS_vip = Range("VIP_LB").ListObject
Set TS_lb = Range("conf_LB_new").ListObject
Set TS_ipam = Range("TS_ipam").ListObject

Ci-dessus, les tableaux que je déclare dans mon code et ceux sur lesquels réaliser le retrait des filtres actifs.

Si l'un de vous a une solution...

Merci

Sitting_Bull

Bonjour

En regardant votre code, je me pose la question de savoir si vous avez plusieurs tableaux structurés dans une même feuille ou pas ?

Bonjour Dan, oui je dispose de plusieurs tableaux structurés sur certaines feuilles.

Soit on peut envisager de travailler sur les différents tableaux énumérés dans mon message précédent, soit on peut envisager le travail par feuille, auquel cas les feuilles à traiter sont:

-Subnets Prod

-Spines L3

-L2

-LB

-ORION

-Hybridation

oui je dispose de plusieurs tableaux structurés sur certaines feuilles.

Ok.

bon essayez simplement le code comme ceci

Sub test()
Dim ws As Worksheet
Dim i As Byte
For Each ws In Worksheets
    For i = 1 To ws.ListObjects.Count
        With ws.ListObjects(i)
            If Not .AutoFilter Is Nothing Then
                On Error Resume Next
                .AutoFilter.ShowAllData
                On Error GoTo 0
            Else:
            .Range.AutoFilter 'si filtre absent on remet le filtre
            End If
        End With
    Next i
Next ws
End Sub

Si ok, pensez à

Cordialement

Re Dan,

success!!!!

la sélection de mes tableaux se fait je suppose par (si tu peux me le confirmer)

With ws.ListObjects(i)

la sélection de mes tableaux se fait je suppose par (si tu peux me le confirmer)

Exact.
Le code vérifie le nombre de tableaux structuré qu'il y a dans chaque feuille. Cela correspond à la variable i

Donc Ws.listobjects(i) où i représente le tableau structuré dans lequel on agit sur le filtre.
Si le filtre est existant on affiche les données
Si le filtre est absent on remet simplement le filtre

Je peux commenter chaque ligne si vous le voulez

Crdlt

Merci Dan, il ne sera pas utile de me commenter chaque ligne. Je voulais être sure de comprendre, et c'est chose faite. Merci de votre aide.

A titre d'information, avec le code que j'avais préalablement, cela mettait près de 12secondes pour le traitement, avec le votre, je suis à peine à une seconde.

Cela est bcp plus intuitif et fonctionnel.

Merci

Rechercher des sujets similaires à "vba retrait filtres actifs"