Private Sub Worksheet_Calculate()
Dim i%, d As Object, P As Range, j&, x$
If AutoFilter Is Nothing Then MsgBox "Aucun filtre n'a été créé sur la feuille": Exit Sub
MsgBox IIf(FilterMode, "Il y a des", "Il n'y a pas de") & " données filtrées"
MsgBox "Il y a " & AutoFilter.Filters.Count & " colonnes sur lesquelles il y a un filtre"
For i = 1 To Me.AutoFilter.Filters.Count
If AutoFilter.Filters(i).On Then
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Set P = AutoFilter.Range.Columns(i).Cells
For j = 2 To P.Rows.Count
If Not P(j).EntireRow.Hidden Then 'si la ligne n'est pas masquée
x = P(j)
If x = "" Then x = "<vide>"
d(x) = ""
End If
Next
MsgBox "La colonne " & Split(AutoFilter.Range.Columns(i).EntireColumn.Address(0, 0), ":")(1) & _
" est filtrée" & IIf(d.Count, " sur " & Join(d.keys, ", "), "")
End If
Next i
End Sub