Problème de filtre avec plusieurs critères VBA.

Fermé
Signaler
-
Messages postés
2231
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
21 novembre 2021
-
Bonjour,

J'ai un soucis tout bête mais je m'arrache les cheveux dessus depuis le début de l'après midi donc je viens vous demander un peu d'aide, car malré mes recherches, je ne trouve pas de réponse à mon problème.

J'ai un tableau dans lequel je veux filtrer, en VBA, les date contenues dans la colonne qui sont entre deux dates données. Jusque là pas de soucis, j'ai résolu mon soucis de format de date en passant par un Cdate, à mettre en place mon filtre pour que ça prenne entre les deux date, MAIS j'ai aussi besoin des cases vides, et là, je bloque!
Voilà ma ligne qui est en débug et je ne comprends pas pourquoi:
ActiveSheet.Range("$A$3:$AN" & derlig).AutoFilter Field:=14, Criteria1:=">=" & startdate2, Operator:=xlAnd, Criteria2:="<=" & enddate2, Operator:=xlOr, Criteria3:="="


Pour vous donner une idée, cette ligne s'intègre juste après ce bout de code (pas forcement très joli mais fonctionnel):
derlig = Range("A65536").End(xlUp).Row
saisie_date:
    Date_1 = InputBox(Chr(13) & Chr(10) & Chr(13) & Chr(10) & " Saisissez la date du DEBUT de periode de la prime conquête(format JJ/MM/AAAA)", "Saisie de la date", Format(Date, "dd/mm/yyyy"))
    If Date_1 = "" Then
        Exit Sub
    End If
    If Not IsDate(Date_1) Then
        MsgBox "Format de date saisie incorrect !"
        GoTo saisie_date
    End If
    If Date_1 <> Format(Date_1, "dd/mm/yyyy") Then
        MsgBox "le format doit être jj/mm/aaaa !"
        GoTo saisie_date
    End If
    Date_2 = InputBox(Chr(13) & Chr(10) & Chr(13) & Chr(10) & " Saisissez la date de la FIN de periode de la prime conquête(format JJ/MM/AAAA)", "Saisie de la date", Format(Date, "dd/mm/yyyy"))
    If Date_2 = "" Then
        Exit Sub
    End If
    If Not IsDate(Date_2) Then
        MsgBox "Format de date saisie incorrect !"
        GoTo saisie_date
    End If
    If Date_2 <> Format(Date_2, "dd/mm/yyyy") Then
        MsgBox "le format doit être jj/mm/aaaa !"
        GoTo saisie_date
    End If
    
StartDate = CDate(Format(Date_1, "dd/mm/yyyy"))
EndDate = CDate(Format(Date_2, "dd/mm/yyyy"))
Dim startdate2 As Single
startdate2 = StartDate
Dim enddate2 As Single
enddate2 = EndDate


Merci pour votre aide, je suis quasi sur que mon soucis viens d'Operator mais n'étant pas trop doué sur VBA, je m'en remet à vous.

2 réponses

Messages postés
2231
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
21 novembre 2021
332
Bonjour
Comme ceci peut-être:
Startdate = ">=" & Format(Date_1, "dd/mm/yyyy")
enddate = "<=" & Format(Date_2, "dd/mm/yyyy")
ActiveSheet.Range("$A$3:$AN" & derlig).AutoFilter Field:=1, Criteria1:=Startdate, Operator:=xlAnd, Criteria2:=enddate

Cdlt
0
Merci, mais c'est sur le critère ligne vide que je bloque, cette ligne sans le dernier critère fonctionne très bien:

ActiveSheet.Range("$A$3:$AN" & derlig).AutoFilter Field:=14, Criteria1:=">=" & startdate2, Operator:=xlAnd, Criteria2:="<=" & enddate2


Je voudrais juste ajouter un troisième critère cellule vide
0
Messages postés
2231
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
21 novembre 2021
332
Bonjour
Avec cette méthode ça fonctionne.
Avant d'appliquer le filtre, remplacez les cellules vides de la colonne à filtrer par une valeur quelconque (un signe particulier: %; $, etc..).
Attention au format de date (mm/dd/yyyy)

    Startdate = Format(Date_1, "mm/dd/yyyy")
    Enddate = Format(Date_2, "mm/dd/yyyy")
    ActiveSheet.Range("$A$3:$AN" & derlig).AutoFilter Field:=14, Criteria1:=Array( _
        "$"), Operator:=xlFilterValues, Criteria2:=Array(2, Startdate, 2, Enddate)

A tester
Cdlt
0