Critères des Filtres Automatiques

Bonjour et merci de m'accueillir dans ce forum.

j'ai un soucis avec les critères de filtres automatiques :

Dans Excel 2003 j'avais installé une macro me permettant de construire une chaîne de caractère pour afficher les critères des filtres actifs sur mon tableau.

Dans Excel 2010 ma macro part en erreur.

Au lieu de stocker les critères Criteria1, Criteria2, etc ,sous forme de chaines facilement récupérables, Excel 2010, dès que mon filtre s'applique à un colonne de dates charge directement Criteria2 sous la forme Criteria2:=Array(0, "dd/mm/yyyy") et impossible de lire les éléments de ce Array. De plus Criteria1 étant ignoré, ma macro part systématiquement en erreur dans la tentative de lire ce paramètre !

Il suffit d'enregistrer une macro pendant la mise en place d'un filtre Automatique dans une colonne contenant des dates pour voir le problème que je signale.

Merci déjà à qui saura me redonner espoir car je tourne en rond depuis plusieurs semaines sur ce point

Bonjour,

Le filtre sépare par années, date et jour, tu peu par exemple ouvrir tout se qui est pour 2011 ensuite tu auras les mois et pour finir les jours.

Montre ta macro pour voir si ont peu t'aider.

A+

Bonjour,

Merci de votre réactivité,

je précise ma question : D'abord la Sub() qui marche parfaitement sur Excel2003

Sub Filtractif()

Feuille = ActiveSheet.Name

Set ID = Sheets(Feuille)

If ID.AutoFilterMode Then

indice = 0

For Each f In ID.AutoFilter.Filters

indice = indice + 1

If f.On Then

Filtre1 = Left(f.Criteria1, 1) & " " & Right(f.Criteria1, Len(f.Criteria1) - 1)

AutreCrit = ""

currentFiltRange = ID.AutoFilter.Range.Address

If f.Operator Then

If f.Operator = 2 Then

Opérateur = "OU"

ElseIf f.Operator = 1 Then

Opérateur = "ET"

End If

Filtre2 = Left(f.Criteria2, 1) & " " & Right(f.Criteria2, Len(f.Criteria2) - 1)

AutreCrit = " " & Opérateur & " " & Filtre2 '& " "f.Operator &

StrRequête = StrRequête + Cells(5, indice) & " " & f.Criteria1 & AutreCrit & Chr(10)

End If

End If

Next

End If

Range("G1").Formula = StrRequête

End Sub

Cette Sub me permet de récupérer les valeurs de Criteria1 et Criteria2 pour afficher une chaîne rappelant les critères de filtres actifs

Entre la version 2003 et celle de 2010 Excel semble avoir changé le format de valeurs de critères car en Excel 2010, la ligne

Filtre1 = Left(f.Criteria1, 1) & " " & Right(f.Criteria1, Len(f.Criteria1) - 1) provoque une erreur

Lorsque j'enregistre une macro sur la mise en place d'un filtre automatique sur une colonne date ça ressemble à ça :

ActiveSheet.Range("$A$5:$O$55").AutoFilter Field:=8, Operator:= _

xlFilterValues, Criteria2:=Array(0, "10/2/2010")

Impossible de récupérer la valeur "10/02/2010", j'ai essayé de surveiller Criteria2('1) par espion : toujours vide

Désespérant !

Merci de vos bonnes lumières

Re,

Ça m'a aussi pris un peu la tête pour trouver..

D'abord trouver le bug d'excel pour les critères dans une colonne date.. tu ne l'a probablement pas remarquer mais contrairement a ce que tu dis dans ton exposer ce n'est pas "dd/mm/yyyy" qui est d'application mais bien "mm/dd/yyyy" d'où plantage évident dés que la date du jour est > 12. Probablement que le 0 qui est en premier dans l'array est la référence au format mais je n'ai trouvé aucune doc sur ce sujet alors j'ai inversé les dates du filtre comme ça..

Dim filtre As String
Dim d As Date
    d = "30/06/2011"
    filtre = Month(d) & "/" & Day(d) & "/" & Year(d)
    ActiveSheet.Range("$A$5:$O$13").AutoFilter Field:=15
    ActiveSheet.Range("$A$5:$O$13").AutoFilter Field:=15, Operator:= _
        xlFilterValues, Criteria2:=Array(0, filtre)

Et ça fonctionne... , si plusieurs date à filtrer.. Array(0, filtre, 0, Filtre1, 0, Filtre2)

Je ne comprend rien à ta macro, même pour du 2003 elle me semble un peu tirée par les cheveux mais je ne connais pas le contexte..

Essaye déjà avec ce rectificatif pour la date et reviens pour la suite si nécessaire.

A+

Edit : En relisant ton dernier poste j'ai compris ce que ta macro fait, j'examine cela demain, maintenant.. dodo.

Je trouve absolument génial d'avoir une solution aussi rapidement ! ça n'est pas le cas de tous les forums !

Je vais intégrer cette solution, fort logique finalement. Bravo !

Pour ce qui est de ma Sub, je dois avouer que j'avais travaillé par copier coller sur des exemples de l'aide... ça n'est pas glorieux mais ça marchait.

Merci encore !

Re,

En fait, après quelques essais, je reste bloqué dans l'impossibilité de lire ce Criteria2. je suis heureux d'avoir compris la structure du Array de stockage d'un ou plusieurs critères date mais pour autant, je ne parviens toujours pas à récupérer sa valeur ni a intervenir sur le format comme tu me le montres dans le bout de code exemple que tu m'envois.

Je continue de chercher....

Re,

suite au bug signaler plus haut, je constate qu'il est impossible de lire les contenus de criter1 et 2 vu qu'il y à des erreurs dans l'agencement des dates.

J'ai trouvé l'aide sur ce sujet mais leur modèle bug, même avec des données valide. J'y ai remédié mais la sélection de plus de deux dates fixe est impossible.

Ce qui est possible.

> 2 dates fixes 12/06/2012 et 20/04/2012

> les filtres personnalisés par exemple..

Criteria1:=  ">=1/01/2010", Operator:=xlAnd, Criteria2:="<=31/12/2010"

pour une année

Une autre solution serait de mettre la colonne date en texte, mais si ce sont des dates réelles ça va les changer en représentation de la date série. Donc pratiquement à exclure.

Ce qui bug aussi avec la démo de MS...

    ActiveSheet.Range("$A$5:$O$13").AutoFilter Field:=4, Criteria1:=Array( _
        "George", "Georgette", "Jean Claude", "Jule"), Operator:=xlFilterValues
    ActiveSheet.Range("$A$5:$O$13").AutoFilter Field:=4

Mais ça j'y ai remédier.

Donne un exemple des filtres que tu emploi je verrais pour adapter.

En attendant voila le code rectifié pour lire le filtre

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
                    On Error GoTo Passe
                    filterArray(F, 1) = .Criteria1
                    If .Operator <> 7 And .Operator <> 0 Then
                        filterArray(F, 2) = .Operator
                        filterArray(F, 3) = .Criteria2
                    Else
                        filterArray(F, 2) = .Operator
                    End If
Passe:
                    If Err Then
                        MsgBox "Ce filtre n'est pas mémorisable"
                        Exit Sub
                    End If
                End If
            End With
        Next
    End With
End With
End Sub

Avec ça tu ne sais pas encore mémoriser le filtre mais tu peu déjà voir ceux qui sont possible.

Quand j'aurais tes exemples je verrais pour mémoriser.

A+

Bonjour,

Merci du temps donné pour ce problème et surtout pour la réactivité...

Voila un exemple simple qui montre le problème

le bouton Filtre appelle la Sub FiltreActif pou afficher la requête dans la zone réservée à cet effet en première ligne.

Dans le module1 la Sub FiltreActif dont le comportement a déjà été décrit

Dans le module2 la macro1 enregistrer à l'établissement des filtres

Bonne journée

232testfiltre.xlsm (24.76 Ko)

Bonjour,

En poursuivant ma recherche sur internet, je suis tombé sur ce conseil de tutoriel

auteur : SilkyRoad

Dans Excel2007, l'application est capable d'analyser automatiquement les dates par jour, semaine, mois, semestre ou année ce qui facilite les filtres sur ce type de données.

Ici Image de la listbox hiérarchique de sélection du filtre date

Pour désactiver cette option et dissocier cette hiérarchie (transformation en liste non hiérarchique):

Cliquez sur le Bouton Office.

Cliquez sur le bouton Options Excel.

Sélectionnez le menu Options avancées.

Dans la partie Afficher les options pour ce classeur,

Choisissez le classeur.

Décochez l'option Grouper les dates dans le menu Filtre automatique.

Cliquez sur le bouton OK pour valider.

J'ai bien sûr essayé et l'erreur ne se produit plus

Ca ne résout pas le problème mais ça permet d'attendre ! Ne boudons pas notre plaisir !

Re,

Ça ne résout pas le problème mais ça permet d'attendre ! Ne boudons pas notre plaisir !

Bien d'avoir trouver cette propriété d'Excel.

Quel est le problème qui reste ?

Le problème restant est de comprendre pourquoi, dans le cas d'une configuration de liste hiérarchisée pour les dates, le Criteria1 n'est pas mouvementé et le Criteria2 l'est sous la forme d'un tableau parfaitement illisible (valeurs non récupérables) comme très précisément montré dans mes messages et fichier joint précédents

A suivre !!!

Le problème restant est d'être capable de lire la valeur de Criteria2 et de comprendre pourquoi Criteria1 est ignoré, dans la configuration où les listes de filtres de dates sont hiérarchisées.

A suivre ...

Ainsi va la vie !....

Je ne comprends pas ! Par deux fois j'ai répondu pour préciser le problème non résolu et je ne vois pas mes messages dans le dialogue

Je précisais que dans le cas d'un configuration (par défaut) de Listes hiérarchisées pour les filtres automatiques de dates, Criteria1 n'est pas visible et Ctiteria2 n'est pas accessible.

J'espère que si moi, je ne vois pas mes messages postés, au moins le Forum les verra....


Autant pour moi, je viens de voir mes messages !

Re,

Je ne sais pas si ça va t'aidé, voila une solution que je viens de trouver et qui fonctionne.

Il y a inversion du mois et du jour,

Par exemple pour exclure toute les date du jour actuel..

Dim d As String
    d = Month(Date) & "/" & Day(Date) & "/" & Year(Date)

    ActiveSheet.Range("$B$3:$D$53").AutoFilter Field:=3, Criteria1:= _
       "<>" & d, Operator:=xlAnd

Une sélection entre deux dates

Dim DatDeb As String
Dim DatFin As String
    DatDeb = "02/12/2012"
    DatFin = "02/22/2012"
    ActiveSheet.Range("$B$3:$D$53").AutoFilter Field:=3, Criteria1:= _
       ">=" & DatDeb, Operator:=xlAnd, Criteria2:="<=" & DatFin

A+

Merci de prendre encore du temps pour moi !

Je précise le problème à nouveau :

Après avoir établi un filtre automatique, ma Sub FiltreActif() me permet normalement de récupérer les valeurs de Criteria1 et Criteria2, pour constituer une chaîne que j'affiche afin que l'utilisateur ait sous les yeux le ou les critères de filtrage.

Dans Excel2010, si le classeur est dans l'option liste hiérarchisées pour les filtres date, Criteria1 n'existe pas (donc ma Sub part en erreur) et Criteria2 est illisible (donc pas de quoi constituer mon affichage de critère ! Voir le fichier exemple que j'ai posté)

Je peux gérer l'absence de Criteria1 en testant la nature de la colonne filtrée (date ou pas date) mais je ne sais pas comment récupérer le 2ème élément du tableau Criteria2 (Array(0,"date") quel que soit le format date utilisé .

Rechercher des sujets similaires à "criteres filtres automatiques"