signalétique des filtres

  • Initiateur de la discussion Initiateur de la discussion Granero
  • Date de début Date de début

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 !

G

Granero

Guest
Bonjour,

Je partage un classeur excel avec d'autres personnes.
Sur un tableau assez complexe (feuille A), il arrive qu'on filtre les données (par exemple : liste de parents , triés en 1 / prélèvement automatique ; 0 / pas de prélèvement.

Le statut des parents (0/1)est fixé sur une autre feuille (feuille B) qui sert de base de données familles (il s'agit de la gestion de la cantine d'une école).
Si je passe le parent X en 1 (prél auto) alors qu'il était en 0 sur la feuille B, rien ne se passe sur la feuille A qui est déjà en positiuon filtrée. Pour que X apparaisse en A, il faut défiltrer la liste et la refiltrer.

D'où ma question : sur une feuille excel la colonne filtrée est signalée par un entonoir gris de taille dérisoire.
Comment signaler mieux que cette liste est filtrée au moment où on aouvre le classeur ?

D'avance merci
Granero
 
Re : signalétique des filtres

Bonjour Granero, bienvenue sur XLD,

Une solution parmi d'autres avec cette macro :

Code:
Private Sub Workbook_Open()
Dim r As Range
Set r = Intersect(Sheets("A").[B:B], Sheets("A").UsedRange)
If Not r Is Nothing Then
  For Each r In r
    If r.EntireRow.Hidden Then
      MsgBox "La colonne B de la feuille A est filtrée..."
      Exit For
    End If
  Next
End If
End Sub
Elle est à placer dans le code de ThisWorkbook (Alt+F11).

A+
 
Re : signalétique des filtres

Bonjour Granero, bienvenue sur XLD,

Une solution parmi d'autres avec cette macro :

Code:
Private Sub Workbook_Open()
Dim r As Range
Set r = Intersect(Sheets("A").[B:B], Sheets("A").UsedRange)
If Not r Is Nothing Then
  For Each r In r
    If r.EntireRow.Hidden Then
      MsgBox "La colonne B de la feuille A est filtrée..."
      Exit For
    End If
  Next
End If
End Sub
Elle est à placer dans le code de ThisWorkbook (Alt+F11).

A+

Merci pour la réponse
Je n'ai pas le temps de la tester tout de suite mais je riposte dès que possible
Granero
 
Re : signalétique des filtres

Re,

Une solution plus élaborée si le filtre automatique est appliqué :

Code:
Private Sub Workbook_Open()
Dim P As Range, i%, a$, n%, t$
With Sheets("A")
  If .AutoFilterMode Then
    Set P = .AutoFilter.Range.EntireColumn
    For i = 1 To .AutoFilter.Filters.Count
      a = P.Columns(i).Address(0, 0)
      a = Left(a, InStr(a, ":") - 1)
      If .AutoFilter.Filters(i).On Then n = n + 1: t = t & " - " & a
    Next
    If n Then
      MsgBox "En feuille A " & IIf(n = 1, "la colonne ", "les colonnes ") _
        & Mid(t, 4) & IIf(n = 1, " est filtrée...", " sont filtrées...")
    End If
  End If
End With
End Sub
A+
 
Re : signalétique des filtres

Bonjour
Coucou Job75

...
Si je passe le parent X en 1 (prél auto) alors qu'il était en 0 sur la feuille B, rien ne se passe sur la feuille A qui est déjà en positiuon filtrée. Pour que X apparaisse en A, il faut défiltrer la liste et la refiltrer...

Non il suffit de cliquer sur le bouton Réappliquer pour que le filtre tienne compte de la modif.
 
Re : signalétique des filtres

Bonjour Granero, Job, Chris

Sinon, _Thierry avait fait un code pour visualiser le filtre que j'ai pu adapter (Ouf 😱). Hervé avait fait un code en ce sens, il me semble, si quelqu'un le retrouve 😕.

Mais attention, cela peut supprimer les commentaires éventuels de la feuille (assez facilde à éviter) et cela entraîne la disqparition de la couleur de fond si elle est appliquée sur un filtre.

Code:
Sub AutoFilterDetector()
'MJ adaptation code de _Thierry
    Dim WS As Worksheet
    Dim Cmt As Comment
    Dim RangeFiltered As Range
    Dim L As Integer
    Dim C As Byte
    Set WS = ActiveSheet    'ou bien = Worksheets('NomDeLaFeuille')
    'MsgBox WS.AutoFilter.Filters.Count
    With WS
        With .AutoFilter
            Set RangeFiltered = .Range
            L = RangeFiltered.Row
            With .Filters
                For C = 1 To .Count
                    With WS.Cells(L, C)
                        .Interior.Color = xlNone
                    End With
                Next
            End With
        End With
    End With
    With WS
        For Each Cmt In WS.Comments
            Cmt.Delete
        Next
        If .FilterMode = True Then
            With .AutoFilter
                Set RangeFiltered = .Range
                L = RangeFiltered.Row
                With .Filters
                    For C = 1 To .Count
                        If .Item(C).On Then
                            With WS.Cells(L, C)
                                .Interior.Color = RGB(255, 255, 0)
                                .ClearComments
                                .AddComment
                                .Comment.Visible = True
                                .Comment.Text Text:=WS.AutoFilter.Filters.Item(C).Criteria1
                                .Comment.Shape.TextFrame.AutoSize = True
                            End With
                        End If
                    Next
                End With
                With .Filters
                    For C = 1 To .Count
                        If .Item(C).On = False Then
                            With WS.Cells(L, C)
                                .Interior.Color = xlNone
                                .ClearComments
                            End With
                        End If
                    Next
                End With
            End With
        End If
    End With
End Sub
 
Re : signalétique des filtres

Re

Sinon, c'était tellement simple, il suffisait de chercher Filtre Hervé, avec les discussions de MJ13, je suis tombé sur ceci:

https://www.excel-downloads.com/threads/visualiser-les-champs-filtres-par-couleur.159924/

Code:
Sub Filtre_Couleur()
 'MJ adaptation code de Hervé
 Rows("1:1").Interior.Color = RGB(255, 255, 255)
 Filtre = ActiveSheet.FilterMode
 If Filtre = "Faux" Then GoTo suite
 Dim i As Byte
 With ActiveSheet.AutoFilter
     For i = 1 To .Filters.Count
         Cells(1, i).Interior.ColorIndex = xlNone
         If .Filters(i).On = True Then
             Cells(1, i).Interior.ColorIndex = 35
         End If
     Next i
 End With
 suite:
 End Sub
 
Re : signalétique des filtres

Bonsoir,


Appliquer une MFC sur les titres:

-Sélectionner A1:G1
-Format/mise en forme conditionnelle/La formule est
=ChampActif(A1)

Code:
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

Le filtre automatique

JB
 

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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

C
  • Question Question
Réponses
4
Affichages
3 K
clem67
C
Réponses
10
Affichages
3 K
HervéDuval
H
D
Réponses
2
Affichages
6 K
D
S
Réponses
0
Affichages
875
S
Retour