Excel : Addition de jours ouvrables (lu-sa)

Résolu
Michel -  
 Michel -
Bonjour,

Je recherche un moyen d'ajouter à une date x (A2) 12 jours ouvrables (du lundi au samedi) et non ouvrés (lundi au vendredi) comme le propose la formule SERIE.JOUR.OUVRE.
Je tiens comte des jours fériés qui ne sont pas ouvrables.

Pour le moment, j'ai réussi à faire ceci qui me donne le résultat voulu mais cela prend énormément de temps à s'exécuter :

J'utilise des formules nommées :
zero : =Feuil1!$A2
un : =zero+SI(OU(JOURSEM(zero+1)=1;NB.SI(feries;zero+1));SI(OU(JOURSEM(zero+2)=1;NB.SI(feries;zero+2));3;2);1)
deux : =un+SI(OU(JOURSEM(un+1)=1;NB.SI(feries;un+1));SI(OU(JOURSEM(un+2)=1;NB.SI(feries;un+2));3;2);1)
trois : =deux+SI(OU(JOURSEM(deux+1)=1;NB.SI(feries;deux+1));SI(OU(JOURSEM(deux+2)=1;NB.SI(feries;deux+2));3;2);1)
quatre : =trois+SI(OU(JOURSEM(trois+1)=1;NB.SI(feries;trois+1));SI(OU(JOURSEM(trois+2)=1;NB.SI(feries;trois+2));3;2);1)
cinq : =quatre+SI(OU(JOURSEM(quatre+1)=1;NB.SI(feries;quatre+1));SI(OU(JOURSEM(quatre+2)=1;NB.SI(feries;quatre+2));3;2);1)
six : =cinq+SI(OU(JOURSEM(cinq+1)=1;NB.SI(feries;cinq+1));SI(OU(JOURSEM(cinq+2)=1;NB.SI(feries;cinq+2));3;2);1)
sept : =six+SI(OU(JOURSEM(six+1)=1;NB.SI(feries;six+1));SI(OU(JOURSEM(six+2)=1;NB.SI(feries;six+2));3;2);1)
huit : =sept+SI(OU(JOURSEM(sept+1)=1;NB.SI(feries;sept+1));SI(OU(JOURSEM(sept+2)=1;NB.SI(feries;sept+2));3;2);1)
neuf : =huit+SI(OU(JOURSEM(huit+1)=1;NB.SI(feries;huit+1));SI(OU(JOURSEM(huit+2)=1;NB.SI(feries;huit+2));3;2);1)
dix : =neuf+SI(OU(JOURSEM(neuf+1)=1;NB.SI(feries;neuf+1));SI(OU(JOURSEM(neuf+2)=1;NB.SI(feries;neuf+2));3;2);1)
onze : =dix+SI(OU(JOURSEM(dix+1)=1;NB.SI(feries;dix+1));SI(OU(JOURSEM(dix+2)=1;NB.SI(feries;dix+2));3;2);1)
douze : =onze+SI(OU(JOURSEM(onze+1)=1;NB.SI(feries;onze+1));SI(OU(JOURSEM(onze+2)=1;NB.SI(feries;onze+2));3;2);1)

Quelqu'un aurait-il une solution pour alléger ce code ?

info : A2 = date ; feries = feuille avec les jours fériés

Merci
Michel

3 réponses

  1. tontong Messages postés 2575 Date d'inscription   Statut Membre Dernière intervention   1 064
     
    Bonjour,
    Essayez cette formule matricielle proposée par Jacques Boisgontier:

    A2 contient la date et B2 le nombre de jours ouvrés à ajouter, le champ des jours fériés est nommé " fériés"
    =PETITE.VALEUR(SI((JOURSEM(A2+LIGNE(1:50);2)<7)*(NB.SI(fériés;A2+LIGNE(1:50))=0);A2+LIGNE(1:50));B2)
    valider avec maj+ctrl+entrée
    0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Bonjour,

    Essaies :
    =NB.JOURS.OUVRES(Date_de_début;Date_de_fin;Jours_fériés)+SOMMEPROD(1*(JOURSEM(LIGNE(INDIRECT(Date_de_début&":"&Date_de_fin)))=7))-SOMMEPROD((JOURSEM(Jours_fériés)=7)*1;(Jours_fériés>=Date_de_début)*1;(Jours_fériés<=Date_de_fin)*1)

    C'est à dire :
    =Jours_ouvrés+Nb_samedis-Nb_samedis_fériés
    avec :
    Jours_ouvrés=NB.JOURS.OUVRES(Date_de_début;Date_de_fin;Jours_fériés)
    Nb_samedis=SOMMEPROD(1*(JOURSEM(LIGNE(INDIRECT(Date_de_début&":"&Date_de_fin)))=7))
    Nb_samedis_fériés=SOMMEPROD((JOURSEM(Jours_fériés)=7)*1;(Jours_fériés>=Date_de_début)*1;(Jours_fériés<=Date_de_fin)*1)

    D'après d'une formule de Mytå

    Cordialement
    Patrice
    0
    1. tontong Messages postés 2575 Date d'inscription   Statut Membre Dernière intervention   1 064
       
      Bonjour Patrice 33740,
      Il me semble que le résultat cherché est une date située 12 jours après la date en A2. On ne cherche pas un nombre de jours?
      Autre remarque: Nb_samedis_fériés=SOMMEPROD(1*(JOURSEM(Jours_fériés)=7)) va compter tous les samedis fériés même ceux qui ne sont pas compris entre la date de début et la date de fin.
      Mais je peux me tromper ça arrive souvent ;-)
      Attendons des nouvelles de Michel.
      0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
       
      Oups! j'avais trop rapidement !

      PS : J'ai corrigé le Nb_samedis_fériés pour tenir compte de ta remarque

      Cordialement
      Patrice
      0
  3. Michel
     
    Merci à vous deux,

    Devant trouver la date de fin, j'ai adapté comme ceci :

    =PETITE.VALEUR(SI((JOURSEM(A2+LIGNE($1:$50);2)<7)*(NB.SI(feries;A2+LIGNE($1:$50))=0);A2+LIGNE($1:$50));12)

    valider avec maj+ctrl+entrée

    D'après mes premiers contrôles, ça semble bien fonctionner.

    bàv
    Michel
    0