Différence date suivant plage horaire
Bonjour à tous,
Je cherche de l'aide à travers ce forum ^^
Bon j'expose mon probleme:
y a deja un sujet "quasi similaire" mais j'arrive pas a l'adapter a mon besoin
ci dessous le sujet deja traiter et resolu:
https://forum.excel-pratique.com/viewtopic.php?t=4204&highlight=supression+horaire
donc j'expose mon pb:
Je cherche une formule qui pourrait me calculer la durée qu'il y a entre deux dates/heures en prenant en compte une plage horaire.
A1=27/12/2007 14:56:48
A2=04/01/2008 14:47:14
Plage horaire : 6h00-23h00
exemple1:
A1= 23/12/2007 14:30:00
A2= 26/12/2007 15:00:00
la durée est de :
sur 23/12/2007 ===> 23:00:00 - 14:30:00 = 08:30:00
sur 24/12/2007 ===> 23:00:00 - 06:00:00 = 17:00:00
sur 25/12/2007 ===> 23:00:00 - 06:00:00 = 17:00:00
sur 26/12/2007 ===> 15:00:00 - 06:00:00 = 11:00:00
===> total de durée = 53:30:00
De plus A1 et A2 peuvent etre dans la plage horaire (23h à 6h)
exemple2:
A1= 23/12/2007 05:30:00 (donc ds le calcule on prendra a 06:00:00)
A2= 26/12/2007 15:00:00
la durée est de :
sur 23/12/2007 ===> 23:00:00 - 06:00:00 = 17:00:00
sur 24/12/2007 ===> 23:00:00 - 06:00:00 = 17:00:00
sur 25/12/2007 ===> 23:00:00 - 06:00:00 = 17:00:00
sur 26/12/2007 ===> 15:00:00 - 06:00:00 = 11:00:00
===> total de durée = 62:00:00
exemple3:
A1= 23/12/2007 14:30:00
A2= 26/12/2007 03:00:00
la durée est de :
sur 23/12/2007 ===> 23:00:00 - 14:30:00 = 08:30:00
sur 24/12/2007 ===> 23:00:00 - 06:00:00 = 17:00:00
sur 25/12/2007 ===> 23:00:00 - 06:00:00 = 17:00:00
sur 26/12/2007 ===> 03:00:00 inferieur a 06:00:00 = 00:00:00
===> total de durée = 42:30:00
exemple4:
A1= 23/12/2007 05:30:00
A2= 26/12/2007 03:00:00
la durée est de :
sur 23/12/2007 ===> 23:00:00 - 06:00:00 = 17:00:00
sur 24/12/2007 ===> 23:00:00 - 06:00:00 = 17:00:00
sur 25/12/2007 ===> 23:00:00 - 06:00:00 = 17:00:00
sur 26/12/2007 ===> 03:00:00 inferieur a 06:00:00 = 00:00:00
===> total de durée = 51:00:00
Voila j'ai pas mal détaillé avec des exemples en esperant avoir été clair
Ce qui diffère par rapport au sujet deja resolu:
je ne tiens pas compte des NB.JOURS.OUVRES
A1 et A2 peuvent etre en dehors de la plage horaire
Merci, d'avance à tous
Bonjour
Le raisonnement n'est pas facile, même sans formules, tu es arrivé à te tromper.
https://www.excel-pratique.com/~files/doc/TdNRvHeures.xls
Cordialement
Bonsoir à tous,
un petit up sur ce "vieux" sujet!
J'ai exactement le même problème que Raymonuzika et la solution d'Amadeus ne me donne pas la solution escomptée à une des dimensions du problème, à savoir que les date A1 et B1 peuvent être comprises dans la plage horaire de fermeture.
Si je reprends la plage théorique d'ouverture entre 6h et 23h, avec:
une date début
07/06/2013 23:16
et une date fin
08/06/2013 07:00
Je voudrais trouver "01:00:00", et pas "00:43:00"
Autre problème, si je teste avec une plage d'ouverture entre 6h et minuit, je trouve des valeurs négatives.
Mes exemples en pièce-jointe.
Merci!
Bonjour,
Ci-joint fonction personnalisée à tester, voire adapter.
Ma petite contribution de la journée.
Option Explicit
Public Function Nb_Heures(D1 As Date, D2 As Date)
Const Ho As Date = #6:00:00 AM#
Const Hf As Date = #11:00:00 PM#
Dim tmp1 As Date, tmp2 As Date
Dim i As Integer
If Int(D2) <= Int(D1) Or Int(D1) = Int(D2) Then Exit Function
'MOD(n, d) = n - d*INT(n/d)
tmp1 = D1 - 1 * Int(D1 / 1) 'heure début
tmp2 = D2 - 1 * Int(D2 / 1) 'heure fin
'début
i = Int(D2) - Int(D1) - 1 'nombre de jours entre les 2 dates
'nombre d'heures date début
Select Case tmp1
Case Is < Ho
tmp1 = Hf - Ho
Case Is > Hf
tmp1 = 0
Case Else
tmp1 = Hf - tmp1
End Select
'nombre d'heures date fin
Select Case tmp2
Case Is < Ho
tmp2 = 0
Case Is > Hf
tmp2 = 0
Case Else
tmp2 = tmp2 - Ho
End Select
'résultat
Nb_Heures = i * (Hf - Ho) + tmp1 + tmp2
End Function
Salut Jean-Eric et merci beaucoup!
Ton code répond bien au problème décrit dans mon message, mais ça ne fonctionne pas quand je teste ce type de cas:
07/06/2013 16:16 07/06/2013 18:16
Le résultat affiché est 00:00
Je ne comprends pas ce qui cloche, parce que même si je ne connais pas grand chose au VBA, j'ai compris la logique de ton calcul et quand je l'ai reproduit étape par étape sur le tableur, cela m'a donné la bonne réponse (2h).
Merci encore
Bonjour,
Modifies
If Int(D2) <= Int(D1) Or Int(D1) = Int(D2) Then Exit Functionpar
If D2 <= D1 Or D1 = D2 Then Exit FunctionA te relire.
Bonjour,
ça marche....mais maintenant quand je teste
07/06/2013 17:08 07/06/2013 23:17
08/06/2013 23:08 08/06/2013 23:17
j'ai des valeurs négatives...
Merci
Bonjour,
Ligne surlignée à modifier
Select Case tmp2
Case Is < Ho
tmp2 = 0
Case Is > Hf
tmp2 = Hf - Ho
Case Else
tmp2 = tmp2 - Ho
End Select