Calcul nombre de jours samedi,dimanche et jours fériés entre deux dates
#1
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 18-08-2008 16h14
Bonjour tout le monde!Je cherche à obtenir le nombre de jours (samedi,dimache et jours fériés) entre deux dates.Savez vous si il existe une fonction prédéfinie dans excel retournant ce nombre de jours. Si non, quelqu'un aurait il une idée pour les calculer par vba? Parceque là, je ne vois pas trop comment faire...Merci pour votre aide!!!++Lannou
Hors Ligne
Rapport   Haut 

Re: Calcul nombre de jours samedi,dimanche et jours fériés entre deux dates
#2
Accro XLPages

Inscription: 09/05/2007
De Courcelles-les-Montbéliard

Messages: 286

Système d'exploitation:
PC & Mac
Version Excel utilisée:
Mac 2004 - 2011, et PC 2003 - 2010
Posté le : 18-08-2008 21h49
 Bonjour le forum

Malheureusement il n'existe pas de fonction toute faite pour répondre à ta demande.

Voici donc un code à mettre dans un module standard.
Option Explicit
'Déclaration d'un tableau de Type Date contenant 13 éléments
Dim DateFerie(13) As Date

Private Sub CreationTabFerie(vAnnee As Integer)
'Création dans un tableau des jours fériés suivant la date passée à la Sub
   DateFerie(1) = DateSerial(vAnnee, 1, 1)
   DateFerie(2) = PaquesVBA(vAnnee)
   DateFerie(3) = DateFerie(3) + 1
   DateFerie(4) = DateSerial(vAnnee, 5, 1)
   DateFerie(5) = DateSerial(vAnnee, 5, 8)
   DateFerie(6) = DateFerie(3) + 39
   DateFerie(7) = DateFerie(3) + 49
   DateFerie(8) = DateFerie(3) + 50
   DateFerie(9) = DateSerial(vAnnee, 7, 14)
   DateFerie(10) = DateSerial(vAnnee, 8, 15)
   DateFerie(11) = DateSerial(vAnnee, 11, 1)
   DateFerie(12) = DateSerial(vAnnee, 11, 11)
   DateFerie(13) = DateSerial(vAnnee, 12, 25)
End Sub

Public Function PaquesVBA(vAnnee As Integer) As Date
'Calcul de la Date de Pâques
'Code transcris d'une procédures récupérée sur une Base Technique 4D
Dim D1 As Byte
Dim D2 As Integer
Dim A As Double
Dim B As Double
Dim C As Date
Dim D As Date

D1 = 0
If vAnnee < 1700 Then
   D1 = 22
Else
   If vAnnee < 1900 Then
      D1 = 23
   Else
      If vAnnee < 2100 Then
         D1 = 24
      Else
         If vAnnee < 2300 Then D1 = 25
      End If
   End If
End If

D2 = -1
If vAnnee < 1700 Then
   D2 = 2
Else
   If vAnnee < 1800 Then
      D2 = 3
   Else
      If vAnnee < 1900 Then
         D2 = 4
      Else
         If vAnnee < 2100 Then
            D2 = 5
         Else
            If vAnnee < 2200 Then
               D2 = 6
            Else
               If vAnnee < 2300 Then D2 = 0
            End If
         End If
      End If
   End If
End If

A = ((19 * (vAnnee Mod 19)) + D1) Mod 30
B = ((2 * (vAnnee Mod 4)) + (4 * (vAnnee Mod 7)) + (6 * A) + D2) Mod 7
C = DateSerial(vAnnee, 3, 22 + A + B)
If Month(C) = 4 Then
   D = DateSerial(vAnnee, 4, A + B - 9)
   If Day(D) = 26 Then
      PaquesVBA = D - 7
   Else
      If (Day(D) = 25) And (A = 28) And (B = 6) And ((vAnnee Mod 19) > 10) Then
         PaquesVBA = D - 7
      Else
         PaquesVBA = D
      End If
   End If
Else
   PaquesVBA = C
End If

End Function

Function NbSamediDimancheFerie(vDateD As Date, vDateF As Date) As Integer
'Calcul du nombre de jours de samedi, de dimanche et jours fériés entre deux dates incluses
'vDateD est la date de début de la période
'vDateF est la date de fin de la période
Dim I As Integer'Valeur numérique correspoondant a une dateserie d'Excel
Dim J As Byte
Dim Compteur As Integer
'Initialisation du compteur
Compteur = 0
'Création du tableau des jours fériés de l'année
CreationTabFerie (Year(vDateD))
'début de la boucle
For I = vDateD To vDateF
   'Test si
   If WeekDay(I, 2) > 5 Then
      'c'est un samedi(6) ou un dimanche (7)
      Compteur = Compteur + 1
   Else
      'non ce n'est pas un samedi ou un dimanche
      'la valeur I est-elle présente dans le tableau des jours fériés
      For J = 1 To 13
         'test si la valeur I a une correspondance
         If DateFerie(J) = I Then Compteur = Compteur + 1
         'la valeur I est inférieure au jour férié contrôlé, sortie de la boucle
         If I < DateFerie(J) Then Exit For
      Next J
   End If
   'Test si le tableau des jours fériés doit être recalculé
   If Year(I) = Year(I + 1) Then CreationTabFerie (Year(vDateD) + 1)
Next I
NbSamediDimancheFerie = Compteur
End Function

J'espère que je n'ai pas dit trop de bêtises, le VBA n'étant pas mon domaine de prédilection. Didier me corrigera dès son retour. (j'y fais confiance).

Edit, j'ai oublié de préciser l'utilisation, il suffit de mettre dans une cellule la formule
=NbSamediDimancheFerie(A1;A2)
A1 ayant la date de début et A2 la date de fin (je me répète).

@+Jean-Marie


Edité par JeanMarie le 19/08/2008 01:17:27
Hors Ligne
Rapport   Haut 

Re: Calcul nombre de jours samedi,dimanche et jours fériés entre deux dates
#3
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 19-08-2008 17h14
Bonjour Jean Marie!Bonjour le forum!

Merci pour ta très rapide réponse. En attendant de voir ce qu'en pense Didier, je vais regarder ton code pour le comprendre, et le tester!

Je vous tiens au courant de ce que ca donne!

++
Hors Ligne
Rapport   Haut 

Re: Calcul nombre de jours samedi,dimanche et jours fériés entre deux dates
#4
Débutant XLPages

Inscription: 24/07/2007

Messages: 8

Version Excel utilisée:
2000
Posté le : 19-08-2008 18h14
Bonjour,

Après la belle intervention de Jean-Marie, j'apporte une solution formule beaucoup plus limitée (puisqu'elle ne calcule les fériés que sur 2 années maxi).

Voir le fichier joint

@+
Pièce jointe:
zip WE+JF.zip   [ Taille: 2.10 Ko - Téléchargements: 1466 ]
Hors Ligne
Rapport   Haut 

Re: Calcul nombre de jours samedi,dimanche et jours fériés entre deux dates
#5
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 21-08-2008 19h00
Bonjour Jean Marie, bonjour Tibo et bonjour le fourm!

Tibo :

Merci pour ton message! Imresssionnant ton fichier!Je l'ai regardé et effectivement, ca tourne très bien! Par contre pour mon cas, c'est vrai qu'une fonction serait plus pratique à utilisé et il n'y aurai pas cette limite des deux années...

Jean Marie :

Bon j'ai également pu regarder. De mon côté ca ne fonctionne pas et je n'ai pas réussi à voir pourquoi...Tu as essayé d'utiliser la fonction toi? Sinon, commes tu dits, attendons que didier jette un coup d'oeil peut être trouvera t'il...

En tout cas un grand merci à vous deux pour votre aide!

++

Lannou
Hors Ligne
Rapport   Haut 

Re: Calcul nombre de jours samedi,dimanche et jours fériés entre deux dates
#6
Accro XLPages

Inscription: 09/05/2007
De Courcelles-les-Montbéliard

Messages: 286

Système d'exploitation:
PC & Mac
Version Excel utilisée:
Mac 2004 - 2011, et PC 2003 - 2010
Posté le : 21-08-2008 19h49
Bonjour Lannou

Peux-tu nous détailler ce qui ne va pas. STP.

On va essayer de résoudre ton problème avant le retour de Didier.

@+Jean-Marie


Edité par JeanMarie le 21/08/2008 20:20:54
Hors Ligne
Rapport   Haut 

Re: Calcul nombre de jours samedi,dimanche et jours fériés entre deux dates
#7
Accro XLPages

Inscription: 23/05/2007
De Chamrousse

Messages: 309

Système d'exploitation:
PC
Version Excel utilisée:
2013
Posté le : 22-08-2008 12h30
Bonjour à tous,

Un essai par formule aussi et insertion de la Fonction de JeanMarie qui ne fonctionne pas chez moi non plus.

J'ai juste remarqué que le Lundi de Pâques devrait être, il me semble :

DateFerie(3) = DateFerie(2) + 1

A +à tous
Pièce jointe:
zip Sam Dim et Fer entre Dates.zip   [ Taille: 23.29 Ko - Téléchargements: 1011 ]


Cordialement
Hors Ligne
Rapport   Haut 

Re: Calcul nombre de jours samedi,dimanche et jours fériés entre deux dates
#8
Accro XLPages

Inscription: 09/05/2007
De Courcelles-les-Montbéliard

Messages: 286

Système d'exploitation:
PC & Mac
Version Excel utilisée:
Mac 2004 - 2011, et PC 2003 - 2010
Posté le : 22-08-2008 14h50
Bonjour

Exact Jean+Claude pour la mauvaise déclaration de l'élément 3 du tableau. Mais ce n'était pas la seule heure dans mon code, qui ne renvoyait pas de message d'erreur quand je l'ai créé sur mon mac.

Pour corriger le problème retournée par la function, il suffit de basculer les variables de Type Date en Long.

De plus j'ai rajouté dans la fonction de test des valeurs dates, l'effet Fête du travail et Ascension de l'année 2008.

Voici le code corrigé
Option Explicit 'JeanMarie sur mDFXLPages

''Déclaration d'un tableau de Type Date contenant 13 éléments
Dim DateFerie(13) As Long

Private Sub CreationTabFerie(vAnnee As Integer)
'Création dans un tableau des jours fériés suivant la date passée à la Sub
   DateFerie(1) = DateSerial(vAnnee, 1, 1)
   DateFerie(2) = PaquesVBA(vAnnee)
   DateFerie(3) = DateFerie(2) + 1
   DateFerie(4) = DateSerial(vAnnee, 5, 1)
   DateFerie(5) = DateSerial(vAnnee, 5, 8)
   DateFerie(6) = DateFerie(2) + 39
   DateFerie(7) = DateFerie(2) + 49
   DateFerie(8) = DateFerie(2) + 50
   DateFerie(9) = DateSerial(vAnnee, 7, 14)
   DateFerie(10) = DateSerial(vAnnee, 8, 15)
   DateFerie(11) = DateSerial(vAnnee, 11, 1)
   DateFerie(12) = DateSerial(vAnnee, 11, 11)
   DateFerie(13) = DateSerial(vAnnee, 12, 25)
End Sub

Public Function PaquesVBA(vAnnee As Integer) As Date
'Calcul de la Date de Pâques
'Code transcris d'une procédures récupérée sur une Base Technique 4D
Dim D1 As Byte
Dim D2 As Integer
Dim A As Double
Dim B As Double
Dim C As Date
Dim D As Date

D1 = 0
If vAnnee < 1700 Then
   D1 = 22
Else
   If vAnnee < 1900 Then
      D1 = 23
   Else
      If vAnnee < 2100 Then
         D1 = 24
      Else
         If vAnnee < 2300 Then D1 = 25
      End If
   End If
End If

D2 = -1
If vAnnee < 1700 Then
   D2 = 2
Else
   If vAnnee < 1800 Then
      D2 = 3
   Else
      If vAnnee < 1900 Then
         D2 = 4
      Else
         If vAnnee < 2100 Then
            D2 = 5
         Else
            If vAnnee < 2200 Then
               D2 = 6
            Else
               If vAnnee < 2300 Then D2 = 0
            End If
         End If
      End If
   End If
End If

A = ((19 * (vAnnee Mod 19)) + D1) Mod 30
B = ((2 * (vAnnee Mod 4)) + (4 * (vAnnee Mod 7)) + (6 * A) + D2) Mod 7
C = DateSerial(vAnnee, 3, 22 + A + B)
If Month(C) = 4 Then
   D = DateSerial(vAnnee, 4, A + B - 9)
   If Day(D) = 26 Then
      PaquesVBA = D - 7
   Else
      If (Day(D) = 25) And (A = 28) And (B = 6) And ((vAnnee Mod 19) > 10) Then
         PaquesVBA = D - 7
      Else
         PaquesVBA = D
      End If
   End If
Else
   PaquesVBA = C
End If

End Function

Function NbSamediDimancheFerie(vDateD As Long, vDateF As Long) As Integer
'Calcul du nombre de jours de samedi, de dimanche et jours fériés entre deux dates incluses
'vDateD est la date de début de la période
'vDateF est la date de fin de la période
Dim I As Long 'Valeur numérique correspoondant a une dateserie d'Excel
Dim J As Byte
Dim Compteur As Integer
'Initialisation du compteur
Compteur = 0
'Création du tableau des jours fériés de l'année
CreationTabFerie (Year(vDateD))
'début de la boucle
For I = vDateD To vDateF
   'Test si
   If Weekday(I, 2) > 5 Then
      'c'est un samedi(6) ou un dimanche (7)
      Compteur = Compteur + 1
   Else
      'non ce n'est pas un samedi ou un dimanche
      'la valeur I est-elle présente dans le tableau des jours fériés
      For J = 1 To 13
         'test si la valeur I a une correspondance
         If DateFerie(J) = I Then
            Compteur = Compteur + 1
            'Sortie forcée de la boucle, Cas du 1/5/08 (F. du Travail et Ascension)
            Exit For
         End If
         'la valeur I est inférieure au jour férié contrôlé, sortie de la boucle
         If I < DateFerie(J) Then Exit For
      Next J
   End If
   'Test si le tableau des jours fériés doit être recalculé
   If Year(I) <> Year(I + 1) Then CreationTabFerie (Year(I + 1))
Next I
NbSamediDimancheFerie = Compteur
End Function
  

Désolé pour ces grossières erreurs.

Pour ce qui est du code, je teste toutes les dates entre les bornes, ce qui est long. Une autre manière consisterait à utiliser la fonction DateDiff qui peut retourner le nombre de semaines entre deux bornes et tester le WeekDay des jours fériés.

@+Jean-Marie








Hors Ligne
Rapport   Haut 

Re: Calcul nombre de jours samedi,dimanche et jours fériés entre deux dates
#9
Accro XLPages

Inscription: 23/05/2007
De Chamrousse

Messages: 309

Système d'exploitation:
PC
Version Excel utilisée:
2013
Posté le : 22-08-2008 15h23
Bonjour à tous,

Ton code fonctionne parfaitement.

Au plaisir de te voir coder de nouveau

A + à tous.

PS : XLxx sous Mac accepte t'il les dates antérieures au 01/01/1900 ?




Cordialement
Hors Ligne
Rapport   Haut 

Re: Calcul nombre de jours samedi,dimanche et jours fériés entre deux dates
#10
Accro XLPages

Inscription: 09/05/2007
De Courcelles-les-Montbéliard

Messages: 286

Système d'exploitation:
PC & Mac
Version Excel utilisée:
Mac 2004 - 2011, et PC 2003 - 2010
Posté le : 22-08-2008 16h00
Re...

Non Jean-Claude, pourquoi veux-tu qu'Excel mac travaille différement sur les dates par rapport à la version PC, il y a déjà trop de différences.

@+Jean-Marie 
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes