Obtenir les informations sur l'état du filtre

krystof_ii

XLDnaute Occasionnel
Bonjour à tous,

Je voudrais savoir s'il est possible d'obtenir dans des cellules l'état du filtre automatique.

J'ai joint un fichier exemple.
Je souhaiterais que dans les case jaune de la feuill2 apparaissent les valeurs choisies pour le filtre du registre feuill1.

Vous remerciant de m'avoir lu,
J'espere que cela est possible ....

Christophe
 

Fichiers joints

krystof_ii

XLDnaute Occasionnel
Re : Obtenir les informations sur l'état du filtre

En fait pas vraiment ...
Ce que je souhaite (dans mon fichier exemple), c'est que chaque champs de la feuill2 (en-tete identique à la feuill1) reprenne les critères du filtre employé.

Encore merci,
Christophe,
 

TheLio

XLDnaute Impliqué
Re : Obtenir les informations sur l'état du filtre

Salut l'forum,Tibo, krystof_ii,

La proposition faite par Tibo est tout a fait adaptée à ton cas.
Sinon, je pense qu'il faudra passer par du VBA.
Est-ce ce que tu souhaites?

A++

TheLio
 

Monique

XLDnaute Barbatruc
Re : Obtenir les informations sur l'état du filtre

Bonjour,

Un essai

Un formule qui renvoie la 1ère valeur visible
puis la 2ème valeur visible différente de la 1ère
S'il n'y a pas de 2ème valeur différente, c'est qu'il y a un filtre (ou qu'il n'y a pas plusieurs valeurs différentes)

Inconvénient : ne prendre qu'un critère de filtre pour chaque plage
 

Fichiers joints

krystof_ii

XLDnaute Occasionnel
Re : Obtenir les informations sur l'état du filtre

Soluce Tibo :
Effectivement, l'information "existe-t-il plusieurs valeurs dans la colonne" pourrait m'indiquer si un filtre "valeur unique" est activé.
Mais un filtre peut également etre "inferieur ou égal à" et dans ce cas plusieurs valeurs peuvent exister.
Donc cette proposition n'est pas suffisante : il me faudrait également les critères du filtre.

Par contre, s'il faut passer par du vba, je ne suis pas contre ... mais quel 'vocabulaire ?

Christophe
 
Dernière édition:

myDearFriend!

XLDnaute Barbatruc
Re : Obtenir les informations sur l'état du filtre

Bonsoir krystof_ii, Tibo, TheLio, Monique,

Dans le classeur ci-joint une solution sans doute à paufiner un peu...

Exceptionnellement, j'ai utilisé l'évènement Calculate() de la Feuil2 pour "capter" la modification du filtre et déclencher le traitement (cet évènement Calculate est à éviter autant que possible, mais je n'ai pas su faire autrement).

J'ai utilisé les 2 procédures ci-dessous :
Code:
[COLOR=GRAY][B][I]DANS LE MODULE DE CODE DE LA FEUILLE 2[/I][/B][/COLOR]

[COLOR=NAVY]Option Explicit[/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] Worksheet_Calculate()
[COLOR=NAVY]Static[/COLOR] EnCours [COLOR=NAVY]As Boolean
    If[/COLOR] EnCours [COLOR=NAVY]Then Exit Sub[/COLOR]
    EnCours = [COLOR=NAVY]True[/COLOR]
    ValFiltres
    EnCours = [COLOR=NAVY]False
End Sub[/COLOR]
Code:
[COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Option Explicit[/COLOR]

[COLOR=NAVY]Sub[/COLOR] ValFiltres()
[COLOR=GREEN]'myDearFriend!  -  www.mdf-xlpages.com[/COLOR]
[COLOR=NAVY]Dim[/COLOR] CritFiltres(1 [COLOR=NAVY]To[/COLOR] 3, 1 [COLOR=NAVY]To[/COLOR] 5) [COLOR=NAVY]As Variant
Dim[/COLOR] C [COLOR=NAVY]As Byte
    With[/COLOR] Sheets("Feuil1").AutoFilter
        [COLOR=NAVY]For[/COLOR] C = 1 [COLOR=NAVY]To[/COLOR] 5
            [COLOR=NAVY]With[/COLOR] .Filters(C)
                [COLOR=NAVY]If[/COLOR] .[COLOR=NAVY]On Then[/COLOR]
                    CritFiltres(1, C) = .Criteria1
                    [COLOR=NAVY]If[/COLOR] .Operator [COLOR=NAVY]Then[/COLOR]
                        CritFiltres(2, C) = Choose(.Operator, "Et", "Ou")
                        CritFiltres(3, C) = .Criteria2
                    [COLOR=NAVY]End If
                End If
            End With
        Next
    End With
    With[/COLOR] Sheets("Feuil2")
        .Range("D2:H4").Value = CritFiltres
    [COLOR=NAVY]End With
End Sub[/COLOR]
Seule restriction toutefois : pour les filtres portant des dates, les critères seront exprimés de numéro de série.

Cordialement,
 

Fichiers joints

myDearFriend!

XLDnaute Barbatruc
Re : Obtenir les informations sur l'état du filtre

Re,

MyDearFriend! a dit:
Exceptionnellement, j'ai utilisé l'évènement Calculate() de la Feuil2 pour "capter" la modification du filtre et déclencher le traitement (cet évènement Calculate est à éviter autant que possible, mais je n'ai pas su faire autrement).
Je viens de trouver une alternative à l'utilisation de cet évènement de feuille Calculate(). Tu en trouveras l'illustration dans le fichier joint.

Dans cet exemple, la procédure évènementielle est remplacée par une Function VBA personnalisée matricielle.
Pour l'appliquer, il suffit de sélectionner la plage "D2:H4" de la Feuil2, de saisir =ValFiltres() dans la barre des formules et de valider le tout par CTRL + SHIFT + ENTREE.

Code:
[COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Function[/COLOR] ValFiltres() [COLOR=NAVY]As Variant[/COLOR]
[COLOR=GREEN]'myDearFriend!  -  www.mdf-xlpages.com[/COLOR]
[COLOR=NAVY]Dim[/COLOR] CritFiltres(1 [COLOR=NAVY]To[/COLOR] 3, 1 [COLOR=NAVY]To[/COLOR] 5) [COLOR=NAVY]As String
Dim[/COLOR] C [COLOR=NAVY]As Byte[/COLOR]
    Application.Volatile
    [COLOR=NAVY]With[/COLOR] Sheets("Feuil1").AutoFilter
        [COLOR=NAVY]For[/COLOR] C = 1 [COLOR=NAVY]To[/COLOR] 5
            [COLOR=NAVY]With[/COLOR] .Filters(C)
                [COLOR=NAVY]If[/COLOR] .[COLOR=NAVY]On Then[/COLOR]
                    CritFiltres(1, C) = .Criteria1
                    [COLOR=NAVY]If[/COLOR] .Operator [COLOR=NAVY]Then[/COLOR]
                        CritFiltres(2, C) = Choose(.Operator, "Et", "Ou")
                        CritFiltres(3, C) = .Criteria2
                    [COLOR=NAVY]End If
                End If
            End With
        Next
    End With[/COLOR]
    ValFiltres = CritFiltres
[COLOR=NAVY]End Function[/COLOR]
Cordialement,
 

Fichiers joints

Dernière édition:

krystof_ii

XLDnaute Occasionnel
Re : Obtenir les informations sur l'état du filtre

Tout simplement : PARFAIT !

myDearFriend!, grace à toi, non seulement cela fonctionne mais en plus j'ai tout le vocabulaire :
Sheets("Feuil1").AutoFilter.Filter(i) correspond donc au filtre (i) de la feuille 1
.on => test si le filtre est actif
.Criteria1 => 1° valeur de filtre
.Criteria2 => 2° valeur du filtre
.Operator => opérande.

Pour ce qui est du pb de la date, en testant le format de la 1°cellule de la colonne correspondante cela devrait se régler.

Par contre, que veut dire application.volatile (quelle est sa fonction ?)

Encore merci à tous !

Et bon bout d'an (comme on dit dans le Sud de la France).
 

TheLio

XLDnaute Impliqué
Re : Obtenir les informations sur l'état du filtre

Hello tous,

Par contre, que veut dire application.volatile
C'est une expression qui n'est pas fixe, tel que =Aujourdhui() par exemple dans les formules

A++
TheLio
 

myDearFriend!

XLDnaute Barbatruc
Re : Obtenir les informations sur l'état du filtre

Bonjour krystof_ii, Tibo, TheLio, Monique, le Forum,

Dans l'éditeur VBE, tu places ton curseur sur le mot Volatile et tu presses sur la touche F1.

L'aide VBA indique : "Cette méthode marque comme volatile une fonction personnalisée. Une fonction volatile doit être recalculée chaque fois qu'un calcul est effectué dans une cellule quelconque de la feuille de calcul. Une fonction non volatile n'est recalculée qu'en cas de changement des variables d'entrée. Cette méthode est sans effet si elle ne se trouve pas à l'intérieur d'une fonction définie par l'utilisateur utilisée pour calculer une cellule de feuille de calcul.

Autrement dit, c'est grâce à cette méthode que l'évènement Calculate() sera "capter" sans même avoir à utiliser la procédure évènementielle correspondante. Chaque fois qu'un calcul est effectué dans une cellule quelconque de la feuille, le recalcul de la fonction personnalisée sera forcé. C'est un élément essentiel qui permet de créer de vraies fonctions personnalisées VBA utilisables dans les feuilles de calcul Excel.

Cordialement,
 

MJ13

XLDnaute Barbatruc
Re : Obtenir les informations sur l'état du filtre

Bonjour à tous

Voici une méthode que je viens de découvrir.
Il utilise les filtres élaborés et une petite macro faite avec l'enregistreur de macros (Faire un choix dans la colonne C de la feuille 2).
 

Fichiers joints

Dernière édition:

@urelie

XLDnaute Junior
Re : Obtenir les informations sur l'état du filtre

Bonjour à tous,

J'aimerai adapter le fichier de myDearFriend mais je ne sais pas comment m'y prendre.

Il faut deja que je copie la macro dans un module: pas de probleme mais quel champs dois je adapter (le nom de la feuille 1...)

Ensuite dans les formules, dois je modifier qqchose? Quelqu'un pourrait me les expliquer?

Dans l'exemple, cela ne concerne qu'une colonne (la D PERIODE HORAIRE) mais puis je avoir ceci pour plusieurs colonne?

Merci d'avance pour votre aide

Cordialement

Aurelie
 

MJ13

XLDnaute Barbatruc
Re : Obtenir les informations sur l'état du filtre

bonjour

On veut un fichier (et une augmentation)!
 

buffon74

XLDnaute Nouveau
Re : Obtenir les informations sur l'état du filtre

Bonjour à tous,

je reprends ce fil car dans un outil excel que je suis entrain de construire, j'ai besoin de connaître les valeurs sélectionnées dans un filtre automatique.
Le fichier posté par myDearFriend! répond en partie à mon besoin... si dans chacun de mes filtres, je ne sélectionne que 2 critères (criteria1 et criteria2).
Je travaille avec Excel 2010 et il est possible de sélectionner plus de 2 critères dans un filtre automatique et dans ce cas, la fonction retourne #VALUE!
Pouvez-vous m'apporter votre aide? Peut-on utiliser criteria3, criteriaN...
Merci d'avance pour vos réponse.
Cordialement
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas