Microsoft 365 Calcul Date fin selon plages horaires

bibbip35

XLDnaute Occasionnel
Bonjour à tous

Je suis en train de travailler sur un planning ou j'ai besoin de calculer la date de fin de travaux selon Horaires de travail et jours de fermeture ( Fériés + WE )
Aujourd'hui , j'utilise une fonction Datefin qui me permet bien de faire ce calcul mais du lundi au vendredi mais sans prendre en compte les pauses
=Datefin(M5;K5;'Paramêtres Heures'!$C$3:$D$4;Fériés)
Formule en N5 dans le fichier en Pièce joint

Aujourd'hui , j'ai 3 schéma horaire différent qui sont paramétrés dans la feuille "Paramêtres Heures"

Horaire Normal
Lundi au jeudi 8h a 16h50 avec une pause de 12h00 à 12h45
Vendredi de 8h à 12h10 avec une pause de 10h00 à 10H10

Horaire 2X8
Lundi au jeudi 5h a 21h00 avec une pause de 10h00 à 10h30 ET une pause de 18h00 à 18h30
Vendredi de 5h à 11h00 SANS PAUSE

Horaire 3x8
Dimanche 21h a vendredi 5h00 avec une pause de 10h00 à 10h30 ET une pause de 18h00 à 18h30 Et une pause de 1h00 à 1h30
Vendredi de 5h à 21h00 avec une pause de 10h00 à 10h30 ET une pause de 18h00 à 18h30

Merci à tous pour votre aide

Bibbip
 

Pièces jointes

  • Planning bibbip TEST3.xlsm
    109.6 KB · Affichages: 17

bibbip35

XLDnaute Occasionnel
Bonjour à tous

Je me permets de revenir sur ce fil , malgré mes multiples recherches sur le forum et sur le NET
Je n'arrive pas à trouver de solutions pour calculer la date de fin d'une tache selon les plages horaire

Pour le mode 2x8 et normal , j'arrive a contourner le problèmes des pause en modifiant l'heure de fin de journée ... Ce n'est pas Optimum mais bon

Par contre , pour le mode 3X8 qui commence le dimanche , c'est plus compliqué car j'utilise la fonction de JOB75 qui ne prend pas en compte le samedi et dimanche ( a ma demande à l'époque :))

J'ai essayé de regarder la focntion plus en détail mais j'avouerais qu je n'arrive pas a comprendre l'articulation
et donc a quel niveau dois-je interagir sur le code ci-dessous

Function Datefin(deb As Date, duree As Date, horaire As Range, feries As Range) As Date
Dim t1 As Date, t2 As Date, t3 As Date, t4 As Date, jour1 As Date, jour2 As Date
Dim dat&, t As Date, dur As Date, d#
t1 = horaire(1)
t2 = horaire(1, 2)
t3 = horaire(2, 1)
t4 = horaire(2, 2)
jour1 = t2 - t1: jour2 = t4 - t3
If jour1 < TimeValue("0:01") Or jour2 < TimeValue("0:01") Then End 'sécurité
If duree <= 0 Then duree = 10 ^ -9
dat = Int(CDbl(deb))
t = TimeValue(deb)
If IsError(Application.Match(dat, feries, 0)) And Weekday(dat, 2) < 5 Then
If t <= t1 Then dur = jour1
If t > t1 And t < t2 Then dur = t2 - t
ElseIf IsError(Application.Match(dat, feries, 0)) And Weekday(dat, 2) = 5 Then
If t <= t3 Then dur = jour2
If t > t3 And t < t4 Then dur = t4 - t
End If
While dur < duree
dat = dat + 1
If IsError(Application.Match(dat, feries, 0)) And Weekday(dat, 2) < 6 _
Then dur = dur + IIf(Weekday(dat, 2) < 5, jour1, jour2)
Wend
d = dur - duree
Datefin = dat + IIf(Weekday(dat, 2) < 5, t2, t4) - d
End Function


Merci à tous pour votre aide !

Bibbip
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 923
Membres
101 840
dernier inscrit
SamynoT