Bonsoir à tous
Apres de multiples recherches sur votre forum, je ne trouve pas la solution a mon problème en sachant que je ne suis pas un grand expert d'excel.
Je m'explique:
Je cherche une formule qui me permette de renvoyer une durée relative a une tache a une date ultérieure selon une plage horaire définie.
exemple:
- j'ai une plage horaire de 8h-12h et 13h-17h
- la date et heure de début : 01/12/2014 à 08:00
- je travaille du lundi au vendredi
scénario 1:si j'ai une tache d'une durée de 08h30; je dois avoir un résultat de 1 jour + 30' donc le mardi a 8h30
scénario 2:si j'ai une tache d'une durée de 05h30; je dois avoir un résultat lundi a 15h30
En résumé , je veux que la durée de la tache soit uniquement dans cette plage horaire
a noter que la durée d'une tache peut être variable et la valeur des plages horaires peuvent être modifiables.
je ne sais pas si j'ai été très clair, n'hésitez pas a me demander + de précisions !!!
merci beaucoup pour votre aide
Bonjour à tous
je me permet de relancer ce post car je cale vraiment sur ce problème
Quelqu'un aurait il une solution? peut être en vba?
merci d'avance
C'est assez délicat car tu cherches à obtenir la date et l'heure de fin de la tâche. Pour obtenir simplement la date, tu peux sans doute arriver à le faire en utilisant la fonction NB.JOURS.OUVRES
(NETWORKDAYS
en version US). Cette fonction retourne le nombre de jours ouvrés entre 2 dates (ça permet d'exclure les week end et les jours férié). Voici quelques exemples (en anglais, je n'ai rien trouvé en français) :
- http://chandoo.org/wp/2010/09/10/working-hours-formula/
- http://www.cpearson.com/excel/distribdates.htm
Je te conseille d'essayer des outils de planification comme Microsoft Project (ou Gantt project en gratuit) qui permettent de gérer une liste de tâches, les dates, les dépendances entre les tâches...
Si tu tiens absolument à le faire dans excel, alors je pense que le plus simple est d'utiliser une macro VBA (ça sera plus facile à mon avis que d'essayer d'écrire une formule compliquée). Voici une idée d'algorithme :
- Déclarer ces variables :
restant
: durée restante (en minute), l'initialiser avec la durée de la tâcheavancement
: date, initialisé à la date de début de la tâche - Faire une boucle : tant que
restant
est supérieur à 0 (autrement dit tant que la tâche n'est pas terminée) :- Récupérer l'heure de début (
debut_plage
), et la durée (duree_plage
) de la prochaine plage, à partir de la dateavancement
- Si
restant
<duree_plage
, la tâche se termine dans la plage courante, donc on retourne l'heure de fin qui correspond à :debut_plage
+restant
- Sinon :
avancement
=debut_plage
+duree_plage
+ 1 seconde (juste après la plage horaire courante)restant
=restant
-duree_plage
(on décompte la durée de la plage du temps restant)
- Récupérer l'heure de début (