Calcul de jours sur période

Résolu
Minimix -  
 Minimix -
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,

4 réponses

  1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
     
    Bonjour

    La date de sortie est le 01/04/2013 donc 198 jour avant le 01/01/2014
    0
    1. Minimix
       
      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
  2. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
     
    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
    1. Minimix
       
      Si je n'ai pas de date de fin cela me met 0 jours
      0
      1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835 > Minimix
         
        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
    2. Minimix
       
      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
      1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835 > Minimix
         
        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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  4. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
     
    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
    1. Minimix
       
      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