Enregistrer paramétres de filtrage et les ré-utiliser par macro

HelioM

XLDnaute Nouveau
Bonjour,

J'utilise une tableau avec en-têtes sur lequel j'ai appliqué plusieurs filtres automatiques et tris sur différentes colonnes.

J'aimerais faire une macro qui enregistre la configuration des filtres choisies, qui ensuite retire tous les filtres et donc qui affiche toutes les lignes du tableau et enfin une seconde macro qui me permet de réappliquer les filtres initiaux qui avaient été enregistrés.

Etant débutant en vba, tout ce que j'ai essayé n'a pas aboutit, notamment à cause de la fonction ShowAllData qui ne fonctionne que très aléatoirement avec les tests que j'en ai fait. Je n'ai aussi pas très bien compris les exemples proposés dans l'aide excel relatifs aux filtres.

Merci d'avance pour toute aide !
 

kjin

XLDnaute Barbatruc
Re : Enregistrer paramétres de filtrage et les ré-utiliser par macro

Bonjour,
Tu n'indiques pas si les 2 macros sont enchaînées, car dans la négative, les critères du filtre doivent être enregistrés sur une feuille, comme dans l'exemple fourni dans l'aide, sinon les enregistrer dans un tableau
A+
kjin
 

HelioM

XLDnaute Nouveau
Re : Enregistrer paramétres de filtrage et les ré-utiliser par macro

Bonjour,

Oui, en fait j'aurais dû spécifier davantage, je pensais que ca avait peu d'importance.

En fait les deux macros s'enchaînent. J'ai fait une macro qui agit sur le tableau en question mais elle ne marche que si le tableau n'est pas filtré.

Je voudrais donc compléter cette macro par une première partie qui enlève tous les filtres (en les ayant enregistrés) puis finir la macro par le rétablissment des filtres.

Le tout formant une seule même macro affectée à un bouton.

J'espere que c'est un peu plus clair !
 

kjin

XLDnaute Barbatruc
Re : Enregistrer paramétres de filtrage et les ré-utiliser par macro

Re,
On est d'accord que le filtre est appliqué manuellement au préalable...
Issu de l'aide
Code:
Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String

Sub ChangeFilters()
Set w = ActiveSheet
With w.AutoFilter
    currentFiltRange = .Range.Address
    With .Filters
        ReDim filterArray(1 To .Count, 1 To 3)
        For f = 1 To .Count
            With .Item(f)
                If .On Then
                    filterArray(f, 1) = .Criteria1
                    If .Operator Then
                        filterArray(f, 2) = .Operator
                        filterArray(f, 3) = .Criteria2
                    End If
                End If
            End With
        Next
    End With
End With
w.AutoFilterMode = False      'suppression du filtre
'......................            ton traitement
RestoreFilters                'Restauration du filtre
End Sub

Sub RestoreFilters()
Set w = ActiveSheet
w.AutoFilterMode = False
For col = 1 To UBound(filterArray(), 1)
    If Not IsEmpty(filterArray(col, 1)) Then
        If filterArray(col, 2) Then
            w.Range(currentFiltRange).AutoFilter field:=col, _
                Criteria1:=filterArray(col, 1), _
                    Operator:=filterArray(col, 2), _
                Criteria2:=filterArray(col, 3)
        Else
            w.Range(currentFiltRange).AutoFilter field:=col, _
                Criteria1:=filterArray(col, 1)
        End If
    End If
Next
End Sub
Avec un fichier on y verrait sans doute plus clair pour fournir une réponse précise
A+
kjin
 

Grugeurs

XLDnaute Nouveau
Re : Enregistrer paramétres de filtrage et les ré-utiliser par macro

Bonjour,

J'ai essayé l'exemple de kjin et il fonctionne très bien dans le cas où l'on a un maximum de 2 paramètres de filtrage. Que faire lorsque l'on a plus de 2 paramètres de filtrage?

Merci
 

akyX

XLDnaute Nouveau
Re : Enregistrer paramétres de filtrage et les ré-utiliser par macro

Bonjour,

Je relance cette discussion car le sujet correspond exactement à ce que je tente de faire (en vain) étant débutante en VBA. Ce bout de macro s'insère dans une macro plus globale qui me permet de rajouter des données facilement dans mon tableau. Pour faciliter la lecture du tableau, j'ai mis des filtres automatiques sur chaque colonne. Je me suis rendue compte peu après la "finalisation" de ma macro que si le tableau était filtré, hé bien la ligne que je rajoutais normalement en fin de tableau avec ma macro s'écrivait une ligne plus loin que le filtre (soit pas forcément la dernière ligne du tableau). Etant novice en VBA j'ai tenté de trouver une manière de sauvegarder le filtre pour pouvoir le supprimer avant ma macro et le restaurer juste après ma macro.
J'ai bien trouvé la discussion https://www.excel-downloads.com/thr...complexe-pour-lenlever-et-le-remettre.149425/ mais je n'arrive pas à l'adapter à mon problème. J'ai du mal à comprendre les termes qui composent le code et donc à l'adapter pour mon fichier (je pense que cela vient aussi du fait que j'ai des filtres avec ENORMEMENT d'entrée).

J'ai refait un fichier "représentatif" avec le même nombre de colonnes filtrées et EN GROS les mêmes types de données dans chaque colonne. C'est un fichier qui est vraiment amené à évoluer en terme de nombre de filtres (ajout de colonnes).

J'espère avoir été à peu près claire dans mes propos, mais n'hésitez pas à me demander des précisions :).

Bonne journée,

aky
 

Pièces jointes

  • Fichier représentatif.xlsx
    17.7 KB · Affichages: 37

Statistiques des forums

Discussions
312 684
Messages
2 090 918
Membres
104 699
dernier inscrit
Azyra