Estelle_BNP
Messages postés25Date d'inscriptionjeudi 14 décembre 2006StatutMembreDernière intervention10 mai 2008
-
5 mars 2008 à 15:23
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 2011
-
5 mars 2008 à 17:37
Bonjour,
je souhaite créer une fonction sous VBA que je puisse réutiliser dans Excel qui me permet de décaler une date de jj jours, mm mois et/ou yy années et qui m'indique la première date ouvrée qui correspond à cette date décalée.
Est-ce qu'il existe sous Excel ou VBA une fonction qui me permet de savoir si une date est un jour ouvré ou non ?
Si oui, quelle est-elle ?
Si non, pouvez-vous m'aider à construire une telle fonction ?
vicelow5901
Messages postés27Date d'inscriptionvendredi 27 octobre 2006StatutMembreDernière intervention 7 mars 2008 5 mars 2008 à 15:38
essaie sa ;-)
Public Function NbOuvrés&(D1, D2)
Dim Prem As Date, Der As Date, i As Date
If D1 D2 Then Prem D1
If TYPEJOUR(Prem) = 0 Then
NbOuvrés = 1
Exit Function
End If
Prem = D1
Der = D2
For i = Prem To Der
NbOuvrés NbOuvrés + (TYPEJOUR(i) 0) * -1
Next i
End Function
'Cette fonction renvoie 0 si le jour passé en paramètre est un jour de semaine,
'1 s'il s'agit d'un samedi ou d'un dimanche et 2 s'il s'agit d'un jour férié.
'Valide jusqu'en 2099 et pour les jours fériés français
Public Function TYPEJOUR(D As Date)
'L. Longre
Dim A As Integer, t As Integer
Dim LP As Date, LD As Long
Dim Toto As Long
A = Year(D)
If A > 2099 Then
TYPEJOUR = 0
Exit Function
End If
LD = Int(D)
If LD <= 2 Then
If LD = 1 Then
TYPEJOUR = 2
Exit Function
End If
End If
t = (((255 - 11 * (A Mod 19)) - 21) Mod 30) + 21
LP = DateSerial(A, 3, 2) + t + (t > 48) _
+ 6 - ((A + A \ 4 + t + (t > 48) + 1) Mod 7)
Select Case D
' Jours fériés mobiles Case Is LP, Is LP + 38, Is = LP + 49
TYPEJOUR = 2
' Jours fériés fixes
Case Is DateSerial(A, 1, 1), Is DateSerial(A, 5, 1), _ Is DateSerial(A, 5, 8), Is DateSerial(A, 7, 14), _ Is DateSerial(A, 8, 15), Is DateSerial(A, 11, 1), _ Is DateSerial(A, 11, 11), Is DateSerial(A, 12, 25)
TYPEJOUR = 2
Case Else
' Samedi ou dimanche
If Weekday(D, vbMonday) >= 6 Then
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 5 mars 2008 à 17:37
S'il s'agit juste de calculer le nb de jours ouvrés entre deux dates, en enlevant le samedi et les jours fériés, autant utiliser directement la fonction EXCEL (qui n'est pas renseignée dans l'aide, mais qui existe bien) :
Par contre, il faut peut être cocher la case Utilitaire d'analyse dans les macros complémentaires pour qu'elle fonctionne, je ne me souviens plus.
Personnellement, je préfère utiliser une fonction que je me suis faite, afin de pouvoir configurer les jours ouvrés (et oui, pour certains, le samedi est considéré ouvré et le lundi chômé par exemple ^^).
Mais elle devrait être suffisante pour répondre à ton besoin je pense.