Calcul différence d'heures
Résolu/Fermé
nitrate
-
7 avril 2013 à 11:41
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 13 avril 2013 à 22:49
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 13 avril 2013 à 22:49
A voir également:
- Calcul différence d'heures
- Calcul moyenne excel - Guide
- Difference tcp udp - Guide
- Difference million milliard - Accueil - Technologies
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
7 réponses
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 240
Modifié par eriiic le 7/04/2013 à 13:31
Modifié par eriiic le 7/04/2013 à 13:31
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
tontong
Messages postés
2567
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
20 novembre 2024
1 059
7 avril 2013 à 17:11
7 avril 2013 à 17:11
Attention le 3/11/12 était un samedi!
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 240
7 avril 2013 à 17:36
7 avril 2013 à 17:36
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é.
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 240
7 avril 2013 à 19:08
7 avril 2013 à 19:08
il me faut des exemples concrets...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 240
Modifié par eriiic le 7/04/2013 à 19:58
Modifié par eriiic le 7/04/2013 à 19:58
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.
Désolé pour la réponse tardive mais j'étais en déplacement toute la semaine.
Merci Eriic, ca fonctionne très bien.
Merci Eriic, ca fonctionne très bien.
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 240
13 avril 2013 à 22:49
13 avril 2013 à 22:49
ok, je met en résolu pour toi (en haut vers ton titre, pour la prochaine fois)
eric
eric