"[Date prise de fonction] > " & CLong([Date prise de fonction]) & " ..."
Cette formule compare la date de prise de fonction d'un potentiel successeur à la
date de prise de fonction de l'employé actuel, et non à sa
date de fin de fonction.
Le calcul de la durée de vacance sera donc incorrect. Le critère correct doit utiliser la date de fin pour trouver un successeur qui a commencé
après le départ de l'employé.
Effectivement faut repenser la logique,
Au lieu de demander : "Qui a commencé après mon départ ?", nous devons demander : "Quel est le contrat qui a commencé juste après le mien, chronologiquement ?".
1 2 3 4 5 6 7 8 9 10 11 12
| SELECT
Predecesseur.[Code emploi],
Predecesseur.[Matricule employé],
Predecesseur.[Date prise de fonction],
Predecesseur.[Date fin de fonction],
(SELECT Min(Successeur.[Date prise de fonction])
FROM Feuil1 AS Successeur
WHERE Successeur.[Code emploi] = Predecesseur.[Code emploi]
AND Successeur.[Date prise de fonction] > Predecesseur.[Date prise de fonction]
) AS DateDebutProchainContrat
FROM
Feuil1 AS Predecesseur; |
Résultat pour le poste 610204 : Pour l'employé A (YT000217, début 2015), cette requête trouvera bien la date de début de l'employé B (YT001275, début 2023) et la mettra dans la colonne DateDebutProchainContrat.
Maintenant que nous avons la date de début du contrat suivant, nous pouvons calculer l'écart réel. La formule dans la requête finale devient :
Resultat: IIf([Date fin de fonction] Is Null, "En fonction", IIf([DateDebutProchainContrat] Is Null, Date() - [Date fin de fonction], [DateDebutProchainContrat] - [Date fin de fonction]))
C'est ma dernière tentative, là je fatigue
PS :
Analysons le calcul pour le cas 610204 avec cette nouvelle logique :
- [Date fin de fonction] (30/06/2024) n'est pas nul.
- [DateDebutProchainContrat] (16/10/2023) n'est pas nul.
- Le calcul effectué est : [DateDebutProchainContrat] - [Date fin de fonction]
- Soit : 16/10/2023 - 30/06/2024 = -258 jours
Le résultat est un nombre négatif. Ça indique non seulement qu'il n'y a
pas eu de vacance, mais qu'il y a eu un
chevauchement de 258 jours.
Partager