Calcul de durées

gimli

XLDnaute Occasionnel
Bonjour à tous,

voilà je débute sur excel et actuellement en stage, et je cherche à calcuer (en minutes) un temps d'interruption , donc j'ai en F1 la date de début de l'interruption en G1 l'heure de début de l'interruption, en H1 la date de ré"tablissement et en I1 l'heure de rétablissement. En J1 je souhaiterai mettre la durée d'interruption en minutes, mais je ne sais comment y parvenir.

PS: j'ai regardé les autres sujets mais tous mettaient l'heure avec la date, moi ces deux informations sont dans une case différente ;)


Merci d'avance ;)

Gimli
 

tototiti2008

XLDnaute Barbatruc
Re : Calcul de durées

Bonjour à tous,

peut-être :

Code:
Feries = Array(CDbl(CDate("1/1/" & year(date))), CDbl(CDate("1/5/" & year(date))), CDbl(CDate("14/7/" & year(date))), CDbl(CDate("15/8/" & year(date))), CDbl(CDate("25/12/" & year(date))))
 

Benjy

XLDnaute Occasionnel
Re : Calcul de durées

Bonjour à toi,

Je n'ai absolument pas la solution à ton nouveau problème malheuresement mais je me permet une remarque. Il me semble que tu as oublié un nombre important de jours feriés :confused:
Notamment : 08/05/10 , 13/05/10, 24/05/10, 05/04/10, 02/04/10, 01/11/10, 11/11/10 et le 26/12/10

Un petit doute pour le 02/04/10 et le 26/12/10 qui sont feriés en Alsace. Mais il me semble que pour le reste de la france c'est kekette.

De plus ton problème est complexe car certains jours fériés ne change pas de date, exemple le 1 er ou le 8 mai. En revanche Paques et l'ascension par exemple sont en perpetuelle mouvement...
 

job75

XLDnaute Barbatruc
Re : Calcul de durées

Bonjour gimli, salut Pierrot, tototiti,

Bien d'accord avec avec Year(Date) mais avec les fêtes mobiles liées à Pâques, les formules sont plus compliquées...

gimli, faites une recherche sur le forum et tâchez de vous débrouiller.

A+
 

job75

XLDnaute Barbatruc
Re : Calcul de durées

Re,

En adaptant une formule trouvée sur le forum, voici une fonction VBA donnant le n° de série du dimanche de Pâques :

Code:
Function PAQUES(dat As Date) As Long
PAQUES = Evaluate("ROUND(DATE(" & Year(dat) & ",4,MOD(234-11*MOD(" & Year(dat) & ",19),30))/7,0)*7-6") 'numéro de série du jour
End Function

A mettre dans un Module. Et en VBA pour les jours fériés :

lundi de Pâques => PAQUES(Date) + 1

jeudi de l'Ascension => PAQUES(Date) + 39

lundi de Pentecôte => PAQUES(Date) + 50

gimli, vous pouvez utiliser directement ces n° de série dans le Array, pas besoin de CDbl(CDate()).

Bien sûr si l'on veut obtenir la date de Pâques au format Date :

Code:
MsgBox CDate(PAQUES(Date))

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Calcul de durées

Bonjour gimli, le fil, le forum,

Je reviens sur ce fil car je n'ai jamais aimé le calcul des minutes : la durée d'exécution est trop longue.

Mais grâce au fil suivant j'ai trouvé LA bonne méthode :

https://www.excel-downloads.com/thr...ebut-dune-duree-et-contraintes-horair.144094/

Il faut incrémenter par pas de 1 jour mais traiter autrement le premier et le dernier jour.

Voyez donc le fichier joint avec ce code beaucoup plus logique et rapide :

Code:
Option Explicit

Dim t1 As Date, t2 As Date, jour As Date

Function Minutes(deb As Date, fin As Date) As Long
Dim dat As Long, t As Date, dur As Date
Application.Volatile
t1 = TimeValue("8:0")
t2 = TimeValue("18:0")
jour = t2 - t1
dat = Int(CDec(deb))
t = TimeValue(deb)
dur = PremDer(dat, t)
For dat = dat + 1 To Int(CDec(fin))
  If Weekday(dat, 2) < 6 And IsError(Application.Match(dat, [Feries], 0)) Then dur = dur + jour
Next
t = TimeValue(fin)
Minutes = 1440 * (dur - PremDer(dat - 1, t))
End Function

Function PremDer(dat As Long, t As Date) As Date 'traite le 1er et le dernier jour
If Weekday(dat, 2) < 6 And IsError(Application.Match(dat, [Feries], 0)) Then
  If t <= t1 Then PremDer = jour
  If t > t1 And t < t2 Then PremDer = t2 - t
End If
End Function

A+
 

Pièces jointes

  • Durée calcul rapide(1).xls
    37 KB · Affichages: 328

Statistiques des forums

Discussions
312 304
Messages
2 087 064
Membres
103 450
dernier inscrit
bernardmortensen