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

Fitz_Chev -  
Frenchie83 Messages postés 2254 Statut Membre -
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

  1. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
    1. Fitz_Chev
       
      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
  2. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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