Temps de travail entre 2 dates avec contraintes

  • Initiateur de la discussion Initiateur de la discussion ogavazzi
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ogavazzi

XLDnaute Nouveau
Bonjour a tous et merci par avance de votre aide
Je galère toujours autant dès qu'il s'agit de calcul avec des dates et des heures

Mon souci du jour est de connaître la durée écoulée en heures/minutes/secondes (hh:mm:ss) entre 2 dates en fonction de contraintes :
- amplitude horaire en semaine
- amplitude horaire du vendredi
- fermeture le week end
- fermeture les jours fériés

J'en fais donc appel à votre savoir faire pour m'en sortir

En pièce jointe le fichier test

Merci d'avance
 

Pièces jointes

Re : Temps de travail entre 2 dates avec contraintes

Bonjour, salut Bruno,

Question maintes fois posée !
Vois les liens au bas de cette page sous "Discussions similaires".
Si tu ne trouves pas ton bonheur, fais une recherche sous les anciens messages, tu trouveras certainement.
 
Re : Temps de travail entre 2 dates avec contraintes

Re,
Salut hoerwind 😉

Désolé, j'avais déjà commencé à faire la fonction, mais il est vrai que c'est un sujet maintes fois abordé

Ogavazzi, ci-joint fichier avec fonction personnalisée en VBA

A+
 

Pièces jointes

Dernière modification par un modérateur:
Re : Temps de travail entre 2 dates avec contraintes

Salut JC,

Je ne sais pas je n'ai pas tout regardé, seulement les dates les plus proches
Mais tu as raison si je fais le décompte de la ligne 11 du 10 au 16/06, y'a comme un problème 😱

A+
 
Dernière modification par un modérateur:
Re : Temps de travail entre 2 dates avec contraintes

Re,

Fichier modifié au post #5, j'étais en train de bossé dessus 😉
2 bugs : jours de week-end non gérés ... oups
et jour férié jamais trouvé ... ben dis donc 😛 = corrigés

A+
 
Re : Temps de travail entre 2 dates avec contraintes

Re,

Fais une recherche sous les anciens messages avec "dates et heures" comme clef.
J'ai retrouvé celui-ci, mais il y en a d'autres :
https://www.excel-downloads.com/threads/calcul-dheures-ouvrees-entre-deux-dates.106463/

Les propositions sous les fichiers joints résolvent ta question en calculant les heures sur la plage horaire du lundi au vendredi, ensuite il te suffit d'y retrancher le nombre de vendredis dans le délai et de le multiplier par le nombre d'heures travaillé en moins les vendredis.
 
Re : Temps de travail entre 2 dates avec contraintes

Bonjour à tous,

Voyez la fonction DUR.

Le 1er et le dernier jour sont traités par la fonction PremDer :

Code:
Option Explicit
Dim t1 As Date, t2 As Date, t3 As Date

Function DUR#(dat1 As Date, h1 As Date, dat2 As Date, h2 As Date)
Dim dat As Date, w As Byte
t1 = TimeValue("06:30")
t2 = TimeValue("18:30")
t3 = TimeValue("21:00")
'---premier jour (ajouté)---
DUR = PremDer(dat1, h1)
'---autres jours---
For dat = dat1 + 1 To dat2
  w = Weekday(dat, 2)
  If Application.CountIf([Feries], dat) = 0 And w < 6 Then _
    DUR = DUR + IIf(w = 5, t2, t3) - t1
Next
'---dernier jour (déduit)---
DUR = DUR - PremDer(dat2, h2)
End Function

Function PremDer#(dat As Date, h As Date)
Dim w As Byte, t As Date
w = Weekday(dat, 2)
If Application.CountIf([Feries], dat) = 0 And w < 6 Then
  t = IIf(w = 5, t2, t3)
  If h < t1 Then PremDer = t - t1 _
    Else PremDer = Application.Max(t - h, 0)
End If
End Function
Notez que la plage des jours fériés est nommée Feries.

A+
 

Pièces jointes

Re : Temps de travail entre 2 dates avec contraintes

Bonjour à tous !

Redoutablement efficace, le code de job75, mais on est habitué !
Pour corser la chose, s'il y a une coupure entre 12:00 et 14:00, est-ce facilement intégrable ?
 
Re : Temps de travail entre 2 dates avec contraintes

Re, salut Victor,

Je vais regarder ta suggestion.

Pour l'instant une solution qui doit être plus rapide, avec un tableau et la fonction Match (EQUIV) :

Code:
Option Explicit
Dim fer, t1 As Date, t2 As Date, t3 As Date

Function DUR#(dat1&, h1 As Date, dat2&, h2 As Date)
Dim dat&, w As Byte
fer = [Feries].Value2 'tableau
t1 = TimeValue("06:30")
t2 = TimeValue("18:30")
t3 = TimeValue("21:00")
'---premier jour (ajouté)---
DUR = PremDer(dat1, h1)
'---autres jours---
For dat = dat1 + 1 To dat2
  w = Weekday(dat, 2)
  If IsError(Application.Match(dat, fer, 0)) And w < 6 Then _
    DUR = DUR + IIf(w = 5, t2, t3) - t1
Next
'---dernier jour (déduit)---
DUR = DUR - PremDer(dat2, h2)
End Function

Function PremDer#(dat&, h As Date)
Dim w As Byte, t As Date
w = Weekday(dat, 2)
If IsError(Application.Match(dat, fer, 0)) And w < 6 Then
  t = IIf(w = 5, t2, t3)
  If h < t1 Then PremDer = t - t1 _
    Else PremDer = Application.Max(t - h, 0)
End If
End Function
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour