Sauvegarder et restaurer des filtres

thealexis38

XLDnaute Nouveau
Bonjour,

Je suis à la recherche d'une petite solution pour sauvegarder des filtres, de plusieurs colonnes et les restaurer par la suite.

Ceci avec deux functions bien séparer. (Save et Restore)

Après pas mal de recherche, je suis tombé sur ce Ce lien n'existe plus, mais le soucis est que c'est une seule et même fonction.

Après quelques modifications, j'en suis arrivé à cela :
VB:
Sub test()

    Dim ArrayFiltreSauvegarde() As Variant
   
    ArrayFiltreSauvegarde = SaveFilter
   
    EffacerFiltre
   
    RestoreFilter (ArrayFiltreSauvegarde)

End Sub

Function SaveFilter()
       
    Dim ws As Worksheet
    Dim ArraySaveFilter()
    Dim currentFiltRange As String
    Dim i As Integer
   
    Set ws = ActiveSheet
   
    With ws.AutoFilter
        currentFiltRange = .Range.Address
        With .Filters
            ReDim ArraySaveFilter(1 To .Count, 1 To 3)
            For i = 1 To .Count
                With .Item(i)
                If .On Then
                    ArraySaveFilter(i, 1) = .Criteria1
                        If .Operator Then
                            ArraySaveFilter(i, 2) = .Operator
                            If .Operator = xlAnd Or .Operator = xlOr Then
                                ArraySaveFilter(i, 3) = .Criteria2
                            End If
                        End If
                    End If
                End With
            Next i
        End With
    End With
   
    SaveFilter = ArraySaveFilter

End Function

Function RestoreFilter(ArrayRestoreFilter As Variant)

    Dim ws As Worksheet
    Dim currentFiltRange As String
    Dim i As Integer
    Dim nb As Variant

    Set ws = ActiveSheet
   
    For i = 1 To UBound(ArrayRestoreFilter(), 1) ''''' Erreur à ce niveau là ''''' 
        If Not IsEmpty(ArrayRestoreFilter(i, 1)) Then
            If ArrayRestoreFilter(i, 2) Then
                If ArrayRestoreFilter(i, 2) = xlAnd Or ArrayRestoreFilter(i, 2) = xlOr Then
                    ws.Range(currentFiltRange).AutoFilter field:=i, _
                    Criteria1:=ArrayRestoreFilter(i, 1), _
                    Operator:=ArrayRestoreFilter(i, 2), _
                    Criteria2:=ArrayRestoreFilter(i, 3)
                Else
                    ws.Range(currentFiltRange).AutoFilter field:=i, _
                    Criteria1:=ArrayRestoreFilter(i, 1), _
                    Operator:=ArrayRestoreFilter(i, 2)
                End If
            Else
                ws.Range(currentFiltRange).AutoFilter field:=i, _
                Criteria1:=ArrayRestoreFilter(i, 1)
            End If
        End If
    Next i
   
End Function

Malheureusement, j'ai l'erreur suivante au niveau du Restore :
L'indice n'appartient pas à la sélection


En vous remerciant par avance, et bonne soirée
 

thealexis38

XLDnaute Nouveau
Non, pas de tableau de ce type, juste l'option "Filtrer".
J'effectue déjà en VBA différents filtres sur différentes colonnes.

Avec le code du 1er post m'irait très très bien, sauf que j'ai l'erreur si je souhaite couper la fonction en deux (Save et Restore)
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11