1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
| Option Explicit
Private Const kJourDeLAn As String = "Jour de l'an"
Private Const kLundiDePaques As String = "Lundi de Pâques"
Private Const kFeteDuTravail As String = "Fête du travail"
Private Const kVictoireDe1945 As String = "Victoire de 1945"
Private Const kAscension As String = "Ascension"
Private Const kPentecote As String = "Pentecôte"
Private Const kFeteNationale As String = "Fête nationale"
Private Const kAssomption As String = "Assomption"
Private Const kToussaint As String = "Toussaint"
Private Const kArmistice As String = "Armistice"
Private Const kNoel As String = "Noël"
Private m_AnneeDeReference As Integer
Private m_theLstJoursFeries As USortedCollection
Public Property Let AnneeDeReference(pintAnnee As Integer)
If pintAnnee <> m_AnneeDeReference Then
' Modification de l'année => Il faut recalculer la liste des jours fériés
Let m_AnneeDeReference = pintAnnee
Set m_theLstJoursFeries = New USortedCollection ' On recrée la collection
Call zzCalculeLesDifferentsJoursFeries
End If
End Property
Public Property Get AnneeDeReference() As Integer
Let AnneeDeReference = m_AnneeDeReference
End Property
Public Function EstJourFerie(pDate As Date) As Boolean
Dim i As Integer
Dim ltmpJourFerie As CJourFerie
'Begin
For i = 1 To m_theLstJoursFeries.Count
Set ltmpJourFerie = m_theLstJoursFeries.Item(i)
If ltmpJourFerie.theDate = pDate Then
Let EstJourFerie = True
Exit For
End If
Next i
End Function
Public Function DescriptionListeJoursFeries() As String
Dim i As Integer
Dim lJourFerie As CJourFerie
Dim lstrResult As String
'Begin
Let lstrResult = "En excluant les jours fériés suivants :"
For i = 1 To m_theLstJoursFeries.Count
Set lJourFerie = m_theLstJoursFeries.Item(i)
Let lstrResult = lstrResult & vbLf & " " & lJourFerie.theDate & " : " & lJourFerie.Description
Next i
Let DescriptionListeJoursFeries = lstrResult
End Function
Private Sub zzCalculeLesDifferentsJoursFeries()
Dim lJourFerie As CJourFerie
Dim lMod1 As Integer ' Pour calcul jour de Pâques
Dim lMod2 As Integer ' Pour calcul jour de Pâques
Dim lPremierMars As Date ' Pour calcul jour de Pâques
Dim lOffset2856 As Byte ' Pour calcul jour de Pâques
Dim lOffset2956 As Byte ' Pour calcul jour de Pâques
Dim ldateJourDePaques As Date
Dim lItemIndex As Byte
'Begin
Let lItemIndex = 1
' CALCUL JOUR DE L'AN
Set lJourFerie = New CJourFerie
Let lJourFerie.Code = lItemIndex
Let lJourFerie.Description = kJourDeLAn
Let lJourFerie.theDate = CDate("01/01/" & Str$(m_AnneeDeReference))
Call m_theLstJoursFeries.AddUnique(lJourFerie)
Let lItemIndex = lItemIndex + 1
' CALCUL DU LUNDI DE PAQUES... C'EST LE PLUS COMPLIQUÉ
Set lJourFerie = New CJourFerie
Let lJourFerie.Code = lItemIndex
Let lJourFerie.Description = kLundiDePaques
Let lMod1 = m_AnneeDeReference Mod 19
Let lMod2 = (204 - (11 * lMod1)) Mod 30
Let lPremierMars = CDate("01/03/" & Str$(m_AnneeDeReference))
Let lOffset2856 = Val(28.56 + 0.979 * lMod2)
Let lOffset2956 = Val(29.56 + 0.979 * lMod2 - Weekday(DateAdd("d", lOffset2856, lPremierMars)))
Let ldateJourDePaques = DateAdd("d", lOffset2956, lPremierMars)
Let lJourFerie.theDate = DateAdd("d", 1, ldateJourDePaques) ' NB : le LUNDI de pâques est le lendemain du JOUR de pâques
Call m_theLstJoursFeries.AddUnique(lJourFerie)
Let lItemIndex = lItemIndex + 1
' CALCUL FÊTE DU TRAVAIL (1er MAI)
Set lJourFerie = New CJourFerie
Let lJourFerie.Code = lItemIndex
Let lJourFerie.Description = kFeteDuTravail
Let lJourFerie.theDate = CDate("01/05/" & Str$(m_AnneeDeReference))
Call m_theLstJoursFeries.AddUnique(lJourFerie)
Let lItemIndex = lItemIndex + 1
' CALCUL VICTOIRE DE 1945 (8 MAI)
Set lJourFerie = New CJourFerie
Let lJourFerie.Code = lItemIndex
Let lJourFerie.Description = kVictoireDe1945
Let lJourFerie.theDate = CDate("08/05/" & Str$(m_AnneeDeReference))
Call m_theLstJoursFeries.AddUnique(lJourFerie)
Let lItemIndex = lItemIndex + 1
' CALCUL DE L'ASCENSION (39 jours après le lundi de pâques)
Set lJourFerie = New CJourFerie
Let lJourFerie.Code = lItemIndex
Let lJourFerie.Description = kAscension
Let lJourFerie.theDate = DateAdd("d", 39, ldateJourDePaques)
Call m_theLstJoursFeries.AddUnique(lJourFerie)
Let lItemIndex = lItemIndex + 1
' CALCUL DE LA PENTECÔTE (50 jours après le lundi de pâques)
Set lJourFerie = New CJourFerie
Let lJourFerie.Code = lItemIndex
Let lJourFerie.Description = kPentecote
Let lJourFerie.theDate = DateAdd("d", 50, ldateJourDePaques)
Call m_theLstJoursFeries.AddUnique(lJourFerie)
Let lItemIndex = lItemIndex + 1
' CALCUL DE LA FÊTE NATIONALE (14 JUILLET)
Set lJourFerie = New CJourFerie
Let lJourFerie.Code = lItemIndex
Let lJourFerie.Description = kFeteNationale
Let lJourFerie.theDate = CDate("14/07/" & Str$(m_AnneeDeReference))
Call m_theLstJoursFeries.AddUnique(lJourFerie)
Let lItemIndex = lItemIndex + 1
' CALCUL DE L'ASSOMPTION (15 AOÛT)
Set lJourFerie = New CJourFerie
Let lJourFerie.Code = lItemIndex
Let lJourFerie.Description = kAssomption
Let lJourFerie.theDate = CDate("15/08/" & Str$(m_AnneeDeReference))
Call m_theLstJoursFeries.AddUnique(lJourFerie)
Let lItemIndex = lItemIndex + 1
' CALCUL DE LA TOUSSAINT (1er NOVEMBRE)
Set lJourFerie = New CJourFerie
Let lJourFerie.Code = lItemIndex
Let lJourFerie.Description = kToussaint
Let lJourFerie.theDate = CDate("01/11/" & Str$(m_AnneeDeReference))
Call m_theLstJoursFeries.AddUnique(lJourFerie)
Let lItemIndex = lItemIndex + 1
' CALCUL DE L'ARMISTICE (11 NOVEMBRE)
Set lJourFerie = New CJourFerie
Let lJourFerie.Code = lItemIndex
Let lJourFerie.Description = kArmistice
Let lJourFerie.theDate = CDate("11/11/" & Str$(m_AnneeDeReference))
Call m_theLstJoursFeries.AddUnique(lJourFerie)
Let lItemIndex = lItemIndex + 1
' CALCUL DU JOUR DE NOEL (25 DECEMBRE)
Set lJourFerie = New CJourFerie
Let lJourFerie.Code = lItemIndex
Let lJourFerie.Description = kNoel
Let lJourFerie.theDate = CDate("25/12/" & Str$(m_AnneeDeReference))
Call m_theLstJoursFeries.AddUnique(lJourFerie)
End Sub |
Partager