calcul de plage horaire

esconde

XLDnaute Nouveau
Bonjour à tous,

je cherche à calculer en HH:MM le temps écoulé entre deux dates en tenant compte de :
  • la plage horaire ouvrée de 08:00 à 18:00
  • les jours ouvrés des années concernées
J'ai cherché sur le net mais je n'ai pas trouvé qque chose qui soit acceptable.
Une fonction personnalisée en VB serait l'idéal.

Je vous remercie par avance si vous avez le temps de vous pencher sur mon problème.

Cordialement
 

Pièces jointes

  • delai HH MM.xlsx
    60.4 KB · Affichages: 55
  • delai HH MM.xlsx
    60.4 KB · Affichages: 52
  • delai HH MM.xlsx
    60.4 KB · Affichages: 54

Victor21

XLDnaute Barbatruc
Re : calcul de plage horaire

Bonjour, esconde.

Essayez en C2 :
=SI(NON(ESTERR([@[Dte Intervention]]-[@[Dte Overture]]));(ET(JOURSEM([@[Dte Overture]];2)<6;NON(NB.SI(feries;[@[Dte Overture]])))*ET(MOD([@[Dte Overture]];1)<18/24;MOD([@[Dte Overture]];1)>8/24)*MAX(18/24;MOD([@[Dte Overture]];1))-MAX(8/24;MOD([@[Dte Overture]];1)))+(ET(JOURSEM([@[Dte Intervention]];2)<6;NON(NB.SI(feries;[@[Dte Intervention]])))*ET(MOD([@[Dte Intervention]];1)<18/24;MOD([@[Dte Intervention]];1)>8/24)*(ENT([@[Dte Intervention]])>ENT([@[Dte Overture]]))*(MIN(18/24;MOD([@[Dte Intervention]];1))-MIN(8/24;MOD([@[Dte Intervention]];1))))+"10:"*MAX(0;NB.JOURS.OUVRES([@[Dte Overture]]+1;[@[Dte Intervention]]-1;feries));"")
J'adore les formules avec les références des tableaux ...

Voir PJ

Edit : Bonsoir, Gérard avec un peu de retard : J'ai posté, puis me suis précipité sur la soupe qui refroidissait :eek:


Erreur : Oubliez, et regardez le #9 :eek: :mad:
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : calcul de plage horaire

Bonjour à tous,

Mon très cher Patrick...
Tu vois les deux gros balèzes en blouse blanche devant ta porte... Ils vont t'emmener en vacances dans une cellule capitonnée...
Ils vont te donner des "bonbons" de toutes les couleurs... Ils disent que ce sont des M&Ms. Croient les. Mais gaffe aux rouges, tu te prends pour le boss d'XLD... Et David et Pascal hantent tes nuits...

Ceci dit, jolie formule mais pas testée. Les messieurs m'ont dit que pour tester ta formule, je dois prendre trois kilos de M&Ms de toutes les couleurs. J'ai peur...

A+++ l'ami
A+ à tous
 

Victor21

XLDnaute Barbatruc
Re : calcul de plage horaire

Mon très cher Jean-Claude...

Je ne trouve pas du tout pratiques -lisibles- les références dans les tableaux, mais dans la PJ, j'ai laissé les formules traditionnelles beaucoup plus claires.

PS : je préfère les smarties, ça me rappelle un temps que les moins de vingt ans... etc.... (avec les caram'bar, les points DH, les scoubidous... et toutes mes dents :) )
 

esconde

XLDnaute Nouveau
Re : calcul de plage horaire

Bonsoir esconde,

Voyez le post #41 de ce fil :

https://www.excel-downloads.com/threads/calcul-de-durees.141595/

Le nombre de minutes entre 2 dates/heures est déterminé par la fonction VBA Minutes.

Si l'on veut obtenir des heures/minutes classiques :

- diviser le résultat de la fonction par 1440

- mettre la cellule au format personnalisé [h]:mm.

A+

Merci à toi JOB75.
je ne suis malheureusement pas un expert VB et ne suis pas arrivé à utiliser la macro
concernée. Peut-être l'ai-je mal enregistrée ?
Pourrais-je avoir qques explications concernant sa mise en oeuvre sur le cas soumis ?
merci encore.
 

job75

XLDnaute Barbatruc
Re : calcul de plage horaire

Re,

Pas besoin d'être "expert" en VBA pour ça, juste lire la fonction.

Voyez le fichier joint où j'ai placé les jours fériés 2012 2013 2014.

A+
 

Pièces jointes

  • delai HH MM(1).xls
    239 KB · Affichages: 35

job75

XLDnaute Barbatruc
Re : calcul de plage horaire

Re,

J'avais mis à l'origine la fonction en Volatile, ça ne me paraît pas du tout nécessaire.

Fichier (2).

Et je n'ai pas salué Patrick et Jean-Claude, salut chers amis :)

A+
 

Pièces jointes

  • delai HH MM(2).xls
    239 KB · Affichages: 38

Victor21

XLDnaute Barbatruc
Re : calcul de plage horaire

Bonsoir, JC, Gérard, esconde.

Redoutablement efficace, ce code, job75 :)

Mais comme moi aussi, je m'acharne, j'ai trouvé mon erreur (calcul des heures du premier jour en cas de journée unique :mad:), et vous livre, pour le plaisir, le résultat de mes cogitations "commentées", s'il vous plait ;)
=SI(NON(ESTERR([@[Dte Intervention]]-[@[Dte Ouverture]]));
+N("Premier jour")+
(ET(JOURSEM([@[Dte Ouverture]];2)<6;NON(NB.SI(feries;[@[Dte Ouverture]])))*ET(MOD([@[Dte Ouverture]];1)<18/24;MOD([@[Dte Ouverture]];1)>8/24)*
(ENT([@[Dte Ouverture]])<ENT([@[Dte Intervention]]))*(MAX(18/24;MOD([@[Dte Ouverture]];1))-MAX(8/24;MOD([@[Dte Ouverture]];1)))+
(ENT([@[Dte Ouverture]])=ENT([@[Dte Intervention]]))*(MIN(18/24;MOD([@[Dte Intervention]];1))-MAX(8/24;MOD([@[Dte Ouverture]];1))))+
+N("Dernier jour")+
(ET(JOURSEM([@[Dte Intervention]];2)<6;NON(NB.SI(feries;[@[Dte Intervention]])))*ET(MOD([@[Dte Intervention]];1)<18/24;MOD([@[Dte Intervention]];1)>8/24)*
(ENT([@[Dte Intervention]])>ENT([@[Dte Ouverture]]))*(MIN(18/24;MOD([@[Dte Intervention]];1))-MIN(8/24;MOD([@[Dte Intervention]];1))))
+N("Jours intermédiaires")+
+"10:"*MAX(0;NB.JOURS.OUVRES([@[Dte Ouverture]]+1;[@[Dte Intervention]]-1;feries));
"")

Les résultats correspondent à ceux de Gérard, gage s'il en est d'exactitude ;) ;)
 

Pièces jointes

  • delai HH MM.xlsx
    161.2 KB · Affichages: 36
  • delai HH MM.xlsx
    161.2 KB · Affichages: 40
  • delai HH MM.xlsx
    161.2 KB · Affichages: 38

job75

XLDnaute Barbatruc
Re : calcul de plage horaire

Bonjour le fil, le forum,

Magnifique ta formule Patrick, un grand bravo :)

Dans cette version, puisqu'il y a des secondes, je les affiche en remplaçant la fonction Minutes par Delai.

Et j'utilise aussi ton tableau pour les jours fériés.

Par curiosité j'ai calculé les durées d'exécution avec cette macro :

Code:
Sub a()
Dim x
x = Timer
[C2].Copy [C2:C2268]
MsgBox Timer - x
End Sub
Sur mon ordi Win XP - Excel 2003 :

- Patrick 0,55 seconde

- job75 0,44 seconde, les durées sont donc du même ordre.

A+
 

Pièces jointes

  • delai HH MM SS(1).xls
    242.5 KB · Affichages: 37
Dernière édition:

job75

XLDnaute Barbatruc
Re : calcul de plage horaire

Re,

Je viens de tester sur mon portable Win 7 - Excel 2010 :

- job75 0,96 seconde

- Patrick avec références tableau 0,18 seconde

- Patrick avec références normales 0,11 seconde.

Là y a pas photo.

A+
 

esconde

XLDnaute Nouveau
Re : calcul de plage horaire

Re,

J'avais mis à l'origine la fonction en Volatile, ça ne me paraît pas du tout nécessaire.

Fichier (2).

Et je n'ai pas salué Patrick et Jean-Claude, salut chers amis :)

A+

merci encore à toi pour cette réponse qui me satisfait complètement.
Petit problème : j'ai d'autres tableaux identiques où je dois réaliser les mêmes calculs
et ta formule =SI(ESTNUM(B2);Minutes(A2;B2)/1440;"") me donne #nom.
j'ai pris soin de paramétrer le bon format de la colonne délai d'intervention [h]:mm
nommer les plages Tableau1 et Feries comme dans la pièce retounée.

D'autre part qu'entends-tu par mettre la fonction en volatile ?
 

job75

XLDnaute Barbatruc
Re : calcul de plage horaire

Re,

La fonction Minutes doit être dans un module standard, pas dans le code d'une feuille.

Nulle part il n'y a de "Tableau1"...

La fonction du post #7 était volatile parce qu'il y avait Application.Volatile, voyez l'aide VBA.

A+
 

Discussions similaires

Réponses
12
Affichages
732

Membres actuellement en ligne

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia