Création d'1 liste de jours fériés

  • Initiateur de la discussion Laura
  • Date de début
L

Laura

Guest
Bonjour le Forum

Je suis en train de travailler sur le nombre de jours ouvrés dans une plage donnée)

Les jours ouvrés ne comprennent ni les weekend, ni les jours fériés.

01-janv, 28-mars, 01-mai,08-mai,14-juil,15-août,01-nov,25-déc.

Je souhaite donc créer une liste nommée FER des jours fériés mais qui n'apparait pas dans mon document : je n'ai pas envie de faire figurer les dates sur mon document, meme de facon invisible (en blanc ou sur une feuille cachée)

Est il possible de créer une liste, que l'on peut appeller dans une formule mais qui n'apparait pas physiquement sur la feuille ?

J'espere que vous avez compris ma question... difficile à expliquer :)

Merci d'avance pour vos conseils, Laura
 
L

lostgen67

Guest
Bonjour,
je suis tombé sur ce bout de programme bien sympa

- a mettre dans un USF pour appeler la fonction

Function jourFeriés(dateJour As Date) As Boolean
'comparaison
Dim i As Integer
For i = 1 To nbJoursFériés
jourFeriés = False
If dateJour = joursFériés(i) Then
'Message ' >' & dateJour & '<>' & joursFériés(i) & '<'
jourFeriés = True
libellé = libJoursFériés(i)
i = 20
End If
Next
End Function

' a mettre dans ton sub pour declencher un evenement...

If jourFeriés((DateValue(dateTraitée))) = True Then
.....

-a mettre dans un module

Option Explicit
Public joursFériés(1 To 15) As Date
Public libJoursFériés(1 To 15) As String, libellé As String
Public nbJoursFériés As Integer


Sub calculJoursFériés(Année As Integer)
nbJoursFériés = 1
joursFériés(nbJoursFériés) = DateValue('01/01/' + CStr(Année))
libJoursFériés(nbJoursFériés) = 'Jour de l'an'

nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = Paques(Année)
libJoursFériés(nbJoursFériés) = 'Pâques'
nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = LundidePaques(Année)
libJoursFériés(nbJoursFériés) = 'Pâques'

nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = DateValue('1/05/' + CStr(Année))
libJoursFériés(nbJoursFériés) = 'Fête du travail'

nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = DateValue('8/05/' + CStr(Année))
libJoursFériés(nbJoursFériés) = 'Victoire 1945'

nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = Ascension(Année)
libJoursFériés(nbJoursFériés) = 'Ascension'
nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = Pentecote(Année)
libJoursFériés(nbJoursFériés) = 'Pentecôte'
nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = LundidePentecote(Année)
libJoursFériés(nbJoursFériés) = 'Pentecôte'

nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = DateValue('14/7/' + CStr(Année))
libJoursFériés(nbJoursFériés) = 'Fête Nationale'

nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = DateValue('15/8/' + CStr(Année))
libJoursFériés(nbJoursFériés) = 'Assomption'

nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = DateValue('1/11/' + CStr(Année))
libJoursFériés(nbJoursFériés) = 'Toussaint'

nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = DateValue('11/11/' + CStr(Année))
libJoursFériés(nbJoursFériés) = 'Armistice'

nbJoursFériés = nbJoursFériés + 1
joursFériés(nbJoursFériés) = DateValue('25/12/' + CStr(Année))
libJoursFériés(nbJoursFériés) = 'Noël'

End Sub

Function Paques(Année As Integer) As Date
Dim var1 As Integer, var2 As Integer, var3 As Integer, var4 As Integer, _
var5 As Integer, var6 As Integer, var7 As Integer
'initialisation des variables
var1 = Année Mod 19 + 1
var2 = (Année \\ 100) + 1
var3 = ((3 * var2) \\ 4) - 12
var4 = (((8 * var2) + 5) \\ 25) - 5
var5 = ((5 * Année) \\ 4) - var3 - 10
var6 = (11 * var1 + 20 + var4 - var3) Mod 30
If (var6 = 25 And var1 > 11) Or (var6 = 24) Then
var6 = var6 + 1
End If
var7 = 44 - var6
If var7 < 21 Then
var7 = var7 + 30
End If
var7 = var7 + 7
var7 = var7 - (var5 + var7) Mod 7
'
If var7 <= 31 Then
Paques = DateValue(CStr(var7) & '/3/' & CStr(Année))
Else
Paques = DateValue(CStr(var7 - 31) & '/4/' & CStr(Année))
End If
End Function

Function LundidePaques(Année As Integer) As Date
LundidePaques = Paques(Année) + 1
End Function

Function Ascension(Année As Integer) As Date
Ascension = Paques(Année) + 39
End Function

Function Pentecote(Année As Integer) As Date
Pentecote = Paques(Année) + 49
End Function

Function LundidePentecote(Année As Integer) As Date
LundidePentecote = Paques(Année) + 50
End Function


voila et bonne chance
 

Gael

XLDnaute Barbatruc
Bonjour Laura, Bonjour Lostgen,

Tu peux aussi créer les jours fériés sur un classeur indépendant.

Tu crées la liste sur un classeur quelconque,
Tu ouvres ton classeur principal
Tu crée un nom de plage avec insertion nom définir qui fait référence à la liste du premier classeur.
Tu fermes le classeur avec la liste.

Les fonctions de type NB.JOURS.OUVRES fonctionnent correctement même si le classeur contenant la liste est fermé. Par contre, tu ne peux pas l'utiliser comme liste de référence pour une validation de données (Données - Validation).

@+

Gael
 
L

Laura

Guest
Bonjour,

merci pour vos conseils,

je ne peux pas intégrer du code VB dans ma feuille excel

et la solution de gael ne me convient pas non plus dans la mesure ou je dois pouvoir envoyer par mail ce document, sans bien sur envoyer d'autre classeur, donc ca ne marche pas non plus...


il me semble que l'on peut -d'apres un lointain souvenir - créer des listes nommées sans les intégrer physquement dans la feuille...

si quelqu'un a une autre idée, merci d'avance

Laura
 

Tibo

XLDnaute Barbatruc
Bonsoir Laura,

Je viens de faire un essai qui est peut-être un début de piste :

Fais Insertion / Nom / Définir

En Nom, tu mets ce que tu veux : par ex : essai

en bas dans 'Fait référence à'

tu mets :

={'01/01/2005';'01/05/2005';'14/07/2005';'11/11/2005'}

Liste à compléter bien sûr

Tu peux ensuite utiliser cette liste dans tes formules

Par exemple :

=INDEX(essai;2)

te donneras :

01/05/2005

Dis-nous si c'est ce que tu voulais.



Bonne soirée

@+
 

Gael

XLDnaute Barbatruc
Bonjour Laura, lostgen, Tibo,

Tibo, ta solution est super, je n'y avais pas pensé. Ca marche très bien avec NB.JOURS.OUVRES, les dates de la liste sont bien prises en compte.

Par contre, la liste est considérée comme erronée si on veut s'en servir en validation de données.

@+

Gael
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz