Bonjour à tous.
J'ai écrit une procédure qui permet d'indiquer pour chaque colonne filtrée, la valeur du filtre. Cela fonctionne bien, mais pas en automatique (Je suis obligé d'avoir recours à un bouton dans la barre d'outils qui actionne une macro). Je cherche à rendre cette macro automatique, c'est à dire à chaque changement du filtre. Cela est-il possible, et comment ?
Ci- dessous le code que j'ai écrit.
Dim f As Filter
Dim w As Worksheet
Sub Filtre()
Set w = ActiveSheet
If w.AutoFilterMode Then
With w.AutoFilter
currentFiltRange = .Range.Address
MaCol = Range(currentFiltRange).Column
NbCol = Range(currentFiltRange).Columns.Count
MaLigne = Range(currentFiltRange).Row
If MaLigne = 1 Then
Rows("1:1").Select
Selection.Insert Shift:=xlDown
currentFiltRange = .Range.Address
MaLigne = Range(currentFiltRange).Row
End If
' For i = 0 To (NbCol - 1)
For Each f In w.AutoFilter.Filters
' With .Filters()
If f.On Then
c1 = f.Criteria1
If f.Operator <> 0 Then
c2 = f.Criteria2
If f.Operator = 1 Then
op = "ET"
Else
op = "OU"
End If
Range(Cells(MaLigne - 1, MaCol), Cells(MaLigne - 1, MaCol)).Formula = "'" & c1 & " " & op & " " & c2
Range(Cells(MaLigne - 1, MaCol), Cells(MaLigne - 1, MaCol)).Font.ColorIndex = 3
Else
Range(Cells(MaLigne - 1, MaCol), Cells(MaLigne - 1, MaCol)).Formula = "'" & c1
Range(Cells(MaLigne - 1, MaCol), Cells(MaLigne - 1, MaCol)).Font.ColorIndex = 3
End If
Else
Range(Cells(MaLigne - 1, MaCol), Cells(MaLigne - 1, MaCol)).Clear
End If
MaCol = MaCol + 1
Next
End With
' Range(Cells(MaLigne - 1, MaCol), Cells(MaLigne - 1, MaCol + NbCol - 1)).Font.ColorIndex = 3
Else
Range(Cells(MaLigne - 1, MaCol), Cells(MaLigne - 1, MaCol + NbCol - 1)).Clear
Exit Sub
End If
If w.AutoFilterMode Then
With w.AutoFilter
End With
Else
Range("B1:B1").Clear
End If
End Sub
Merci d'avance.