Filtres automatiques : plusieurs critères autorisés sur une colonne
Bonjour, je travaille actuellement sur un tableau qui est filtré automatiquement en fonction de plusieurs critères, voici le code :
Sub Filtre_G5()
With Sheets("Renommés")
crt = .Range("$B$1").Value
If crt <> "" And Not IsError(Application.Match(crt, .Range("A:A"), 0)) Then
.Range("$A$4:$G$4").AutoFilter Field:=1, Criteria1:="=" & .Range("$B$1").Value, Operator:=xlAnd
.Range("$A$4:$G$4").AutoFilter Field:=6, Criteria1:=xlFilterThisMonth, Operator:=xlFilterDynamic
ElseIf crt <> "" And IsError(Application.Match(crt, .Range("A:A"), 0)) Then
.Range("$A$4:$G$4").AutoFilter Field:=1, Criteria1:="=" & .Range("$B$1").Value, Operator:=xlAnd
.Range("$A$4:$G$4").AutoFilter Field:=6, Criteria1:=xlFilterThisMonth, Operator:=xlFilterDynamic
Else
.Range("$A$4:$G$4").AutoFilter Field:=1
' $B$1 est la cellule selon laquelle le fichier sera filtré
' ("$A$4:$G$4") est la plage de cellule des colonnes filtrantes
' Ne pas modifier la range ("A:A")
End If
End With
End SubPlusieurs filtres sont appliqués :
- Filtre sur la colonne 1 en fonction de la cellule B1 --> fonctionne
- Filtre sur la colonne 6 en fonction de la date --> PROBLEME : le tableau se filtre bien en affichant uniquement les date du mois actuel, mais j'aimerais aussi qu'il autorise les cellules vides de cette colonne. Je peux avoir des lignes avec la colonne 1 correspondante à B1 et une colonne 6 soit vide soit avec une date.
J'ai lu sur le net qu'on pouvait utiliser "criteria2=..." mais je n'arrive pas à obtenir quelque chose de fonctionnel...
PS : mon code est surement maladroit... Si vous voyez un moyen de "l'épurer" je suis preneur aussi !
J'ai fait des test avec les commandes "xlOr" and "xlAnd", seul la commande xlOr donne un résultat mais toujours le même problème.
.Range("$A$4:$G$4").AutoFilter Field:=6, Criteria1:=xlFilterThisMonth, Operator:=xlOr, Criteria2=""avec ce code, le tableau est uniquement filtré en fonction des cellules vides, et non les vides ET celles qui contiennent des dates du mois actuel...
Bonjour, je vous ai envoyé le fichier.
(fichier supprimé pour confidentialité, le code final a été quand même mis plus bas)
Bonjour Lockard
Voici le code pour le fichier joint
.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:="=" & crt
.ListObjects("Tableau1").Range.AutoFilter Field:=6, Criteria1:= _
Array("="), Operator:=xlFilterValues, Criteria2:=Array(1, Month(Now()) & "/01/2022")A+
super ça marche parfaitement ! Pour ceux que ça intéresse j'envois le code en entier :
Sub Filtre_G5()
With Sheets("Renommés")
crt = .Range("$B$1").Value
If crt <> "" And Not IsError(Application.Match(crt, .Range("A:A"), 0)) Then
.Range("$A$4:$G$4").AutoFilter Field:=1, Criteria1:="=" & .Range("$B$1")
.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:="=" & crt
.ListObjects("Tableau1").Range.AutoFilter Field:=6, Criteria1:= _
Array("="), Operator:=xlFilterValues, Criteria2:=Array(1, Month(Now()) & "/01/2022")
Else
.Range("$A$4:$G$4").AutoFilter Field:=1
' $B$1 est la cellule selon laquelle le fichier sera filtré
' ("$A$4:$G$4") est la plage de cellule des colonnes filtrantes
' Ne pas modifier la range ("A:A")
End If
End With
End SubMerci beaucoup, je n'aurais pas trouvé tout seul... Je clos le sujet !
Re,
J'aurais dû te poster le code entier, désolé
le code correcte avec un tableau structuré nommé "Tableau1" est celui-ci
Sub Filtre_G5()
With Sheets("Renommés")
crt = .Range("$B$1").Value
If crt <> "" And Not IsError(Application.Match(crt, .Range("A:A"), 0)) Then
.ListObjects("Tableau1").Range.AutoFilter
.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:="=" & crt
.ListObjects("Tableau1").Range.AutoFilter Field:=6, Criteria1:= _
Array("="), Operator:=xlFilterValues, Criteria2:=Array(1, Month(Now()) & "/01/2022")
Else
.ListObjects("Tableau1").Range.AutoFilter
' $B$1 est la cellule selon laquelle le fichier sera filtré
' ("$A$4:$G$4") est la plage de cellule des colonnes filtrantes
' Ne pas modifier la range ("A:A")
End If
End With
End SubA+