Additionner une date à un nbre de jours ouvrés...

AGLAS

XLDnaute Nouveau
Bonjour, Bonsoir le forum,

Je cherche le moyen de déterminer une date calculée sur la base d'une date de départ augmentée par un nombre de jours ouvrés.

J'ai d'abord pensé que la fonction SERIE.JOUR.OUVRE(date_début;nb_jours;jours_fériés) était parfaite pour ce faire, mais j'ai constaté que lorsque nb_jours n'est pas un entier, il est tronqué ; autrement dit, si je souhaite additionner à ma date de départ 1,5 jour par ex. alors, les 0,5 jours sont ignorés. C'est franchement décevant, car un projet ne s'estime pas uniquement en jours pleins, mais aussi en demi-journées, voire en heures. Y aurait-il une astuce pour contourner le pb ? Je n'ai trouvé aucune info sur le sujet par ailleurs... reste le forum... (sait-on jamais). :)
 

andré

XLDnaute Barbatruc
Salut,

Petit essai, qui m'a l'air de fonctionner, mais vérifie toujours avant de te réjouir trop vite (lol).

A1 : 01.02.05 11:00
Format : jj.mm.aa hh:mm

A2 : 7.25
Format standard

B1 : =SERIE.JOUR.OUVRE(A1;A2;ferie)+HEURE(A1)/24+MOD(A2;1)
Format : jj.mm.aa hh:mm

Â+
 

AGLAS

XLDnaute Nouveau
Re:Additionner une date à un nbre de jours ouvrés.

Merci André, mais tu as oublié un détail, il ne s'agit pas simplement de rajouter le pouillième d'heures en plus de la partie entière, la fonction SERIE.JOUR.OUVRE() calcul la date de fin en excluant les WEEK-END et les JOURS FERIES ; imagine que le calcul de date de fin avec la partie entière de nbre_jours donne le 21/10/2005 00:00, c'est un VENDREDI ! Cela veut dire que les 0,5 de la partie décimale (par ex.) devrait entraîner dans ce cas une date de fin non pas le 22/10/2005 12:00 qui est un SAMEDI mais le 24/10/2005 12:00 qui est un LUNDI.

Pour bien faire il aurait fallut que la fonction tienne compte de cette donnée et je m'étonne que cela ne soit pas le cas. :sick:
 

andré

XLDnaute Barbatruc
Re:Additionner une date à un nbre de jours ouvrés.

Resalut,

Tu as tout à fait raison, je n'y avais pas prêter attention, mais il ne faut pas t'étonner pour si peu, il me semble qu'avec un minimum de logique tu aurais pu trouver la solution toi-même (lol).
Tu as bien fait de vérifier !

Voici ce que j'ai fait :
A1 : 17.10.05 18:15
A2 : 4.25 (donc 4 jours et 6 heures)
Jour férié : 24.10.05
B1 : =SERIE.JOUR.OUVRE(SERIE.JOUR.OUVRE(A1;A2;ferie);HEURE(A1)/24+MINUTE(A1)/1440+MOD(A2;1))+HEURE(A1)/24+MINUTE(A1)/1440+MOD(A2;1)
Résultat : 25.10.05 00:15

Ce qui m'a l'air d'être exact.
Il suffisait d'imbriquer deux fois la fonction.
Mais vérifie quand même, avec moi on ne sait jamais.

Â+
 

AGLAS

XLDnaute Nouveau
Re:Additionner une date à un nbre de jours ouvrés.

Wouaw, tu m'épates le nez là. Et franchement, j'aurais peut-être comme tu le dis pu trouver la solution moi-même, mais j'aurais sans doute bataillé un moment car jusqu'ici je ne comprends pas l'intégralité de la formule ; j'ai cherché quelques minutes à la décortiquer, mais... je dois saturer un peu (...).

Néanmoins, aux vues du résultat de ta solution, je constate que mon pauvre bonhomme va bosser jusqu'à 00:15 du mat, et donc sa bonne femme délaissée risque de foutre le camp avec les gosses et je passe sur toute la clique d'emmerdements qui va avec. Donc, comme je ne suis pas un super capitaliste sans scrupule, je dois intégrer la notion de temps de travail ; en fait, une journée équivaut à 8 heures de travail, ce qui reste acceptable ; j'ai donc tenté naïvement de remplacer 24 par 8 dans la formule, mais cela ne fonctionne pas, preuve que ce n'est pas encore tout à fait clair pour moi. Ce qui soulève par ailleurs une autre question ; étant donné que les tâches de mon arbre succèdent les unes aux autres, je me demande comment gérer au mieux le fait qu'une tâche débute le lendemain de la date de fin de la tâche précédente lorsque celle-ci s'achève en fin de journée ? Jeu de mot mis à part, je ne voudrais pas abuser à mon tour de ton planning mais pourrais-tu m'éclairer sur cette question sachant qu'après j'en ai mille autres qui attendent (cette fois-ci je blague). Merci par avance André, une fois de plus. :eek:

Message édité par: AGLAS, à: 22/10/2005 22:48
 

Gael

XLDnaute Barbatruc
Re:Additionner une date à un nbre de jours ouvrés.

Bonsoir Aglas, Bonsoir André,

En fait je ne comprends pas bien le problème car si le but est bien d'obtenir une date de fin, cette date est la même si la journée est utilisée pour 1h ou 10h.

1,5 jours ou 2 jours doivent donner le même date et pour moi, il suffit d'arrondir le nombre de jours à l'entier supérieur.

Si une tâche est commencée un Lundi pour une durée de 1,5 jours elle devra finir le Mercredi comme pour une durée de 2 jours.

Si tu veux un résultat à l'heure près, il faut soustraire la demi-journée inutile pour avoir par exemple Mercredi 12:00 ou calculer séparément l'heure de fin. 0,25 j=2h si la journée commence à 8h, la tâche se finira à 8+2=10h le Mercredi.

Je n'ai pas regardé la formule d'André en détail mais le résultat est-il correct s'il y a plusieurs jours fériés qui se suivent?

@+

Gael

Message édité par: Gael, à: 23/10/2005 01:32

Message édité par: Gael, à: 23/10/2005 01:36
 

AGLAS

XLDnaute Nouveau
Re:Additionner une date à un nbre de jours ouvrés.

Re,

Tu avais peut-être raison de me demander de me méfier ; j'ai constaté une date résultat suspecte :

A1 : 02/06/2006 13:13
A2 : 1.50 (donc 1 jour et 12 heures)
Jour férié : <vide>

A3 : =
SERIE.JOUR.OUVRE(SERIE.JOUR.OUVRE(A1;A2);HEURE(A1)/24+MINUTE(A1)/1440+MOD(A2;1))+HEURE(A1)/24
+MINUTE(A1)/1440+MOD(A2;1)

Résultat : 07/06/2006 01:13

Le 02/06/2006 est un vendredi, mais ça n'empêche que 1 jour et demi plus tard, cela ne peut pas donner le 07/06/2006 mais le 05/06/2006.
:sick:

Après réflexion cf. message suivant...

Message édité par: AGLAS, à: 23/10/2005 08:47
 

AGLAS

XLDnaute Nouveau
Re:Additionner une date à un nbre de jours ouvrés.

Bonjour Gael, le forum,

Merci Gael pour ton intervention, nos message se sont croisés. Alors effectivement je n'avais pas pensé à arrondir la durée à l'entier supérieur, seulement pour appliqué il faut d'abord résoudre une question un peu tordue, car lorsque la durée appliquée à la date de fin s'achève sur un jour fériée, la formule SERIE.JOUR.OUVRE renvoit en réalité le 1er jour ouvrable suivant la période fériée (ou le week-end) en question. Exemple :

-------------------------
Jeu 01/06/2006 -> durée 2 j
Ven 02/06/2006
Sam 03/06/2006
Dim 04/06/2006
Lun 05/06/2006
------------------------

SERIE.JOUR.OUVRE(DATE(2006;06;1);2)

renvoit : Lun 05/06/2006

et non : Ven 02/06/2006

Alors dans ce cas précis ce n'est pas très gênant et dans un certain sens c'est avantageux puisque cela positionne la valeur en vue de la tâche suivante (pour y ajouter la durée s'y rapportant) mais je trouve déjà cela un peu gênant quand même car cela ne traduit pas tout à fait la réalité et donc tu peux imaginer le pb si la durée avait été 1,5 j et que tu l'avait arrondi à 2 ; comment retrouver la bonne valeur alors ; la soustraction de la partie décimale n'apportera pas le bon résultat pour autant. Alors qu'en est-il ? J'suis vraiment enboucané au possible avec cette formule que je ne trouve pas pour des petits riens qui manquent ; je dois présenter lundi l'outil sur lequel je bosse depuis près de 6 mois et au lieu de stabiliser j'en suis encore à chercher des solutions impossibles qui risquent de faire tout foirer. --Fin de la parenthèse dégoût--- Alors qu'en dites-vous ? Cela vous parlerait-il ? Providentielle la question ou pas solution?

:eek:

Message édité par: AGLAS, à: 23/10/2005 08:48
 

andré

XLDnaute Barbatruc
Re:Additionner une date à un nbre de jours ouvrés.

Salut,

A nouveau sous toutes réserves (à vérifier !)

A1 : 17.10.05 18 - format jj.mm.aa hh
A2 : 5.5 - format standard
D1 : 24.10.05 - nommé 'ferie'
B1 : =SERIE.JOUR.OUVRE(A1;SI(MOD(A2;1)*24+HEURE(A1)>24;ARRONDI.SUP(A2;0);A2);ferie)+MOD(MOD(A2;1)*24+HEURE(A1);24)/24
Résultat : 26.10.05 06

Â+
 

andré

XLDnaute Barbatruc
Re:Additionner une date à un nbre de jours ouvrés.

Resalut,

Concernant le problème logique (mais faux) signalé par Aglas, lors de la vérifiaction de la formule, il faudrait voir s'il ne faut pas ajouter un -1 derrière le premier A1 :

=SERIE.JOUR.OUVRE(A1-1[/color];SI(MOD(A2;1)*24+HEURE(A1)>24;ARRONDI.SUP(A2;0);A2);ferie)+MOD(MOD(A2;1)*24+HEURE(A1);24)/24

Â+
 

AGLAS

XLDnaute Nouveau
Re:Additionner une date à un nbre de jours ouvrés.

Bonsoir André, le forum,

Merci André pour ta dernière version, le pb c'est que si tu as une durée de 0,5 j alors la formule renvoit une date de fin égale à la veille de la date de début. 2ème pb si la date de début est 08/06/2006 08:00 et la durée 1,50 j, la formule renvoit 08/06/2006 20:00, ce qui n'est pas faux en soi (1 j + 0,5 j = 24 h + 12 h) sauf que comme je le disais précédemment, la durée d'une journée est 08H00, ce qui devrait donner 09/06/2006 12:00 (c-à-d la journée du 8 et la demi-journée du 9). Comment sortir de cette impasse ? J'ai cherché sur le net par ailleurs mais je n'ai trouvé aucune piste sérieuse. Je me demande si une fonction perso ne serait pas plus appropriée mais je m'étonne simplement que le pb n'est pas déjà été posé, car enfin la gestion de planning ça ne date d'aujourd'hui, purée de purée.
:angry:
 

Gael

XLDnaute Barbatruc
Re:Additionner une date à un nbre de jours ouvrés.

Bonjour Aglas, Bonjour André,

Pour moi, après réflexion, je trouve que le problème est mal posé depuis le début et la fonction serie.jours.ouvrés n'est pas en cause.

* A partir du moment ou tu veux gérer des résultats en heures avec des journées de 8 heures, il faut au départ définir la durée du projet en heures.
* Si la première journée (date de début) compte dans le projet, il faut déduire de le durée du projet le nombre d'heures disponible de cette première journée donc gérer ce nombre d'heures.
* Enfin, il faut calculer l'heure de fin pour la date de fin calculée.

Exemple: le projet dure 1,5 jours soit 12h et démarre le Lundi 8/06, la journée du Lundi étant disponible (8h).

Le paramètre Nbjours est à positionner à: arrondi sup(12-8)/8=1
la date calculée sera donc le 9/06
Le nombre d'heures à ajouter est égal au total du projet - sa partie entière 0,5 - 0= 0,5 soit 4 heures et le projet finit donc à 12h le 9/06.

Le projet suivant dure 24h soit 3 jours de 8h. et il reste 4h dispo pour le Mardi.
Nbjours=arrondi sup(24-4)/8=3
Date calculée Vendredi 12/06
Nb heures à ajouter 2,5-2=0,5 et e projet finit à 12:00 le Vendredi.

Il faut conserver le nb d'heures disponibles de la date de début, la fonction série.jours.ouvrés donnera la date de fin en fonction des WE et jours fériés et il ne reste plus qu'à calculer l'heure exacte.

Voilà, c'est à peu près comme ça que je vois les choses, Cela correspond-t-il à tes attentes.

@+

Gael
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote