explication d'une fonction

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 !

sonskriverez

XLDnaute Occasionnel
bonjour le forum

J'ai trouvé dans archives du forum cette fonction de calcul d 'heures ouvrées et j'avoue que je ne comprend pas tout, qui pourrait me la décortiquer.

Merci de votre aide

Function HeureOuvrées(Début, Fin, PlageFériés)
For i = Début * 1 To Fin * 1 Step TimeValue("0:01")
If Hour(i) >= 8 And Hour(i) < 18 And Day(i) = Day(i + TimeValue("0:01")) _
And Application.CountIf([PlageFériés], CDate(Int(i)) * 1) = 0 _
And Weekday(CDate(Int(i)) * 1, 2) < 6 Then x = x + 1
Next
HeureOuvrées = x / 1440
End Function
 
Re : explication d'une fonction

Bonjour sonskriverez

voici une belle fonction et tres utile
Donc d'apres ce que je comprends, on à debut, fin et Plage ferié
debut : doit comprendre Date et heure de debut,
Fin : Date et heure de Fin

Ensuite on a un
for i = debut to fin step "0:01" --> traite chaque minutes
si > 8h, et < 18h et que le jour = à ce jour et que ce n'est pas un jour ferie et que ce n'est pas un samedi ou un dimanche alors j'ajoute 1 à x

à la fin de la boucle, X / 1440 (24*60) --> (24h*60mn)
 
Re : explication d'une fonction

Bonjour Wilfried,

Merci pour tes explications j'avais pas vraiment tou compris, par contre ça marche super bien mais il faut être patient sa mouline si il y a des grosses différence dommage.

Mais quand même à garder sous le coude
 
Re : explication d'une fonction

bonjour sonskriverez

salut Wilfried

je pense qu'il y aune erreur

en effet voila comment je vois les choses

Code:
Function HeureOuvrées(Début, Fin, PlageFériés)
'debut et fin sont des dates ,PlageFériés est une plage (range)
'pour assurer même si debut et fin ne sont pas spécifiés en date on multiplie par 1
'de façon a avoir un nombre
'on balaie le temps compris entre debut et fin pas pas de 1 minute
For i = Début * 1 To Fin * 1 Step TimeValue("0:01")
'on verifie que la minute en question est bien située entre 8h00 et 18h00
'que la date n'est pas dans la plage repertoriant les jours fériés
'et que le jour de la semaine n'est ni un samedi ni un dimanche
'si oui on ajoute une minute a x
If Hour(i) >= 8 And Hour(i) < 18 And Day(i) = Day(i + TimeValue("0:01")) _
And Application.CountIf([PlageFériés], CDate(Int(i)) * 1) = 0 _
And Weekday(CDate(Int(i)) * 1, 2) < 6 Then x = x + 1
Next
[COLOR=red]'le nombre d'heures ouvrées est donc de x divisé par 60
HeureOuvrées = x / 60
[/COLOR]End Function

la version
/1440 donnerait plutot les Jours ouvrés (de 24h00 !!!!!)

Attention cela suppose qu'il n'y a pas d'arrêt a midi

en resumé: a manier avec precaution
 
Re : explication d'une fonction

Bonjour PierreJean

tu as raison le resultat est effectivement en Jours Ouvrés mais comme j'utilise le format [hh]:mm en voila la raison.
Et bien sur cela fonctionne dans une plage sans poses.

Par Contre si quelqu'un à mieux je suis preneur
 
Re : explication d'une fonction

re:
bonjour pierre jean

tu peux changer le pas, la c'est toutes les minutes step 0:01 avec un step 0:02 tu gagnes la moitie du temps mais il ne fut pa oublier de * par 2 le résultat

pour y integrer les poses

If Hour(i) >= 8 And Hour(i) < 18 And Day(i) = Day(i + TimeValue("0:01")) _
devient :
If Hour(i) >= 8 And Hour(i) < 12 And Day(i) = Day(i + TimeValue("0:01")) _
and Hour(i) >= 14 And Hour(i) < 18 And Day(i) = Day(i + TimeValue("0:01")) _

si la plage est variable

Function HeureOuvrées(Début, Fin, PlageFériés,deb_pose,fin_pose)
If Hour(i) >= 8 And Hour(i) < deb_pose And Day(i) = Day(i + TimeValue("0:01")) _
and Hour(i) >= fin_pose And Hour(i) < 18 And Day(i) = Day(i + TimeValue("0:01")) _
 
Dernière édition:
- 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

Réponses
3
Affichages
439
Retour