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

Fermé
Fitz_Chev - Modifié par jordane45 le 30/03/2016 à 00:16
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 - 31 mars 2016 à 13:49
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.

A voir également:

2 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
30 mars 2016 à 13:08
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
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
31 mars 2016 à 13:49
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