OVH Cloud OVH Cloud

VB.NET et les jours fériés

12 réponses
Avatar
aitoz
Bonjour à tous,

Je souhaiterais savoir comment faire pour ajouter des jours a une date, mais
en tenant compte des jours fériés.
Comment d'après vous je peux faire ?
En stockant le jours fériés quelque part ?
Est-ce que ca existe dans une fonction toute faites ? mais alors comment
savoir si c'est fériés, puisque ca dépend du pays ou mon appli va etre
utilisée ?
Est-ce que c'est stocké dans les paramètres windows ?

Toute information sera la bien venue.

Merci par avance

Laurent

2 réponses

1 2
Avatar
Etudiant
voici ce que j'utilise pour la france

'******************************************
'** Module de calcul de jours **
'** Auteur : Christian POMPIER **
'** Date de modification : 12/02/2005 **
'******************************************

Module NbrJour
'///<summary>
'Renvoie le nombre de jour pour les locations
'///</summary>

Private TabJF(10) As String 'Tableau contenant les jours fériés

Public Function CalculNbrJour(ByVal WE As Boolean, ByVal DateDebut
As Date, ByVal DateFin As Date) As Double
'///<summary>
'Renvoie le nombre de jour pour les locations en prenant en
compte les We ou non
'Le +1 sert a prendre en compte la date de depart et la date de
fin comme jour inclus dans la location
'///</summary>

Dim NbreJour As Double = 0

If DateDebut.Date = DateFin.Date Then
NbreJour = 1
Else
NbreJour = DateDiff(DateInterval.Day, DateDebut, DateFin) +
1 'difference entre les 2 dates +1
End If

If Not WE Then 'les WE ne sont pas pris en compte

Dim tmpDate As Date = DateDebut

Remplir_Jours_Feries() 'on remplit le tableau de jours fériés

While tmpDate <= DateFin

Dim blnTeste As Boolean = False

If tmpDate.DayOfWeek = DayOfWeek.Sunday Or
tmpDate.DayOfWeek = DayOfWeek.Saturday Then 'si c'est un jour du WE
samedi ou dimanche
NbreJour -= 1 'on enleve un jour au nombre total de
jour
blnTeste = True 'On le passe a true pour eviter de
le reverifier dans les jours feries car on pourrait enlever 2*-1 alors
que c'est le meme jour
End If

If Not blnTeste Then

Dim i As Integer = 0

For i = 0 To TabJF.Length - 1 'on balaie le tableau
de jours fériés pour voir si notre date ne correspond pas

If tmpDate = TabJF(i) Then
NbreJour -= 1
blnTeste = True
End If

Next

End If

tmpDate = tmpDate.AddDays(1) 'on ajoute un jour a la date

End While

Return NbreJour

Else

Dim tmpDate As Date = DateDebut

While tmpDate <= DateFin

If tmpDate.DayOfWeek = DayOfWeek.Sunday Then 'si
c'est un jour du WE dimanche
NbreJour -= "0,5" 'on enleve un jour au nombre
total de jour
End If

tmpDate = tmpDate.AddDays(1) 'on ajoute un jour a la date

End While

Return NbreJour 'on retourne le nombre de jours au total

End If

End Function

Private Sub Remplir_Jours_Feries()
'///<summary>
'Permet de remplir le tableau contenant les jours féries
'///</summary>

Dim Annee As Integer = Date.Now.Year

TabJF(0) = "01/01/" & Annee ' 1° de l'AN
TabJF(1) = "01/05/" & Annee '1° Mai Fete du travail
TabJF(2) = "08/05/" & Annee '8 Mai Armistice 39-45
TabJF(3) = "14/07/" & Annee '14 juillet Fete national
TabJF(4) = "15/08/" & Annee 'Assomption
TabJF(5) = "01/11/" & Annee 'Toussaint
TabJF(6) = "11/11/" & Annee 'Armistice de 14-18
TabJF(7) = "25/12/" & Annee 'Noel

'Nous allons calculer la date de pâques avec cette formule
qu'on peut pas inventer ;)
Dim A = Annee Mod 19
Dim B = Annee Mod 4
Dim C = Annee Mod 7
Dim D = ((A * 19) + 24) Mod 30

If D = 29 Then D = 28
If D = 28 And A > 10 Then D = 27

Dim E = ((2 * B) + (4 * C) + (6 * D) + 5) Mod 7

If D + E >= 10 Then
TabJF(8) = D + E - 9 & "/04/" & Annee 'date de paques
Else
TabJF(8) = 22 + D + E & "/03/" & Annee 'date de paques
End If

'Ensuite nous avons l'ascension qui est 40 jours apres paques
TabJF(9) = CDate(TabJF(8)).AddDays(40)

'Ensuite Pentecote est 10 jours apres l'ascension
TabJF(10) = CDate(TabJF(9)).AddDays(10)

'Voila notre tableau de jours fériés est remplit

End Sub

End Module
Avatar
aitoz
Ouah !

Ok, ca va etre un peu long a digérer. Mais je vais devoir le faire, alors il
faudra bien y passer ! lol

Merci beaucoup en tous cas
1 2