Dans cet article, nous verrons comment calculer les heures de travail entre deux dates. Ces informations peuvent être nécessaires à la fois pour l'analyse de l'efficacité du travail des salariés et pour le calcul du temps utile passé dans le cas d'un système de rémunération à la pièce.
Alors, écrivons notre propre fonction pour nous aider à compter les heures de travail et appelons-la WORKHOURS.
Ouvrir le menu Service - Macro - Editeur Visual Basic , insérez le nouveau module (menu
Function WORKHOURS(StartDate As Variant, EndDate As Variant) Application.Volatile StartDate = StartDate.Address EndDate = EndDate.Address ' heures de travail du premier jour WORKHOURS1 = Evaluate("IF(AND(DAY(" & StartDate & ")=DAY(" & _ EndDate & "),MONTH(" & StartDate & ")=MONTH(" & EndDate & "))," & EndDate & _ "-" & StartDate & "-IF(AND(HOUR(" & StartDate & ")<=13,HOUR(" & EndDate & _ ")>=14),1/24,0),18/24-MOD(" & StartDate & ",1)-IF(HOUR(" & StartDate & _ ")<=13,1/24,0))") ' horaires de travail des jours intermédiaires WORKHOURS2 = Evaluate("MAX((IF(AND((WEEKDAY(" & EndDate & ",2))"&"<"&"(WEEKDAY(" & StartDate & _ ",2)),((WEEKDAY(" & StartDate & ",2))-(WEEKDAY(" & EndDate & ",2)))>1),(((DATEDIF(" & StartDate & _ "," & EndDate & "," & """D""" & ")+1))-(FLOOR((DATEDIF(" & StartDate & "," & EndDate & _ "," & """D""" & ")+1)/7,1)*2)-2),(((DATEDIF(" & StartDate & "," & EndDate & "," & """D""" & ")+1))-(FLOOR((DATEDIF(" & _ StartDate & "," & EndDate & "," & """D""" & ")+1)/7,1)*2)))-2),0)*8/24") ' heures de travail du dernier jour WORKHOURS3 = Evaluate("IF(AND(DAY(" & StartDate & _ ")=DAY(" & EndDate & "),MONTH(" & StartDate & ")=MONTH(" & EndDate & ")),0,MOD(" & EndDate & _ ",1)-9/24-IF(HOUR(" & EndDate & ")>=14,1/24,0))") WORKHOURS = WORKHOURS1 + WORKHOURS2 + WORKHOURS3 End Function
Fermez l'éditeur Visual Basic et revenez à Excel.
Maintenant en Maîtres de fonctions dans la catégorie Défini par l'utilisateur vous pouvez trouver notre fonction WORKHOURS et l'utiliser. Syntaxe de la fonction suivant:
=WORKHOURS(start_date; end_date)