Formatage de colonne basé sur un filtre (Microsoft Excel)
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.