Dans une grande table de données, Ed aimerait pouvoir analyser rapidement et voir si une colonne particulière est activement filtrée. Il se demande s’il existe un moyen d’appliquer une mise en forme conditionnelle pour changer la couleur d’arrière-plan d’une colonne lorsqu’il y a un filtre en lecture basé sur cette colonne.

Vous pouvez aborder cette tâche de plusieurs manières. Tous impliquent des macros, et le but de chaque macro est de déterminer si un filtre est en jeu pour une colonne particulière. Une option consiste à créer une fonction qui examine la feuille de calcul pour un filtre et, si elle en trouve un en place, vérifie chaque colonne de la zone filtrée pour voir s’il y a un filtre en lecture dans cette colonne. La macro suivante fait exactement cela.

Sub ColorFilterColumn()

Dim flt As Filter     Dim iCol As Integer     Dim lRow As Long     Dim rTemp As Range     Dim bFullCol As Boolean

' Set as True if you want entire column shaded     bFullCol = False

If ActiveSheet.AutoFilterMode Then         iCol = ActiveSheet.AutoFilter.Range.Column         lRow = ActiveSheet.AutoFilter.Range.Row         Application.EnableEvents = False         For Each flt In ActiveSheet.AutoFilter.Filters             If bFullCol Then                 Set rTemp = Cells(lRow, iCol).EntireColumn             Else                 Set rTemp = Cells(lRow, iCol)

End If

If flt.On Then                 rTemp.Interior.Color = vbYellow             Else                 rTemp.Interior.ColorIndex = xlColorIndexNone             End If

Set rTemp = Nothing             iCol = iCol + 1         Next flt         Application.EnableEvents = True     End If End Sub

Si la macro localise un filtre actif, elle met en surbrillance (en jaune) la première cellule du tableau filtré ou la colonne entière contenant le filtre. La détermination de savoir si une cellule ou la colonne entière est mise en surbrillance est basée sur la valeur True / False affectée à la variable bFullCol.

Si vous préférez, vous pouvez créer une fonction qui renvoie True ou False selon qu’un filtre est en vigueur pour une colonne particulière. Avec une telle fonction, vous pouvez créer une règle de mise en forme conditionnelle qui formate la colonne en fonction de la valeur renvoyée.

Function bHasFilter(rcell As Range) As Boolean     Dim lBaseCol As Long     Dim lCol As Long

Application.Volatile     bHasFilter = False

If ActiveSheet.AutoFilterMode Then         With ActiveSheet.AutoFilter             lBaseCol = .Range.Column             lCol = rcell.Column - lBaseCol + 1             If lCol > 0 And lCol <= .Filters.Count Then                 If .Filters(lCol).On Then bHasFilter = True             End If         End With     End If End Function

Pour utiliser cette fonction, utilisez simplement une formule telle que la suivante dans votre feuille de calcul ou dans la règle de mise en forme conditionnelle:

=bHasFilter(F23)

La fonction vérifie d’abord si un filtre est en vigueur. Si tel est le cas, il calcule si la colonne de la cellule passée à la formule se trouve dans la plage des colonnes filtrées. (La ligne référencée dans la formule n’a pas vraiment d’importance.) Si tel est le cas, il vérifie si le filtre est activé pour cette colonne.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (13410) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.