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). :)
 

AGLAS

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

Bonjour Gael, André, le forum,

Dis Gael, je pressens que tu touches à la solution mais je reste encore dans le flou.

J'ai ajouté en pièce jointe un exemple de mon gourbi réduit à sa plus simple expression ; je l'ai débarassé des 3/4 des fonctions, userforms et autres feuilles inutiles pour exprimer le pb, j'ai aligné la colonne durée sur la colonne Travail (charge) pour simplifier (à l'origine c'est une fonction dérivée de l'algo de Bellman). S'il est possible d'avoir un exemple concrêt sur la question, je suis preneur parce que là, je sature un peu... :unsure: [file name=Test_20051024165447.zip size=49827]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Test_20051024165447.zip[/file]
 

Pièces jointes

  • Test_20051024165447.zip
    48.7 KB · Affichages: 38

Gael

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

Bonsoir Aglas, bonsoir André,

J'ai fait un essai de la façon suivante.

Les heures étant gérées par XL sous forme de décimales (1 jour =24h donc 1h=1/24) j'ai d'abord défini une formule nommée:

Heure=$D2-ENT($D2)

qui me permet de récupérer l'heure de la date de début. Puis une formule Dispo pour calculer le nombre d'heures restant disponibles:

Dispo: =((18/24)-SI(Heure<14/24;(2/24+MIN(Heure;12/24));Heure))*24
en tenant compte de la plage entre 12h et 14h non utilisée.

J'ai gardé les chiffres en fraction de 24 pour plus de clarté et pour éviter les pb d'arrondis.

Puis la formule finale en E2:

=SERIE.JOUR.OUVRE(D2;ENT(G2*8-Dispo)/8+1)+8/24+MOD((G2*8-Dispo);8)/24+SI(MOD((G2*8-Dispo);8)>4;2/24;0)

Nbjours à ajouter à D2=ENT(G2*8-Dispo)/8+1 soit la partie entière de heures de travail-heures disponibles du 1er jour divisé par 8 pour avoir un nombre de jours et +1 pour arrondir au nombre de jours supérieur.

On ajoute à ça:
* 8/24 pour démarrer à 8:00
* le nombre d'heures restantes qui est le reste de la division par 8 des heures à faire-les heures dispos de la date de début /24
* Si le reste est >4 on ajoute encore 2/24 soit les 2 heures entre 12h et 14h.

Fais quelques vérifications avec le fichier joint et dis-moi si c'est OK ou les problèmes rencontrés.

Question subsidiaire: Pourquoi se donner tant de mal pour faire sur Excel ce que MSProject fait très bien de façon native (Lol).

@+

Gael
[file name=Test_Aglas.zip size=49303]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Test_Aglas.zip[/file]
 

Pièces jointes

  • Test_Aglas.zip
    48.1 KB · Affichages: 41

AGLAS

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

Bonjour, Bonsoir, Gael, André, le forum,

Excuse-moi pour ce temps mort Gael, mais j'ai eu un contre-temps. J'ai bien réceptionné ta proposition, merci bcp, je te félicite, parce que ce n'est pas rien, et ça l'air de fonctionner plutôt bien, je ne l'ai pas encore retourné dans tous les sens mais pour l'instant pas trop de pb.

Ce qui est un peu gênant c'est que les dates de fin lorsqu'elles s'achèvent un vendredi par exemple sont positionnée au lundi qui suit, ce qui selon moi prête à confusion et en tout cas ne traduit pas la réalité.

Bon, ensuite je te suis réellement reconnaissant d'avoir planché de la sorte, seulement cela me paraît un peu lourd à maintenir, si je pigeais un peu mieux ce que tu as fait là, j'aurais sans doute opté pour une fonction perso qui fait appel à la fonction SERIE.JOUR.OUVRE réduite à une expression plus simple et ainsi en cas de modif je n'aurais pas à actualiser une 'myriade' de cellules.

Dernier point concernant une contrainte qui va également dans le sens d'une fonction perso, je suis censé donner la possibilité de positionner les tâches au plus tard par rapport au chemin critique, je ne sais pas si cela te parle ; en gros, la date de fin est calée sur la date de fin du groupe de tâches de même niveau (ce qui pourrait impliquer un test déterminant si la tâche en question a un prédécesseur, auquel cas, la date de début devient la date de fin du prédécesseur, dans le cas contraire c'est la date de fin du groupe de tâche de même niveau moins la durée). Bref, là je demande peut-être trop...

Pour répondre à ta question subsidiaire : Il se trouve que développe un outil de simulation de plan de charges à destination des commerciaux, des chefs de projet, consultants et développeurs de la boite dans laquelle j'effectue mon stage de fin d'études.

Et si je me donne tant de mal pour faire sur Excel ce que Project fait très bien, c'est parce que Excel fait ce que Project n'est pas encore capable de faire ; par exemple Project n'a pas une approche par cellule des objets qui manipule mais par ligne, il est possible d'appliquer des formules applicables de colonne à colonne en relatif, mais pas de cellule à cellule, sachant que je devais gérer des ratios qui sont fonctions de la charge ou encore de la durée d'autres tâches Excel était donc plus indiqué. et ensuite, les commerciaux ne disposent pas de Project et il n'est pas question de leur imposer (il faudrait acheter les licences, les former et c'est pas leur boulot que de faire des plannings), en revanche ils disposent d'Excel.

Avec l'outil que je leur propose le commercial peut très simplement consigner le besoin du client (en cochant des cases pour chaque type de prestation) et l'arbre de tâches correspondant est généré dans la foulée, avec les ratios qui vont bien. Il passe le gourbi au chef de projet qui lui peut procéder au affectations, ajuster les charges au besoin, simuler le projet et une fois le plan validé, il peut l'intégrer dans Project pour un suivi concret. Voilà voilà et... il me reste à peine 1 semaine avant que le big boss ramène sa fraise l'histoire soupeser le bébé ; ça peut être décisif pour moi... tu vois. enfin voilà quoi, c'est pour ça que je renonce pas à un coup de main. :eek: :woohoo:
 

Gael

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

Bonjour Aglas, Bonjour André,

Un autre essai en tenant compte d'une partie de tes remarques.

* Lorsqu'une tâche se termine en fin de journée, la date de fin est positionnée sur le jour de fin à 18h et non plus sur le jour suivant à 8h.

* Les dates de début sont égales à la date de fin du prédécesseur positionnée au jour suivant à 8h si la tâche se finissait à 18h, ou au jour de fin dans le cas contraire.

* S'il n'y a pas de prédécesseur, la date de début est égale à la date de début de la tâche précédente.

Regarde ce que ça donne, je n'ai pas encore utilisé les options de tâche récapitulative ni les niveaux hiérarchiques mais c'est possible en fonction de tes remarques.

NB: dans la colonne date début, ma formule a remplacé ta macro 'DATEDEB'.

Pour MSProject, j'ai bien compris ton raisonnement, c'était juste pour rire.

@+

Gael
[file name=Test_Aglas_20051026160448.zip size=50174]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Test_Aglas_20051026160448.zip[/file]
 

Pièces jointes

  • Test_Aglas_20051026160448.zip
    49 KB · Affichages: 44

AGLAS

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

Bonsoir Gael, André, le forum,

Merci Gael, j'ai éfé réellement ravi de découvrir ce nouveau message... Cela n'enlève rien à ton mérite mais la formule que tu as insérée au lieu de DATEDEB ne peut pas coller parce que (ce qui n'apparait pas dans la partie de l'arbre laissé en p.j.), il peut y avoir plusieurs prédécesseurs séparés alors par un point-virgule (cf. fonction perso PRECEDE). D'ailleurs, tu sais encore une fois, il faudrait que je pige un peu mieux ta formulation parce que l'idéal serait une ou plusieurs fonctions VBA, une version de DATEDEB adaptée (qui intègre ta formulation en itératif sur les prédecesseurs) et DATEFIN qui intègrerait ta formulation des dates de fin. Ainsi le tout serait plus simple à maintenir (mais pour les temps de réponse je sais pas). Qu'en penses-tu ? :whistle:

PS : Gael, je veux qd même te dire à nouveau merci, même si en l'état je ne peux pas intégrer ; la gestion des heures (avec un seul prédécesseur) c'est nickel qd même, ce qui me fait me dire que la solution n'est pas très loin, mais qu'elle passe probablement par vba. :pinch:

Message édité par: AGLAS, à: 27/10/2005 11:12
 

Gael

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

Bonjour Aglas, bonjour André,

Au risque de paraître un peu têtu (mais c'est une qualité pour un informaticien) je te propose encore un autre essai.

Concernant le VBA, même si je ne suis pas un spécialiste, les temps de réponse sont généralement excellents et souvent meilleurs qu'avec des formules matricielles complexes. Il ne faut pas opposer formules et VBA qui sont complémentaires. Dans ce dernier essai, j'utilise dans des formules ta fonction DATEDEB pour gérer les prédecesseurs multiples.

Ce qui me gêne dans ton application, c'est qu'en colonne D, les formules ne sont pas identiques et semblent même modifiées manuellement au cas par cas. J'ai donc cherché une formule unique utilisant datedeb.

La première chose est de définir la cellule par défaut de la fonction DATEDEB. J'ai donc créé une formule nommée 'Cel' qui prend la cellule précédente si la tâche n'est pas récapitulative (M<>'Oui') et la cellule récapitulative la plus proche de niveau égal ou inférieur dans le cas contraire.

ce qui donne Datedeb(Cel,Hx)

Puis je teste le résultat de Datedeb et positionne la date au jour suivant à 8h si elle se termine à 18h, sinon je garde le résultat.

L'avantage, c'est que la formule est identique pour toutes les cellules de la colonne D, tient compte des tâches récapitulatives, des niveaux hiérarchiques et des prédécesseurs multiples.

Qu'en penses-tu?

@+

Gael [file name=Test_Aglas_V2.zip size=49951]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Test_Aglas_V2.zip[/file]
 

Pièces jointes

  • Test_Aglas_V2.zip
    48.8 KB · Affichages: 52

AGLAS

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

Cher Gael, le forum,

Gael, tu es une perle, et au risque de paraître un peu pêteux (lorsque je me relis, parfois j'ai l'impression que je pars un peu ds mes délires) je voudrais qd même te dire que c'est pour moi un véritablement enchantement de constater que jusqu'ici que tu ne m'as pas envoyé gentiment paître ailleurs, que jusqu'ici tu sois resté réactif et imaginatif ; preuve que l'esprit du forum est avec toi... Trêve de palabres, pour ce qui est ta dernière mouture, il me faut moi aussi insister (non pas pour te montrer que je suis aussi têtu que toi) : si tu veux m'aider à tordre le coup à cette histoire de dates que tu as déjà pas mal dégrossi, tu dois comprendre qu'il faut envisager de retranscrire l'essentielle de ta logique en VBA ; je m'explique :

Tes formules fonctionnent et c'est bon de les voir fonctionner, bien que -encore une fois- je n’ai pas tout décortiqué et compris ce que tu fais. Mais, ce que je ne t'ai pas dis c'est que certaines tâches peuvent ne pas apparaître ; le commercial lui sélectionne des prestations, lesquelles impliquent un certain nombre de tâches à effectuer, c'est l'objet de la colonne 11 (lettre K) intitulée Sélection ; c'est une contrainte à intégrer, tu me diras lorsqu'une tâche n'est pas sélectionnée (positionnée à FAUX) il suffit de caller sa date de fin sur sa date de début et ainsi les autres tâches, sélectionnées celles-ci (venant après) ne seront pas décalées, d'accord. Mais il faut bien comprendre que si tu modifies la charge d'une tâche et que cela implique la modif de la durée de la tâche et du chemin critique, toutes les dates début et fin associées sont à modifier, d'ac ? Donc, imagine-toi (tu peux faire le test en mettant un point d'arrêt au début de la fonction DATEDEB dans l'éditeur VBA) telle que ta formule se présente, pour chaque tâche, DATEDEB est rappelée à 3 reprises, pour fournir à chaque fois la même info ; si 500 lignes sont impactées, cela fait 1 500 appels rien que pour cette fontion !

Cela ne me gênerait pas s'il n'y avait que les dates à calculer, mais tu sais que le gourbi en question contient un paquet de feuilles, dont certaines supportent déjà une quantité d'appels à des fonctions std et perso ; la feuille arbre est particulièrement chargée en fait (la modif d’une charge implique en réalité un traitement particulièrement lourdingue). J'ai dû me creuser la tête pour optimiser les traitements (...) et je suis pratiquement sûr qu’en intégrant tes formules en l’état au milieu du reste, ça ramera méchant.

Mais le fait est qu'elles marchent et je suis persuadé que ton aide peut m'être précieuse pour opérer cette transcription, pour cela il faut que (si tu veux) tu m’expliques leur séquencement en français* parce que je ne sais pas si c’est le stress des quelques jours qui me restent pour finaliser ou quoi mais j’ai le plus grand mal à rentrer dans la logique des dates et des heures en VBA, et je n’ai trouvé que très peu de bonnes infos sur le sujet alors… Et tu sais entre nous, tu dis ne pas être familier de VBA mais vu comment tu 'excel-les' sur la question des formules, tu ne mettrais pas longtemps pour te l’approprier. Bon alors, qu’en penses-tu ?
:silly:

* langage à tout faire : si tel truc est vrai alors je fais ça sinon je fais si, et tant que tel truc et pas tel autre alors machin machin patin couffin…
 

Gael

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

Bonjour Aglas,

J'ai beaucoup travaillé sur MSProject et j'ai donc conservé quelques notions de gestion de projets. Ton travail est très intéressant et c'est aussi pourquoij'ai essayé d'y apporter quelque chose.

Lorsque tu parles des modifications de tâches, de durée, de chemin critique... il me semble que dans ton fichier initial, tu dois revoir dans ce cas manuellement, les cellules définies dans les fonctions Datedeb pour la valeur par défaut, et même ajouter ou supprimer des formules Datedeb si de nouvelles tâches récapitulatives sont insérées ou si une tâche standard devient récapitulative... C'est un peu ce à quoi j'ai réfléchi et fait une tentative d'automatisation.

Dans les calculs de Datedeb pour le colonne D, j'utilise une formule nommée 'Cell' pour définir justement cette cellule de référence qui va donner la date par défaut. Elle est définie de la façon suivante:

Cell =SI(Arbre!$M3='Oui';INDIRECT(ADRESSE(MAX(SI(((Arbre!$M$2:$M2='Oui')*(Arbre!$L$2:$L2<=Arbre!$L3));Arbre!$I$2:$I2));4));Arbre!$D2)

En français dans le texte: Si pour une cellule, ily a un 'Oui' en colonne M, on va calculer le n° de ligne le plus élevé dans toutes les lignes qui précèdent qui contiennent un 'Oui' en colonne M et avec un niveau hiérarchique >= à celui de la tâche en cours. En clair on trouve la ligne de la tâche récapitulative précédente en amont la plus proche. la cellule choisie sera en colonne D avec ce n° de ligne.

Tu as raison pour la formule qui appelle 3 fois la fonction Datedeb. L'objectif est simplement de se positionner sur la date suivante à 8h si le résultat est une date à 18h pour ne pas avoir comme date de début un Vendredi soir déjà utilisé en totalité. Si tu modifies la fonction Datedeb pour faire ce calcul, la formule n'est plus utile et il reste simplement pour chaque cellule:

Datedeb(cell;Hx).

Si tu arrives à ce point et que le calcul 'Cell' est juste, toutes les modifications de durée de tâches, de récapitulatives qui changent ou sont insérées devraient être prises en compte de même que tous les prédécesseurs ajoutés.
Le calcul de la date par défaut peut aussi très bien être intégré dans la fonction Datedeb en créant un tableau jusqu'à la ligne précédente et en bouclant depuis la fin du tableau vers la première ligne avec 'Oui' et un niveau hiérarchique suffisant.

Tu peux procéder en plusieurs étapes en intégrant progressivement certains calculs dans Datedeb et en supprimant les fonctions correspondantes dans les formules.

Ce que j'aimerai savoir surtout ce n'est pas que mes formules fonctionnent mais dans quels cas elles ne fonctionnent pas, pour chercher comment gérer les cas particuliers.

Je prends quelques jours de vacances, je serai connecté jusqu'à ce soir minuit (rassure-toi je suis aux Antilles et il y a 6 heures de décalage). Passé ce délai, je ne reviendrai que le 3 Novembre.

Bon courage et bon week-end.

@+

Gael
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 413
Messages
2 088 199
Membres
103 764
dernier inscrit
nissassa