Bonjour à tous,
Voici mon problème.
J'ai une bdd de mes salariés avec une colonne AN où la formule "=DATEDIF(J2;AUJOURDHUI();"Y")" me renvoie l'ancienneté du salarié en année.
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 relatif à l'ancienneté. Il me renvoie systématiquement 0 résultat.
La comboBox relatif au critère d'ancienneté est alimenté comme ça :
ComboBox3.AddItem "5" (pour filtrer les salariés ayant plus de "5" ans d'ancienneté)
ComboBox3.AddItem "10"
ComboBox3.AddItem "20"
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
ancienneté = ComboBox3.Value
Criteres = Criteres & "(bdd!AN2 >= """ & ancienneté & """) * "
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:AV4"), 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.
Voici mon problème.
J'ai une bdd de mes salariés avec une colonne AN où la formule "=DATEDIF(J2;AUJOURDHUI();"Y")" me renvoie l'ancienneté du salarié en année.
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 relatif à l'ancienneté. Il me renvoie systématiquement 0 résultat.
La comboBox relatif au critère d'ancienneté est alimenté comme ça :
ComboBox3.AddItem "5" (pour filtrer les salariés ayant plus de "5" ans d'ancienneté)
ComboBox3.AddItem "10"
ComboBox3.AddItem "20"
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
ancienneté = ComboBox3.Value
Criteres = Criteres & "(bdd!AN2 >= """ & ancienneté & """) * "
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:AV4"), 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.