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
 

Pièces jointes

  • Essail.zip
    4.5 KB · Affichages: 215

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,
 

Monique

Nous a quitté
Repose en paix
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
 

Pièces jointes

  • SousTotalFiltreKrystof.zip
    6.4 KB · Affichages: 160

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,
 

Pièces jointes

  • mDF_CritèresFiltres.zip
    12.4 KB · Affichages: 165

myDearFriend!

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

Re,

MyDearFriend! à 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,
 

Pièces jointes

  • mDF_CritèresFiltres2.zip
    12.6 KB · Affichages: 221
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).
 

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).
 

Pièces jointes

  • Essail par Mj.xls
    34 KB · Affichages: 251
  • Essail par Mj.xls
    34 KB · Affichages: 253
  • Essail par Mj.xls
    34 KB · Affichages: 251
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
 

Discussions similaires