Calul de la date de fin à partir d'une durée - enlève les week-ends

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 714 fois - Téléchargée 28 fois

Contenu du snippet

Cette fonction calcule la date de fin à partir d'une date de début et d'une durée. Pas compliqué. Mais là où ça se corse c'est qu'il faut enlever les week-ends.
Cette fonction utilise la récursivité.

Source / Exemple :


<%
'//---------------------------------------------------------------------------
'//                  CALCULE la date de fin et Enlève les jours des week-ends
'//---------------------------------------------------------------------------
dim cpte
Function CalculDateFin(DateD, duree)
        
    Dim NbJourWE
    Dim DateC, DateFin

   '//Cas de la durée non entière : ex. 2,5 jours	
   If (CStr(duree) > CStr(Int(duree))) Then
        duree = duree + 1
   End If    

    DateC = DateD
    DateFin = DateAdd("d", Int(duree), DateC)
    If (cpte = 0) Then
        DateFin = DateAdd("d", duree - 1, DateC)
    Else
        If (DatePart("w", DateC) = 1 Or DatePart("w", DateC) = 7) Then
            DateC = DateAdd("d", 1, DateC)
        End If
    End If
    
    cpte = cpte + 1
    While (CDate(DateC) <= DateFin)
           
        If (DatePart("w", DateC) = 1 Or DatePart("w", DateC) = 7) Then
            NbJourWE = NbJourWE + 1
        End If
        DateC = DateAdd("d", 1, DateC)
       

    Wend
    If (NbJourWE > 0) Then
        DateFin = CalculDateFin(DateFin, NbJourWE)
        NbJourWE = 0
    End If
    cpte = 0
    CalculDateFin = DateFin
    
         
End Function
%>

Conclusion :


J'espère que cette fonction sera utile à quelqu'un.
J'ai la même fonction en C++ et une autre plus simple qui calcule la durée entre 2 dates sans compter les week-ends
A bientôt
Tatal

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

autant pour moi, DatePart("w", DateC) est bon également puisqu'il te renvoi le numéro du jour peu importe le premier jour de la semaine.
Messages postés
1251
Date d'inscription
mercredi 7 août 2002
Statut
Modérateur
Dernière intervention
10 avril 2013

Attention car la fonction DatePart pourrait te renvoyer 6 ou 7 au lieu de 7 ou 1, le mieux serait de forcer la fonction en définissant quel est le premier jour de la semaine ( lundi ou dimanche) ce qui donnerait :
DatePart("w", DateC, vbSunday) dans ton cas.

Comme le dit Bud, y a plus simple ;o)
DateT = DateD
i = 0
tant que i < duree faire
DateT = DateAdd("d",1,DateT)
si DatePart("w", DateT, vbSunday) <> 1 and DatePart("w", DateT, vbSunday) <>7 faire
i = i +1
fin si
fin tant que

mafonction = DateT

ca devrait etre un truc du genre :o)
Messages postés
224
Date d'inscription
vendredi 14 septembre 2001
Statut
Membre
Dernière intervention
14 juillet 2006

Autant pour moi, je l'avais pas vu celle-ci.
Mais il n'y aurait pas eu plus simple?
Du style compter le nombre de semaine dans la durée (sachant qu'il y a 5 jours dans la semaine) et rajouter encore 2 jours si il faut...
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
C'est recursif car la fonction s'appelle elle meme 6 lignes avant la fin.
Messages postés
224
Date d'inscription
vendredi 14 septembre 2001
Statut
Membre
Dernière intervention
14 juillet 2006

En quoi c'est récursif?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.