Problème sur une création de fonction Jour Féries résultat toujours "Faux" [Résolu]

Messages postés
10
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
6 juin 2012
- - Dernière réponse : ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 5 juin 2012 à 11:47
Bjr,

Je souhaite créer une fonction Jours Fériés pour tester si le jours est ou pas férié et si oui, renvoyer la valeur "Vrai" pour un fichier de gestion.

Actuellement ma fonction me retourne toujours "Faux" et je ne comprends pas!
Pouvez-vous m'aider?
(Pour Pâques, je n'ai pas encore de calcul mais je vais bien en trouver une sur ce forum)

Merci de votre aide

Option Explicit

Public Function Feries(InputDate As Variant) As Boolean
Dim ListFeries(1 To 20) As Long, i As Integer, tDate As Long, AN As Integer

Feries = False
tDate = CDate(InputDate)
    If tDate < 1 Then Exit Function
AN = Year(tDate)
    If AN < 1900 Then Exit Function

    ' création liste jours féries
    ListFeries(1) = CDate("1/1/" & AN) ' Jour de l'an
    ListFeries(2) = CDate("2/1/" & AN) ' Lendemain de l'an
    ListFeries(3) = CDate("1/5/" & AN) ' Fête du travail
    ListFeries(4) = CDate("8/5/" & AN) ' Victoire 1945
    ListFeries(6) = CDate("15/5/" & AN)  'Pâques
    ListFeries(5) = ListFeries(6) - 2  ' Vendredi Saint
    ListFeries(7) = ListFeries(6) + 1 'Lundi Pâques
    ListFeries(8) = ListFeries(6) + 39 'Ascension= Pâques+39
    ListFeries(9) = ListFeries(6) + 49  'Pentecôte= Pâques+49
    ListFeries(10) = ListFeries(6) + 50  'Lundi de Pentecôte= Pâques+50
    ListFeries(11) ListFeries(6) + 60  'Fête Dieu Pâques+60
    ListFeries(12) = CDate("23/6/" & AN) ' Plébicite Canton Jura
    ListFeries(13) = CDate("14/7/" & AN)  'Fête Nationale Française
    ListFeries(14) = CDate("15/8/" & AN) ' Assomption
    ListFeries(15) = CDate("1/11/" & AN) ' Toussaint
    ListFeries(16) = CDate("11/11" & AN)  'Armistice 39-45
    ListFeries(17) = CDate("25/12/" & AN) ' Noël
    ListFeries(18) = CDate("26/12/" & AN)  ' St-Etienne


    ' comparer la date InputDate avec la liste ListFeries
    i = 1
    While i <UBound(ListFeries) And Feries False
        If tDate ListFeries(i) Then Feries True
        i = i + 1
    Wend

End Function
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
10
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
6 juin 2012
3
Merci
Re-bjr,

La fonction est public et je n'est pas de "On Error Resume next" dans mon module, raison pour laquelle je ne comprends vraiment pas le problème, même après correction du "/" que je te remercie d'avoir indiqué.

Une autre idée?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 208 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_schnouck
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Bonjour,
Je ne vois pas pourquoi cette fonction ne fonctionnerait pas.
Sauf que :
ListFeries(16) =  CDate("11/11" & AN)  'Armistice 39-45

provoque forcément une erreur, puisque manque un ""
Et que pour que tu n'aies aucun message d'erreur, cela dénonce assez nettement que tu as abusivement ( fort mauvaise habitude ) mis un "On Error Resume next" dans le module dans lequel la fonction est appelée.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Il est par ailleurs (mais rien à voir avec ton "erreur" actuelle) assez maladroit de mettre ces jours fériés en dur dans ton code. Mets-les de préférence dans un fichier texte à utiliser au moment de l'ouverture.
Il te suffira alors, sans toucher à ton code, de modifier ce fichier texte (voire d'en créer un pour chaque année). N'oublie pas que la liste des jours fériés peut varier d'une année à l'autre (décidée par décret chaque année), etc ...
Il est alors plus simple (pour une douzaine de jours seulement) d'avoir un fichier texte avec TOUS les jours fériés (cela allègera considérablement ton appli, puisque pas de calculs nécessaires). Seuls les dimanches (voire les samedi) sont à déterminer par code.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Seule autre cause éventuelle (mais n'ayant rien à voir avec ta fonction elle-même) :
Un paramètre incohérent passé ( InputDate)
Quelle est sa valeur, en mode pas à pas ?
Car ce n'est pas dans la fonction elle-même, qu'il faut chercher ta cause.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Tiens (tu vas comprendre) :
change donc ces 2 lignes :
tDate = CDate(InputDate)
    If tDate < 1 Then Exit Function
AN = Year(tDate)
    If AN < 1900 Then Exit Function

par
tDate = CDate(InputDate)
    If tDate < 1 Then msgbox "ça va pas la tête ?" :Exit Function
AN = Year(tDate)
    If AN < 1900 Then  msgbox "ça va pas la tête ?"Exit Function




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu