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 :
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
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