calcul de plage horaire

  • Initiateur de la discussion Initiateur de la discussion esconde
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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 😱


Erreur : Oubliez, et regardez le #9 😱 😡
 
Dernière édition:
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
 
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 🙂 )
 
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.
 
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 😡), 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

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

Dernière édition:
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+
 
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 ?
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour