Filtre automatique sur dates

Bonsoir à tous,

Dans la colonne C j’ai les dates de "Début" et dans la colonne D les dates de "Fin".

En VBA, comment appliquer un filtre automatique pour sélectionner les dates renfermant les dates allant du 01/12/2012 au 31/12/2012 ?

.AutoFilter Field:=3, Criteria1:=">=" & ???
.AutoFilter Field:=4, Criteria1:="<=" & ???
.AutoFilter Field:=6, Criteria1:="CAI"

Un exemple en PJ.

Merci d’avance.

114filtreauto.zip (8.97 Ko)

Bonsoir

Une explication

Comment tu retrouve un enregistrement avec date début "28/12/2012" et date de fin "04/01/2013" alors que tu cherches que les enregistrements entre le "01/12/2012" et le "31/12/2012"

Bonjour Banzai64,

Une petite explication :

J'ai trois cas de figure pour extraire une durée avec JourDépart et JourFin, limité par le 01/01/2012 comme borne inférieure et par le 31/12/2012 comme borne supérieure :

1) Un étendu qui commence le mois passé et prend fin le mois en cours.

Exp : du 25/11/2012 au 24/12/2012

Alors : JourDépart = 01/01/2012, JourFin = 24/12/2012

Durée = 24 j dans le mois de décembre.

2) Un étendu qui commence le mois en cours et prend fin le mois même.

Exp : du 02/12/2012 au 17/12/2012

Alors : JourDépart = 02/12/2012, JourFin = 17/12/2012

Durée = 16 j dans le mois de décembre.

3) Un étendu qui commence le mois en cours et prend fin le mois suivant.

Exp : du 28/12/2012 au 17/12/2012

Alors : JourDépart = 28/12/2012, JourFin = 31/12/2012

Durée = 4 j dans le mois de décembre.

En résumé, je ne définirais les extrémités de ma durée, depuis les étendus de dates, qu'avec les jours communs du mois de décembre et ceux des jours des étendus (les intersections des jours).

J’aimerais ajouter une condition dans le critère du champ 3 pour m’extraire les dates en colonne C qui ont le mois égal ou inférieur au mois en cours (<=12), et dans le critère du champ 4 pour m’extraire les dates en colonne D qui ont le mois égal ou supérieur au mois en cours (>=12).

Dans la colonne C, j’aurais des dates avec le mois de novembre (??/11/2012) et décembre (??/12/2012).

Dans la colonne D, j’aurais des dates avec le mois de décembre (??/12/2012) et janvier 2013 (??/01/2013).

Comment résoudre cette problématique ?

Merci d’avance.

Bonjour

Question simple au départ

Banzai64 a écrit :

Comment tu retrouve un enregistrement avec date début "28/12/2012" et date de fin "04/01/2013" alors que tu cherches que les enregistrements entre le "01/12/2012" et le "31/12/2012"

La réponse est :

Il faut tous les enregistrements qui ont la date départ (colonne C) ...( à toi de compléter) .....et la date de fin (colonne D) ...( à toi de compléter) ....

Je ne demande que ça

Précises si tu veux mais en te servant uniquement que des dates recherchées

Merci de ta réponse

Bonjour,

Banzai64 a écrit :

Il faut tous les enregistrements qui ont la date départ (colonne C) (>=01/12/2012) et la date de fin (colonne D) (<=31/12/2012)

Est-ce j'ai bien répondu à ta question ?

Bonjour

C'était tout ce que je demandais

Voici ton fichier

174apt-filtre-v001.zip (14.91 Ko)

Re,

Merci Banzai64.

J'ai toujours un filtre nul.

Parce que le 28/12/2012 est supérieur au 01/12/2012, mais ce n'est pas la cas pour le 31/12/2012 par rapport au 04/01/2013.

Et c'est cela que j'essaye d’éviter !

N'y a-t-il pas moyen d'avoir ces deux dates dans le filtre ou par d'autre moyen s'il existe ?

Merci.

Bonjour

Ta question était

apt a écrit :

En VBA, comment appliquer un filtre automatique pour sélectionner les dates renfermant les dates allant du 01/12/2012 au 31/12/2012 ?.

Je t'ai fait un filtre qui sélectionne les dates de début (colonne C) >= au "01/12/2012" et les dates de fin (Colonne D ) <= au "31/12/2012"

Je n'y peux rien si aucun enregistrement ne correspond à ces critères

Je ne sais pas ce que tu cherches

D'après ce que tu avais marqué dans ton fichier, il fallait filtrer

Colonne C : >= "31/12/2012"

Colonne D : <= "04/01/2013"

Qui ne correspond plus du tout à ta demande initiale

C'est pour cela que je t'ai questionné pour expliquer le résultat voulu de ton filtre

Moi je veux bien essayer de t'aider, mais si tu n'es pas logique (d'après moi) entre tes questions et tes réponses voulues, je ne sais comment faire

Je suis désolé si je comprends pas

Bonsoir,

Banzai64 a écrit :

C'est pour cela que je t'ai questionné pour expliquer le résultat voulu de ton filtre

Je crois que l'application d'un filtre pour les deux colonnes en même temps ne donne pas le résultat voulu.

Je pense qu'il faut trouver une autre solution.

voila une autre explication qui peut permettre de nous faciliter la tache :

La période à extraire, devra être entre le 01/12/2012 comme limite inférieure et le 31/12/2012 comme limite supérieure.

Alors, je n’aimerais travailler qu'avec les jours du mois de décembre.

Les jours avant le 01/12/2012 et après le 31/12/2012 seront ignorés.

Chaque définition d'un étendu, pour les trois cas, est limitée par les 31 jours du mois de décembre.

Je peux, autrement, poser cette petite question :

Par exemple, dans une période qui va du 28/12/2012 au 04/01/2013, combien il y a de jours qui appartiennent au mois de décembre à partir du 28/12/2012 ?

Merci d'avance.

Bonjour

apt a écrit :

Je crois que l'application d'un filtre pour les deux colonnes en même temps ne donne pas le résultat voulu.

Tu veux dire le résultat que tu veux

Regardes si ce n'est pas cela que tu cherches

Sub Filtre()
Dim NbLg As Long

  If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
  NbLg = Range("A2").End(xlDown).Row
  Range("A1:F" & NbLg).AutoFilter field:=3, Criteria1:=">=" & CSng(CDate("01/12/2012")), Operator:=xlAnd, Criteria2:="<=" & CSng(CDate("31/12/2012"))
  Range("A1:F" & NbLg).AutoFilter field:=6, Criteria1:="CAI"
End Sub

Bonsoir,

Voila une nouvelle version, avec filtrage en deux fois, sur la colonne C puis sur la colonne D, pour remplir un deuxième tableau.

Je bute pour trouver comment faire cela, mais c'est l'idée qui me vient à la tête en ce moment

J'espère que l'exemple joint sera plus explicite

15filtre-v002.zip (17.18 Ko)

Bonsoir

Ce n'est pas un filtre automatique qu'il te faut dans ce cas, mais un filtre élaboré

La condition colonne C >= "01/01/12" OU la colonne D <= "31/12/2012"

C'est ce "ou" qui manquait

Désolé d'avoir mis du temps à comprendre

Le filtre se sert du mois en cellule J1

31apt-filtre-v003.zip (21.42 Ko)

Merci Banzai64,

Ton code marche très bien

Reste, comment ajouter un traitement pour compléter le deuxième tableau avec les dates dans les cellules marquées en vert ?


Merci Banzai64,

Ton code marche très bien

Reste, comment ajouter un traitement pour compléter le deuxième tableau avec les dates dans les cellules marquées en vert ?

Bonjour

A tester

42apt-filtre-v004.zip (24.11 Ko)

Bonsoir Banzai64,

Merci pour le code.

j'ai une question :

Pourquoi dans ton code, le filtre ne déclenche pas une erreur sur la zone d'extraction puisque celle-ci , en M1:N1, n'a pas les en-têtes "Début" et "Fin" avant l'extraction ?

Bonjour

Le filtre (zone d'extraction) est sur la plage C1:D12 qui contient les entêtes

Le filtre recopie les entêtes en M1:N1

Je ne suis pas spécialiste des filtres et surtout pas plus royaliste que le roi, donc dans l'absolu, si cela fonctionne, que demander de plus

Surement que quelqu'un à une explication

Bonsoir,

Dans l'exemple en PJ, le filtre déclenche l'erreur suivante :

Erreur d'exécution '1004':

Nom de champ introuvable ou incorrect dans la plage d'extraction.

Dans la ligne :

    Range("A2:F" & NbLg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
                                        Range("K1:L2"), Unique:=False, CopyToRange:=Range("M1:N1")

Merci.

21apt-filtre-v005.zip (15.65 Ko)

Bonjour

C'est normal (c'est compliqué les filtres)

Tu filtres 6 colonnes (A à F) que tu veux en mettre sur 2 colonnes (M et N)

ça ne se passe pas comme ça chez Mac Filtre

Pour récupérer certaines colonnes il faut que tu notes le nom des colonnes dans la zone de réception dans le cas ou ce ce tu récupères à moins de colonnes que l'origine

Dans ton cas notes Début Fin en M1:N1

Si ton Tableau origine ne contenait que 2 colonnes ce n'était pas la peine de noter

Si tu voulais récupérer tout ton tableau filtré soit tu notes la colonne de recopie (Exemple M1) soit tu notes toutes les colonnes (Exemple M1:R1")

Bonjour Banzai64,

Banzai64 a écrit :

Si ton Tableau origine ne contenait que 2 colonnes ce n'était pas la peine de noter

C'est bien compris maintenant la déférence

Merci encore.

Rechercher des sujets similaires à "filtre automatique dates"