Calcul du nombre de jour ouvrés entre 2 dates

Numéro d'article: 467035 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F17035
Agrandir tout | Réduire tout

Résumé

Question :
==========

Comment calculer le nombre de jours ouvré entre 2 dates ?


Réponse :
=========

Le code ci-dessous ne gére pas les jours fériés.




? WorkWeek({05/09/95},{25/09/95})



FUNCTION WOrkWeek
PARAMETERS P_Date1, P_Date2

PRIVATE LIKE L_*

L_Journum = 0
L_NbjTot = 0
L_Nbjtrait = 0
L_JourPos = 0
L_Semaine = 0
L_NbjOuv = 0
*Calcul du nombre réel de jour entre L_Date1 et L_Date2
L_NbjDiff = P_Date2 - P_date1
*---------------------
* Callage sur un Lundi
*---------------------
L_NbjTot = L_NbjDiff
L_Nbjtrait = 0 && Contient le nombre de jour réels déjà traités
L_JourPos = 0 && Contient le N° de jour du Jour en cours de
decompte

L_Journum = DOW(P_Date1)
If L_Journum = 1 Or L_Journum = 7 Then && Test si Dimanche ou
Samedi
*-----------------------
* On est sur un Week End
*-----------------------
If L_Journum = 7 Then && Samedi
L_Nbjtrait = 1 && On a traité dimanche
L_JourPos = 2 && Le voilà notre premier Lundi
*----------------------------
*L_NbJouv est toujours à zéro
*----------------------------
EndIf
Else
*------------------------
*Ce N'est pas un Week End
*------------------------
If L_NbjTot < 7 Then
*------------------------------------
*Le total fait moins de 7 jours
*et le début est en milieu de semaine
*------------------------------------
If L_NbjTot + Journum < 6 Then
L_Nbjtrait = L_NbjTot
L_NbjOuv = L_NbjTot
*----------
*C'est fini
*----------
EndIf
Else
* Le total fait plus de 7 Jours et le début
* est en milieu de Semaine
*1) Ajustement au Lundi
L_Nbjtrait = (7 - L_Journum) + 1
L_NbjOuv = 6 - L_Journum
EndIf
EndIf

--
* A ce stade Si L_Nbjtrait < L_NbjTot on continue avec des semaines
pleines
* On ne traite que des semaines pleines

--
If L_Nbjtrait < L_NbjTot Then
* Ici on traite les x semaines pleines du solde des jours
* restants
L_Semaine = Int((L_NbjTot - L_Nbjtrait) / 7)
If L_Semaine > 0 Then
L_NbjOuv = L_NbjOuv + (L_Semaine * 5)
L_Nbjtrait = L_Nbjtrait + (L_Semaine * 7)
EndIf
* Ici de toute façon, on est sur un Lundi, et le reste
* n'est pas un semaine pleine (il faut le cas échéant
* Gommer la fin de la semaine
If L_NbjTot - L_Nbjtrait = 6 Then
L_NbjOuv = L_NbjOuv + 5
Else
L_NbjOuv = L_NbjOuv + (L_NbjTot - L_Nbjtrait)
EndIf
EndIf
Return L_NbjOuv
END FUNCTION

Propriétés

Numéro d'article: 467035 - Dernière mise à jour: vendredi 1 août 1997 - Version: 1.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual FoxPro 3.0 Édition Standard
Mots-clés : 
user KB467035
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com