Tester la présence d'un filtre automatique

  • Initiateur de la discussion Initiateur de la discussion ninieee
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

N

ninieee

Guest
Bonjour,
j'aurais besoin de savoir comment je peux tester (avec une macro) s'il y a ou pas un filtre automatique d'activé sur un onglet.
Pour une macro je dois me servir d'un fichier partagé qui peut ou non avoir un filtre automatique, le problème est qu'il faut absolument que ce filtre soit désactivé pour la suite de ma macro et je n'arrive pas à le programmer.
Le debug print(sur selection.autofilter) me renvoie bien la valeur vrai au faux mais si je teste par un if par défaut la commande s'effectue.
Pouvez-vous m'aider ?
Merci d'avance
 
Re : Tester la présence d'un filtre automatique

Bonjour à tous,

une autre solution, pour vérifier s'il existe un filtre auto sur la feuille :

Code:
Dim f As AutoFilter
Set f = ActiveSheet.AutoFilter
If Not f Is Nothing Then MsgBox "ok filtre auto sur feuille."

Attention le test de la propriété "FilterMode" renverra "faux" si le filtre n'est pas activé, cf aide vba
Note
Cette propriété a la valeur True si la feuille de calcul contient une liste filtrée qui contient des lignes masquées.

bon après midi
@+
 
Re : Tester la présence d'un filtre automatique

Dans la gestion des filtres, ci-dessous la macro qui permet de donner l'information sur le filtre activé sur une autre feuille :

je l'ai réalisé avec une tres gde aide d' Exceldownload :
Function Val_Filtres(Emplacement_filtre As Range) As String
'Feuille -> la feuille du filtre à étudier
'Emplacement_filtre -> premiere cellule du filtre actif
Dim CritFiltres As String
Dim N_ligne_du_filtre, N_colonne_du_filtre As String
Dim c, i As Byte
Dim CoupureDate As Integer
Application.Volatile
Val_Filtres = ""
CritFiltres = ""
'N_Ligne_du_Filtre -> N° de la ligne surlaquelle le filtre est activé
N_ligne_du_filtre = Emplacement_filtre.Row
'N_colonne_du_Filtre -> N° de la colonne surlaquelle le filtre est activé
N_colonne_du_filtre = Emplacement_filtre.Column
With Sheets(Emplacement_filtre.Worksheet.Name).AutoFilter
For c = 1 To .Filters.Count
With .Filters(c)
If .On Then
'Formatage des dates
If IsDate(Sheets(Emplacement_filtre.Worksheet.Name).Range("A1").Offset(N_ligne_du_filtre, N_colonne_du_filtre + c - 2).Value) Then
For i = 1 To Len(.Criteria1)
If (Mid(.Criteria1, i, 1)) <> "=" And (Mid(.Criteria1, i, 1)) <> "<" And (Mid(.Criteria1, i, 1)) <> ">" Then
CoupureDate = i - 1
Exit For
End If
Next i
If CritFiltres <> "" Then
CritFiltres = CritFiltres & vbLf & Sheets(Emplacement_filtre.Worksheet.Name).Range("A1").Offset(N_ligne_du_filtre - 1, N_colonne_du_filtre + c - 2) & " : " & Left$(.Criteria1, CoupureDate) & FormatDateTime(Right$(.Criteria1, Len(.Criteria1) - CoupureDate), 2)
Else: CritFiltres = Sheets(Emplacement_filtre.Worksheet.Name).Range("A1").Offset(N_ligne_du_filtre - 1, N_colonne_du_filtre + c - 2) & " : " & Left$(.Criteria1, CoupureDate) & FormatDateTime(Right$(.Criteria1, Len(.Criteria1) - CoupureDate), 2)
End If
If .Operator Then
CritFiltres = CritFiltres & Choose(.Operator, " Et ", " Ou ")
For i = 1 To Len(.Criteria2)
If (Mid(.Criteria2, i, 1)) <> "=" And (Mid(.Criteria2, i, 1)) <> "<" And (Mid(.Criteria2, i, 1)) <> ">" Then
CoupureDate = i - 1
Exit For
End If
Next i
CritFiltres = CritFiltres & Left$(.Criteria2, CoupureDate) & FormatDateTime(Right$(.Criteria2, Len(.Criteria2) - CoupureDate), 2)
End If
Else:
If CritFiltres <> "" Then
CritFiltres = CritFiltres & vbLf & Sheets(Emplacement_filtre.Worksheet.Name).Range("A1").Offset(N_ligne_du_filtre - 1, N_colonne_du_filtre + c - 2) & " : " & .Criteria1
Else: CritFiltres = Sheets(Emplacement_filtre.Worksheet.Name).Range("A1").Offset(N_ligne_du_filtre - 1, N_colonne_du_filtre + c - 2) & " : " & .Criteria1
End If
If .Operator Then
CritFiltres = CritFiltres & Choose(.Operator, " Et ", " Ou ")
CritFiltres = CritFiltres & .Criteria2
End If
End If
End If
End With
Next
End With
Val_Filtres = CritFiltres
End Function

Il suffit d'intégrer la fonction dans un module.
On appelle ensuite la fonction avec val_filtres(cellule de début du filtre)
Je n'ai pas testé cette fonction sur Excel 2007 ...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Y
Réponses
11
Affichages
3 K
Y
F
Réponses
14
Affichages
6 K
fred777
F
B
Réponses
4
Affichages
2 K
B
Retour