XL 2021 Visibilité filtre automatique

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 !

Bonsoir à tous😉,

Une presque solution par VBA. Les couleurs sont actualisées si on change la sélection au sein de la feuille (masquer ou afficher des lignes ne provoque pas un évènement qui peut être intercepté au sein de VBA🙁).

Donc :
  1. modifier un ou plusieurs filtres
  2. puis changer de cellule pour déclencher la macro
Mettre le code suivant dans le module de la feuille Feuil1.
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim base As Range, x
   If Me.AutoFilterMode Then
      Set base = Me.AutoFilter.Range(1, 1)
      For Each x In Me.AutoFilter.Filters
         base.Interior.Color = IIf(x.On, vbRed, vbYellow)
         Set base = base.Offset(, 1)
      Next x
   End If
End Sub
 

Pièces jointes

Bonjour,

J. Boisgontier avait pondu ceci:

Function ChampActif(c)

Application.Volatile

ChampActif = Sheets(Application.Caller.Parent.Name).AutoFilter.Filters.Item(c.Column - Sheets(Application.Caller.Parent.Name).Range("_FilterDataBase").Column + 1).On

End Function

Pour appliquer une MFC sur les titres:
  • Sélectionner A1:G1
  • Format/mise en forme conditionnelle/La formule est
=ChampActif(A1)
 
Bonsoir à tous😉,

Une presque solution par VBA. Les couleurs sont actualisées si on change la sélection au sein de la feuille (masquer ou afficher des lignes ne provoque pas un évènement qui peut être intercepté au sein de VBA🙁).

Donc :
  1. modifier un ou plusieurs filtres
  2. puis changer de cellule pour déclencher la macro
Mettre le code suivant dans le module de la feuille Feuil1.
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim base As Range, x
   If Me.AutoFilterMode Then
      Set base = Me.AutoFilter.Range(1, 1)
      For Each x In Me.AutoFilter.Filters
         base.Interior.Color = IIf(x.On, vbRed, vbYellow)
         Set base = base.Offset(, 1)
      Next x
   End If
End Sub
Merci beaucoup, je vais l'essayer sur mon fichier source dans la soirée
 
Bonjour,

J. Boisgontier avait pondu ceci:

Function ChampActif(c)

Application.Volatile

ChampActif = Sheets(Application.Caller.Parent.Name).AutoFilter.Filters.Item(c.Column - Sheets(Application.Caller.Parent.Name).Range("_FilterDataBase").Column + 1).On

End Function

Pour appliquer une MFC sur les titres:
  • Sélectionner A1:G1
  • Format/mise en forme conditionnelle/La formule est
=ChampActif(A1)
Merci beaucoup
Bonjour,

J. Boisgontier avait pondu ceci:

Function ChampActif(c)

Application.Volatile

ChampActif = Sheets(Application.Caller.Parent.Name).AutoFilter.Filters.Item(c.Column - Sheets(Application.Caller.Parent.Name).Range("_FilterDataBase").Column + 1).On

End Function

Pour appliquer une MFC sur les titres:
  • Sélectionner A1:G1
  • Format/mise en forme conditionnelle/La formule est
=ChampActif(A1)
Merci beaucoup
 
Re,

Le code précédent fonctionne avec une plage ordinaire.

Mais si le tableau filtré est un tableau structuré, le code doit être changé pour celui-ci (code dans le module de Feuil2):
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim base As Range, x
   Set base = [b4]
   With [b4].ListObject.AutoFilter
      For Each x In .Filters
         base.Interior.Color = IIf(x.On, vbRed, vbYellow)
         Set base = base.Offset(, 1)
      Next x
   End With
End Sub

Le classeur joint montre cela dans la feuille "Tableau-structuré".
 

Pièces jointes

Re,

Le code précédent fonctionne avec une plage ordinaire.

Mais si le tableau filtré est un tableau structuré, le code doit être changé pour celui-ci (code dans le module de Feuil2):
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim base As Range, x
   Set base = [b4]
   With [b4].ListObject.AutoFilter
      For Each x In .Filters
         base.Interior.Color = IIf(x.On, vbRed, vbYellow)
         Set base = base.Offset(, 1)
      Next x
   End With
End Sub

Le classeur joint montre cela dans la feuille "Tableau-structuré".
Merci beaucoup
 
Bonjour,

J. Boisgontier avait pondu ceci:

Function ChampActif(c)

Application.Volatile

ChampActif = Sheets(Application.Caller.Parent.Name).AutoFilter.Filters.Item(c.Column - Sheets(Application.Caller.Parent.Name).Range("_FilterDataBase").Column + 1).On

End Function

Pour appliquer une MFC sur les titres:
  • Sélectionner A1:G1
  • Format/mise en forme conditionnelle/La formule est
=ChampActif(A1)
Bonjour,
j'ai tenté d'appliquer le code que vous m'avez transmis et malheureusement la cellule ne se colorise pas? Pouvez vous SVP, jeter un œil sur le fichier rectifié, j'ai peut être fait une erreur...
Merci
 

Pièces jointes

- 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

Discussions similaires

Réponses
2
Affichages
119
Réponses
1
Affichages
135
Retour