Filtre élaboré avec critère entre 2 dates

fred777

XLDnaute Junior
Bonjour à tous,

Voici mon problème.

J'ai une bdd de mes salariés avec une colonne AY où une formule me renvoie une date de préavis pour le renouvellement des contrats.

J'ai un formulaire qui me permet de filtrer mes salariés selon différents critères (type de contrat, age, lieu de travail, etc ...)

Ce formulaire fonctionne très bien sauf pour mon critère "date préavis". Il me renvoie systématiquement 0 résultat."Aucun nom ne répond à tous vos critères"

J'ai 2 TextBox : TextBox1 (date de début) et TextBox2 (date de fin) ce qui me permet de demander tous les salariés dont les dates de renouvellement de contrat entre date1 et date2 (Par exemple je veux filtrer tous les renouvellement de contrats entre le 01/10/2014 et le 31/10/2014)


Mon formulaire de critère de selection se présente comme suit :

Private Sub CmdVoir_Click()


'Nom jeune fille
If ComboBox2.ListIndex <> -1 Then
jeunefille = ComboBox2.Value
Criteres = Criteres & "(bdd!AQ2 = """ & jeunefille & """) * "
End If

'Statut
If CboStatut.ListIndex <> -1 Then
statut = CboStatut.Value
Criteres = Criteres & "(bdd!H2 = """ & statut & """) * "
End If

'Type de contrat
If CboNatcontrat.ListIndex <> -1 Then
contrat = CboNatcontrat.Value
Criteres = Criteres & "(bdd!AA2 = """ & contrat & """) * "
End If

'Affectation
If CboAffectation.ListIndex <> -1 Then
Affectation = CboAffectation.Value
Criteres = Criteres & "(bdd!X2 = """ & Affectation & """) * "
End If

'Horaire
If CboHorairecont.ListIndex <> -1 Then
Horairecont = CboHorairecont.Value
Criteres = Criteres & "(bdd!Q2 = """ & Horairecont & """) * "
End If

'Ancienneté
If ComboBox3.ListIndex <> -1 Then
anciennete = ComboBox3.Value
Criteres = Criteres & "(bdd!AN2 " & anciennete & ") * "
End If

'Début de contrat
If TextBox1.Value <> "" Then
Datedebut = TextBox1.Value
Criteres = Criteres & "(bdd!AY2 >= " & Datedebut & ") * "
End If

'Fin de contrat
If TextBox2.Value <> "" Then
Datefin = TextBox2.Value
Criteres = Criteres & "(bdd!AY2 <= " & Datefin & ") * "
End If

'à ce stade le critère se termine par *... On ajoute donc un 1. Un critère renvoie normalement
'vrai ou faux. En le multipliant par 1 il renvoie 1 ou 0 ce qui est inter^rété de la même façon par excel.
Criteres = "=" & Criteres & "1"
Sheets("filtre").Range("A2").Value = Criteres

'on utilise ensuite les critères de choix dans un filtre élaboré sur une feuille masquée
Sheets("filtre").Activate
Range("zonebdd").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A1:A2"), CopyToRange:=Range("A4:AZ4"), Unique:=False


'Si aucun nom ne correspond aux critères
If Range("filtre!A5").Value = "" Then
MsgBox ("Aucun nom ne répond à tous vos critères")
'S'il y a plus d'un nom répondant au critère autrement dit si A5 non vide
'on réaffiche les recettes dans une zone de liste pour en faire choisir une à l'utilisateur
'pour cela on nomme "Fiches Filtrées" la plage contenant les noms sélectionnés.
'Il y a plusieurs façons de faire pour indiquer les coordonnées de cette plage. Ici j'ai choisi
'la fonction décaler (offset en VBA)

ElseIf Range("filtre!A5").Value <> "" Then
ActiveWorkbook.Names.Add Name:="Fiche", RefersToR1C1:= _
"=OFFSET(filtre!R5C2,,,COUNTA(filtre!C2)-1)"
Unload frmCriteres
frmSelect.Show

'sinon on récupère son numéro de ligne et on affiche la fiche salarié dans le userform frmFiche
Else
nom = Range("A5").Value
With Sheets("bdd").Range("A:A")
Set c = .Find(Titre, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then Lig = c.Row
End With
frmFiche.Show
End If

End Sub

Je ne comprend pas pourquoi tous les autres critères fonctionnent et pas celui-ci. Je cherche depuis des semaines et m'arrache les cheveux.

Merci de vos lumières.
 

Staple1600

XLDnaute Barbatruc
Re : Filtre élaboré avec critère entre 2 dates

Bonjour à tous

fred777
Je ne comprend pas pourquoi tous les autres critères fonctionnent et pas celui-ci.
Je cherche depuis des semaines et m'arrache les cheveux.

Paraphrasons, fred

Je ne comprend pas pourquoi fred777, membre inscrit depuis 2010 ne songe pas à joindre un fichier exemple avec le code VBA dedans.
Je cherche depuis des semaines pourquoi souvent des membres anciennement inscrits oublient de joindre une PJ et m'arrache pas les cheveux pour autant car je n'en ai plus assez :)
 

fred777

XLDnaute Junior
Re : Filtre élaboré avec critère entre 2 dates

Bonjour Staple1600 et Boisgontier,

Ci-joint mon fichier.

Boisgontier, merci pour le lien mais je l'ai vu, c'est très interressant mais je ne parviens pas à l'adapter à mon fichier même en le tournant dans tous les sens.

Merci d'avance de votre aide.
 
Dernière modification par un modérateur:

Staple1600

XLDnaute Barbatruc
Re : Filtre élaboré avec critère entre 2 dates

Bonsoir à tous,_____________________________ EDITION II: Bonsoir eriiiic

fred777
Dans ton premier message, tu causes VBA
(cf Private Sub CmdVoir_Click() )
Mais tu joins un fichier *.xlsx qui comme tu le sais ne peut pas contenir de code VBA !
(ll faut soit un *.xls soit un *.xlsm)
A te relire donc et cette fois-ci avec un fichier exemple pleinement exploitable ;)

fred777:
On attend toujours que tu repostes la nouvelle version de ton fichier sans données confidentielles.
(Mets des NOM1 PRENOM1 ect...)

EDITION III : suppression de l'EDITION I puisque suppression de la PJ non anonimysée.
 
Dernière édition:

fred777

XLDnaute Junior
Re : Filtre élaboré avec critère entre 2 dates

Bonjour le forum,

Merci de vous pencher sur mon problème.

Je vous joins le fichier anonymisé et au bon format.

Merci d'avance de vos précieux conseils.
 
Dernière modification par un modérateur:

Staple1600

XLDnaute Barbatruc
Re : Filtre élaboré avec critère entre 2 dates

Bonsoir à tous

Fred777
On attends que tu anonymise ton classeur !!!
Voir la ligne 5 de la feuille filtre !
Je t'avais déjà signalé cela le 10/10/2014

Faudra-til que le modérateur intervienne encore cette fois-ci...

NB: Il n'y a de plus aucun userform (formulaire) dans ton classeur ni aucun code VBA.
Autant de dilettantisme ne donne pas vraiment envie de t'aider...:rolleyes:
 
Dernière édition:

David Aubert

XLDnaute Barbatruc
Administrateur
Modérateur
Re : Filtre élaboré avec critère entre 2 dates

Bonjour,

Fred, j'ai à nouveau retiré ton fichier car il y avait encore des données personnelles : noms de jeunes filles, adresses, num de sécurité sociale,...
Tu risques de te faire virer par ton employeur si tu n'es pas plus attentif.
Je t'explique :
Google indexe le contenu des fichiers Excel.
Donc si une personne listée dans ce ficher tape son nom dans Google, Google va lui indiquer ce fichier.
Compte tenu du contenu du fichier, la personne en question pourrait en déduire que ce fichier vient de la société dans laquelle tu travailes et se plaindre auprès de ton employeur (service juridique si il y en a un).
Le service juridique va vouloir savoir qui dans ta societe a pu faire une telle bêtise et il va accessoirement me contacter en me demandant de supprimer ce fichier. Ta société est juridiquement responsable de tes actes en tant que salarié.
Le service juridique va mener sa petite enquête pour savoir qui a bien pu poster ce fichier avec un tel contenu sans se poser de questions.
L'employé en question pourrait être licencié pour faute grave.

Ce n'est pas juste un exemple sortant de mon imagination.

C'est du vécu! :(

Bonne journée, sans rancune.

David
 

fred777

XLDnaute Junior
Re : Filtre élaboré avec critère entre 2 dates

Bonjour,

Autant pour moi, ce n'est pas ce fichier là que je devais envoyer. Oups, erreur de ma part.

Voici le bon fichier

Merci encore au forum.
 

Pièces jointes

  • Formulaire.zip
    256.2 KB · Affichages: 100
  • Formulaire.zip
    256.2 KB · Affichages: 80
  • Formulaire.zip
    256.2 KB · Affichages: 142

Staple1600

XLDnaute Barbatruc
Re : Filtre élaboré avec critère entre 2 dates

Bonsoir


Et la feuille divers: pourquoi n'est-elle pas anonymisée ?

J'ai 2 TextBox : TextBox1 (date de début) et TextBox2 (date de fin)
Non, tes TextBox se nomment TextBox2 et TextBox3

L'imprécision en VBA génère souvent des erreurs.

D'ailleurs, tu aurais nommer l'userform qui te pose problème (car dans ta PJ, il y en 5...)

NB: Pourquoi la présence d'un module de classe des plus bizarre ?

Sinon comment se fait-il que date début et dayte fin pointent sur la même cellue ? (AY2)
Personnellement pour les filtres sur dates, j'utilises CLng
Essaies pour voir ce que cela donne
Code:
'Début de contrat
 If TextBox2.Value <> "" Then
 Datedebut = TextBox2.Value
 Criteres = Criteres & "(bdd!AY2 >= """ & CLng(TextBox2) & """) * "
End If

'Fin de contrat
 If TextBox3.Value <> "" Then
 Datefin = TextBox3.Value
 Criteres = Criteres & "(bdd!AY2 <= """ & CLng(TextBox3) & """) * "
End If


PS: J'espère que ton fichier est déclaré à la CNIL
 

fred777

XLDnaute Junior
Re : Filtre élaboré avec critère entre 2 dates

Bonjour Staple1600,

La feuille "Divers" est bien anonymisée. Les rues existent, mais les n° de rue sont farfelues et ne correspondent à aucune adresse précise.

Le formulaire est nommé, c'est "frmCriteres".

En réalité, ce fichier est beaucoup trop lourd, du coup j'ai retiré un certain nombre d'éléments, et notamment des formulaires, mais qui ne gène en rien l'éventuelle solution à mon problème.

Effectivement, date de début et date de fin pointe sur la même colonne AY. Dans cette colonne figure la date limite pour le renouvellement de CDD. En fait je souhaiterai filtrer les contrats à renouveler pour un mois donné. Par exemple, je voudrais avoir l'ensemble des contrats à renouveler entre le 1er janvier 2015 et le 30 janvier 2015.

J'ai testé ton code, mais j'ai une erreur "Incompatibilité de type".

Merci d'avance.
 

Staple1600

XLDnaute Barbatruc
Re : Filtre élaboré avec critère entre 2 dates

Bonjour à tous


Pourtant l'utilisation de CLng avec un filtre, fonctionne.
Voir ce petit test ci-dessous
Code:
sub test()
Dim a As Date, b As Date
a = "20/10/2014"
b = "28/10/2014"
With Range("A1:C16")
.AutoFilter Field:=2, Criteria1:=">=" & CLng(a), Operator:=xlAnd
.AutoFilter Field:=3, Criteria1:="<=" & CLng(b), Operator:=xlAnd
End With
End Sub

01FFil.png
 

fred777

XLDnaute Junior
Re : Filtre élaboré avec critère entre 2 dates

Merci Staple1600 de te pencher sur mon problème.

Ce code ne fonctionne pas chez moi. C'est peut-être du au fait que tu mets une colonne pour date de début, et une colonne pour date de fin. Moi je n'ai qu'une seule colonne AY (correspondant au date de renouvellement). En fait je voudrai que tous les mois je puisse sortir la liste des contrats à renouveler.

Je ne sais pas si je suis claire !?

En tout cas merci de m'aider.
 

Discussions similaires

Réponses
4
Affichages
165

Statistiques des forums

Discussions
311 740
Messages
2 082 049
Membres
101 882
dernier inscrit
XaK_