Calcul de jours sur période

Résolu/Fermé
Minimix - 7 oct. 2016 à 10:49
 Minimix - 10 oct. 2016 à 16:03
Bonjour,

Je dois calculer pour plusieurs années (par exemple 2014) le nombre de jours de présence. J'ai écrit cette formule :
=SI(L2>$AN$2;"0";SI(ET(OU(N2="";N2>$AN$2);L2<$AN$1);NB.JOURS.OUVRES($AN$1;$AN$2);SI(L2<$AN$1;NB.JOURS.OUVRES($AN$1;N2);SI(ET(N2="";L2<$AN$2);NB.JOURS.OUVRES(L2;$AN$2);NB.JOURS.OUVRES(L2;N2)))))

L2 : date de début du contrat
N2 : date de fin du contrat
$AN$1 : 01/01/2014
$AN$2 : 31/12/2014

Mon problème est que pour une personne rentrée le 12/07/2002 et sortie le 01/04/2013 j'obtiens un résultat négatif. Je voudrais plutôt avoir un 0 ou rien... Je n'arrive pas a voir où est mon erreur

Merci d'avance de votre aide,
A voir également:

4 réponses

PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 795
7 oct. 2016 à 11:15
Bonjour

La date de sortie est le 01/04/2013 donc 198 jour avant le 01/01/2014
0
Oui. Mais que dois je modifier ou ajouter dans mon formule existante pour qu'il ne prenne pas les négatifs ?
J'ai essayé si date de fin est avant le 01/01/14 alors ne rien mettre, mais ça me donne de nombreuses erreurs sur les autres cas
0
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 795
7 oct. 2016 à 12:09
Bonjour

Essayer ceci pour 2014

=SI($N2<$AN$1;0;SI(ET($L2>=$AN$1;$N2<=$AN$2);NB.JOURS.OUVRES($L2;$N2);SI(ET(L2<AN1;N2<AN2);NB.JOURS.OUVRES(AN1;N2);SI(ET($N2>$AN$1;$N2<=$AN$2);NB.JOURS.OUVRES($N2;$AN$2);SI(ET($L2<$AN$1;$N2>=$AN$2);NB.JOURS.OUVRES($AN$1;$AN$2))))))
0
Si je n'ai pas de date de fin cela me met 0 jours
0
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 795 > Minimix
7 oct. 2016 à 12:37
je m'en suis aperçu voilà la correction

=SI(OU(L2=0;N2=0);0;SI(ET($N2<$AN$1;N2<>0);NB.JOURS.OUVRES($AN1;MAINTENANT());SI(ET($L2>=$AN$1;N2<>0;$N2<=$AN$2);NB.JOURS.OUVRES($L2;$N2);SI(ET(L2<AN1;N2<AN2);NB.JOURS.OUVRES(AN1;N2);SI(ET($N2>$AN$1;$N2<=$AN$2;N2<>0);NB.JOURS.OUVRES($N2;$AN$2);SI(ET($L2<$AN$1;$N2>=$AN$2);NB.JOURS.OUVRES($AN$1;$AN$2)))))))
0
Idem, les personnes sans dates de sortie sont a 0. Mais en plus ça me donne pour une personne sortie en 2013 463 jours
0
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 795 > Minimix
7 oct. 2016 à 15:02
J'espère que je n'ai rien oublié

=SI(OU(L2=0;N2=0);0;SI(ET($N2<$AN$1);0;SI(ET($L2>=$AN$1;$N2<=$AN$2);NB.JOURS.OUVRES($L2;$N2);SI(ET(L2<AN1;N2<AN2);NB.JOURS.OUVRES(AN1;N2);SI(ET($N2>$AN$1;$N2<=$AN$2);NB.JOURS.OUVRES($N2;$AN$2);SI(ET($L2<$AN$1;$N2>=$AN$2);NB.JOURS.OUVRES($AN$1;$AN$2)))))))
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
7 oct. 2016 à 18:27
Bonjour,

autre façon de faire.
Avec juste l'année (2013) en AN2 :
=MAX(0;NB.JOURS.OUVRES(MAX(DATE(AN2;1;1);L2);MIN(DATE(AN2;12;31);N2))) 

eric
0
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 795
8 oct. 2016 à 10:21
Bonjour Minimix

Un fichier exemple avec l'utilisation de la formule d'Eriiic
Pour les date de fin s'il n'y en a pas mettre =MAINTENANT() ( voir N5 dans le fichier )que vous remplacerez par la date du jour de départ

http://www.cjoint.com/c/FJiis4im4Px
0
Merci à tous les 2.

Pour les 2 formules le même problème, ceux sans date de sortie sont égaux à 0.
Du coup j'ai créé 3 colonnes intermédiaires pour que s'il n'y ait pas de date de fin cela mette le 31/12/NN.

Le formule donne donc : =SI($L2="";"";MAX(0;NB.JOURS.OUVRES(MAX(DATE($Z$1;1;1);$L2);MIN(DATE($Z$1;12;31);$P2))))

En Z1 : Année
Et P2 : =SI(N2="";$AQ$2;N2) - AQ étant le 31/12/14.
0