Calcul différence d'heures
Résolu
nitrate
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un souci sous excel 2007, j'ai deux colonnes N et O, dans la colonne N j'ai une date et une heure du type 2/11/12 8:53 et pareil dans la colonne O.
Je doit calculer le délais de traitement entre N et O sachant que O est toujours supérieur à N.
La ou cela se complique c'est que je doit calculer le délais en jours ouvrés et en heure d'ouverture, donc si N = 2/11/12 8:53 et que O = 03/11/2012 08:40:00 et que mes horaires d'ouvertures sont de 08h30 à 17h30 je devrais normalement avoir un résultat de 08h47 mais comment faire sur excel pour trouver une formule adéquate.
Merci d'avance.
J'ai un souci sous excel 2007, j'ai deux colonnes N et O, dans la colonne N j'ai une date et une heure du type 2/11/12 8:53 et pareil dans la colonne O.
Je doit calculer le délais de traitement entre N et O sachant que O est toujours supérieur à N.
La ou cela se complique c'est que je doit calculer le délais en jours ouvrés et en heure d'ouverture, donc si N = 2/11/12 8:53 et que O = 03/11/2012 08:40:00 et que mes horaires d'ouvertures sont de 08h30 à 17h30 je devrais normalement avoir un résultat de 08h47 mais comment faire sur excel pour trouver une formule adéquate.
Merci d'avance.
A voir également:
- Calcul différence d'heures
- Difference tcp udp - Guide
- Difference million milliard - Accueil - Technologies
- Calcul moyenne excel - Guide
- Calcul km marche à pied gratuit - Télécharger - Sport
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
7 réponses
Bonjour,
Pas simple par formule...
Une proposition de fonction personnalisée en VBA :
https://www.cjoint.com/?CDhnzUvWyXQ
Tiens compte des fériés.
eric
PS; je trouve 8:37....
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Pas simple par formule...
Une proposition de fonction personnalisée en VBA :
Function delai_H_Ouv(date1 As Date, date2 As Date) As Date Dim date3 As Date, jour As Long, c As Range Dim Hdeb As Date, Hfin As Date Dim Houv As Variant Houv = [Ouverture] For date3 = Int(date1) To Int(date2) Set c = [Fériés].Find(Format(Int(date3), "ddd dd mmm yyyy"), LookIn:=xlValues) jour = Weekday(date3, vbMonday) If c Is Nothing Then If date3 = Int(date1) Then Hdeb = Application.Max(date1 - Int(date1), Houv(jour, 1)) Hfin = Houv(jour, 2) ElseIf date3 = Int(date2) Then Hdeb = Houv(jour, 1) Hfin = Application.Min(date2 - Int(date2), Houv(jour, 2)) Else Hdeb = Houv(jour, 1) Hfin = Houv(jour, 2) End If delai_H_Ouv = delai_H_Ouv + Hfin - Hdeb End If Next date3 End Function
https://www.cjoint.com/?CDhnzUvWyXQ
Tiens compte des fériés.
eric
PS; je trouve 8:37....
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Bonjour Eriic,
Merci ça fonctionne mais pas à chaque fois, d'ailleurs en calculant de tête je ne comprend pas pourquoi tu trouve 8h37 alors que c'est bien 8h47.
Je t'ai mis un exemple ci dessous avec quelques dates que j'ai à calculer, j'ai l'impression que ca plante lorsque le calcul doit se faire sur le même jour.
http://cjoint.com/?3DhqVAQzMY0
Merci ça fonctionne mais pas à chaque fois, d'ailleurs en calculant de tête je ne comprend pas pourquoi tu trouve 8h37 alors que c'est bien 8h47.
Je t'ai mis un exemple ci dessous avec quelques dates que j'ai à calculer, j'ai l'impression que ca plante lorsque le calcul doit se faire sur le même jour.
http://cjoint.com/?3DhqVAQzMY0
Re,
Effectivement, ça fait bien 8h47.
Seulement je n'avais pas prévu que tu démarres un samedi pour terminer un dimanche. C'est en effet les jours des 02 et 03/11/2012. Pas de chance.... ;-)
C'est corrigé :
J'ai complété pour dates le même jour.
Par contre je ne contrôle pas que les heures saisies soient bien dans les heures d'ouverture. Respecter ces heures.
Je te laisse contrôler de près car la fonction weekday() ne réagit pas comme l'aide le mentionne et ça me gène un peu.
https://www.cjoint.com/?CDhrI5u8B7E
eric
Effectivement, ça fait bien 8h47.
Seulement je n'avais pas prévu que tu démarres un samedi pour terminer un dimanche. C'est en effet les jours des 02 et 03/11/2012. Pas de chance.... ;-)
C'est corrigé :
Function delai_H_Ouv(date1 As Date, date2 As Date) As Date Dim date3 As Date, jour As Long, c As Range Dim Hdeb As Date, Hfin As Date Dim Houv As Variant Houv = [Ouverture] For date3 = Int(date1) To Int(date2) Set c = [Fériés].Find(Format(Int(date3), "ddd dd mmm yyyy"), LookIn:=xlValues) jour = Weekday(date3) If c Is Nothing And IsNumeric(Houv(jour, 1)) And IsNumeric(Houv(jour, 2)) Then If Int(date1) = Int(date2) Then delai_H_Ouv = date2 - date1 Else If date3 = Int(date1) Then Hdeb = Application.Max(date1 - Int(date1), Houv(jour, 1)) Hfin = Houv(jour, 2) ElseIf date3 = Int(date2) Then Hdeb = Houv(jour, 1) Hfin = Application.Min(date2 - Int(date2), Houv(jour, 2)) Else Hdeb = Houv(jour, 1) Hfin = Houv(jour, 2) End If delai_H_Ouv = delai_H_Ouv + Hfin - Hdeb End If End If Next date3 End FunctionDe toute façon il y avait également d'autres manques.
J'ai complété pour dates le même jour.
Par contre je ne contrôle pas que les heures saisies soient bien dans les heures d'ouverture. Respecter ces heures.
Je te laisse contrôler de près car la fonction weekday() ne réagit pas comme l'aide le mentionne et ça me gène un peu.
https://www.cjoint.com/?CDhrI5u8B7E
eric
Merci Eriic,
C'est mieux, comme tu le dit avec weekday ca pose problème car bizarrement lorsque un jours férié se glisse entre deux dates le délais ne reprend pas après ce jours férié.
C'est mieux, comme tu le dit avec weekday ca pose problème car bizarrement lorsque un jours férié se glisse entre deux dates le délais ne reprend pas après ce jours férié.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'avais écris Par contre je ne contrôle pas que les heures saisies soient bien dans les heures d'ouverture. Respecter ces heures.
Et tu as des débuts à 20:19, 20:47, ...
Je traite ces cas là aussi maintenant.
Et j'ai trouvé le pb avec weekday(). Je devais utiliser le calendrier 2011 et forcément j'avais du mal à être d'accord avec lui avec les paramétrages corrects. Corrigé aussi.
On devrait être proches de la fin :
https://www.cjoint.com/?CDht1OkglOy
eric
PS, le code pour les futurs lecteurs :
Et n'oublie pas que dans les fériés il n'y a que ceux d'une année....
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Et tu as des débuts à 20:19, 20:47, ...
Je traite ces cas là aussi maintenant.
Et j'ai trouvé le pb avec weekday(). Je devais utiliser le calendrier 2011 et forcément j'avais du mal à être d'accord avec lui avec les paramétrages corrects. Corrigé aussi.
On devrait être proches de la fin :
https://www.cjoint.com/?CDht1OkglOy
eric
PS, le code pour les futurs lecteurs :
Function delai_H_Ouv(date1 As Date, date2 As Date) As Date Dim date3 As Date, jour As Long, c As Range Dim Hdeb As Date, Hfin As Date Dim Houv As Variant Houv = [Ouverture] For date3 = Int(date1) To Int(date2) Set c = [Fériés].Find(Format(Int(date3), "ddd dd mmm yyyy"), LookIn:=xlValues) jour = Weekday(date3, 2) If c Is Nothing And Houv(jour, 1) <> 0 And Houv(jour, 2) <> 0 Then If Int(date1) = Int(date2) Then delai_H_Ouv = date2 - date1 Else If date3 = Int(date1) Then Hdeb = Application.Max(date1 - Int(date1), Houv(jour, 1)) Hfin = Houv(jour, 2) ElseIf date3 = Int(date2) Then Hdeb = Houv(jour, 1) Hfin = Application.Min(date2 - Int(date2), Houv(jour, 2)) Else Hdeb = Houv(jour, 1) Hfin = Houv(jour, 2) End If If Hfin > Hdeb Then delai_H_Ouv = delai_H_Ouv + Hfin - Hdeb End If End If Next date3 End Function
Et n'oublie pas que dans les fériés il n'y a que ceux d'une année....
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.