XL 2016 Filtrer selon une valeur changeante

felixgrezaud

XLDnaute Nouveau
Bonjour,

J'aimerai grâce au VBA filtrer une liste d'objet par rapport à une valeur changeante. Cette valeur est déterminée en amont du document et peut être modifiée à tout moment.
Pour exemple j'ai créé un fichier simplifié de celui sur lequel je travaille.
Les critères sont variables et changent selon des cases à cocher. Les cases ont une cellule attribuée où s'inscrira "VRAI" ou "FAUX", et une formule simple comptera ensuite le nombre de VRAI par objet. Le filtre s'appliquera en feuille 2 pour ne faire apparaître que les objets possédant la valeur maximale. Il faut bien noter que la cellule filtrante ne sera pas "confirmée" avec un "entrée/enter", ou même "cliquée" : J'aimerai que le fait de cliquer sur l'onglet rafraîchisse le filtre selon la nouvelle valeur.
J'ai déjà vu un topic similaire et j'en ai même créé un supplémentaire mais je n'ai toujours pas obtenu la solution avec les codes présents sur ces discussions.

Merci pour votre aide
 

Pièces jointes

  • Classeur1.xlsx
    128.2 KB · Affichages: 15

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour felixgrezaud,
Un exemple en PJ avec la macro :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A2")) Is Nothing Then
        If Target = "" Then
            ActiveSheet.Range("$C$3:$D$100").AutoFilter Field:=1
        Else
            ActiveSheet.Range("$C$3:$D$100").AutoFilter Field:=1, Criteria1:="=" & Target, Operator:=xlAnd
        End If
    End If
End Sub
 

Pièces jointes

  • Classeur1 (30).xlsm
    110.1 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Désolé. Ca m'a échappé.
Un nouvel essai en PJ avec :
VB:
Sub Worksheet_Activate()
    If Range("A2") = "" Then
        ActiveSheet.Range("$C$3:$D$100").AutoFilter Field:=1
    Else
        ActiveSheet.Range("$C$3:$D$100").AutoFilter Field:=1, Criteria1:="=" & Range("A2"), Operator:=xlAnd
    End If
End Sub
La macro s'active lorsqu'on sélectionne la feuil2.
 

Pièces jointes

  • Classeur1 (31).xlsm
    109.7 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
VB:
' Cette macro s'active lorsqu'on selectionne la feuille.
' C'est pour cela qu'elle se trouve dans Feuil2 et non dans un module. Le nom doit être Worksheet_Activate.
Sub Worksheet_Activate()
    If Range("A2") = "" Then                                    ' Si A2="", c'est à dire si vide
        ActiveSheet.Range("$C$3:$D$100").AutoFilter Field:=1    ' Alors on "défiltre" le tableau C3:D100
    Else                                                        ' Sinon on filtre ce tableau sur la valeur de A2
        ActiveSheet.Range("$C$3:$D$100").AutoFilter Field:=1, Criteria1:="=" & Range("A2"), Operator:=xlAnd
    End If
End Sub
Pour obtenir une syntaxe correcte, une des solutions est de passer par l'enregistreur de macro, puis ensuite remanier le code pour l'adapter et l'optimiser.
 

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 424
Membres
103 206
dernier inscrit
diambote