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

Résolu
cs_schnouck Messages postés 10 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 6 juin 2012 - 5 juin 2012 à 09:25
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

5 réponses

cs_schnouck Messages postés 10 Date d'inscription jeudi 15 janvier 2009 Statut Membre Dernière intervention 6 juin 2012
5 juin 2012 à 11:32
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?
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 juin 2012 à 10:20
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 juin 2012 à 10:29
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 juin 2012 à 11:41
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 juin 2012 à 11:47
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
0
Rejoignez-nous