[Résolu] VBA Pb Application.match sur tableau de dates

xavril

XLDnaute Nouveau
Bonjour,
Je cherche depuis plusieurs jours pourquoi mon code ne marche pas.
Code:
Public jFeries(11) As Date

Public Sub CreateJF(D)
'Calcul des jours feries d'après Ole P Erlandsen
    Année = Year(D)
    If Année < 1900 Then Exit Sub
    'remplit le tableau des jours fériés
    jFeries(1) = CDate("1/1/" & Année)    'Jour de l'An
    jFeries(2) = CDate(Evaluate("Round(Date(" & Année & ",4,mod(234-11*mod(" & Année & ",19),30))/7,)*7-6") + 1) 'Lundi Pâques
    jFeries(3) = jFeries(2) + 38      'Jeudi Ascencion
    jFeries(4) = jFeries(2) + 49      'Lundi Pentecôte
    jFeries(5) = CDate("1/5/" & Année)    '1er Mai
    jFeries(6) = CDate("8/5/" & Année)    '8 Mai
    jFeries(7) = CDate("14/7/" & Année)   '14 Juillet
    jFeries(8) = CDate("15/8/" & Année)   '15 Août
    jFeries(9) = CDate("1/11/" & Année)  'Toussaint
    jFeries(10) = CDate("11/11/" & Année) '14-18
    jFeries(11) = CDate("25/12/" & Année) 'Noël
Debug.Print "Fériés : " & jFeries(1), jFeries(2), jFeries(3), jFeries(4)
End Sub
Public Function IsWork(D As Date) As Boolean
CreateJF (D)
IsWork = False
Debug.Print D, VarType(D), VarType(jFeries(1)), Application.Match(D, jFeries, 0)
f = IsError(Application.Match(D, jFeries, 0))
w = Weekday(D, vbMonday) < 6
IsWork = f And w
End Function
Si on teste par exemple IsWork(#01/01/2014#),
L' application.match me retourne toujours erreur 2042, je crois que j'ai tout essayé en convertissant les dates en long et autres. en vérité l'erreur doit-être grosse comme un maison mais je ne la vois pas. mon tableau JFeries contient bien des dates et D est bien une date
Si quelqu'un peut m'aider ce serai sympa.
Merci.
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : VBA Pb Application.match sur tableau de dates

Bonjour xavril

Voila ce que j'aurai ecrit

Code:
Dim jFeries(1 To 11) As Variant
Public Sub CreateJF(D)
'Calcul des jours feries d'après Ole P Erlandsen
    Année = Year(D)
    If Année < 1900 Then Exit Sub
    'remplit le tableau des jours fériés
    jFeries(1) = CDate("1/1/" & Année)    'Jour de l'An
    jFeries(2) = CDate(Evaluate("Round(Date(" & Année & ",4,mod(234-11*mod(" & Année & ",19),30))/7,)*7-6") + 1) 'Lundi Pâques
    jFeries(3) = jFeries(2) + 38      'Jeudi Ascencion
    jFeries(4) = jFeries(2) + 49      'Lundi Pentecôte
    jFeries(5) = CDate("1/5/" & Année)    '1er Mai
    jFeries(6) = CDate("8/5/" & Année)    '8 Mai
    jFeries(7) = CDate("14/7/" & Année)   '14 Juillet
    jFeries(8) = CDate("15/8/" & Année)   '15 Août
    jFeries(9) = CDate("1/11/" & Année)  'Toussaint
    jFeries(10) = CDate("11/11/" & Année) '14-18
    jFeries(11) = CDate("25/12/" & Année) 'Noël
'Debug.Print "Fériés : " & jFeries(1), jFeries(2), jFeries(3), jFeries(4)
End Sub
Public Function IsWork(D As Date) As Boolean
CreateJF (D)
IsWork = False
'Debug.Print D, VarType(D), VarType(jFeries(1)), Application.Match(D, jFeries, 0)
'f = IsError(Application.Match(D, jFeries, 0))
'w = Weekday(D, vbMonday) < 6
'IsWork = f And w
For n = 1 To 11
  If D = jFeries(n) Then feries = True
Next
If Not feries And Weekday(D, vbMonday) < 6 Then IsWork = True
End Function
 

xavril

XLDnaute Nouveau
Re : VBA Pb Application.match sur tableau de dates

Merci PierreJean,
En réalité je voulais éviter la boucle "For... next", je trouve que "application.match" est plus .... élégant :)
J'ai fini par trouver une solution à l'instant, il suffit de faire IsWork(Format(D,"dd/mm/yyyy") et là ça marche !
Par contre je n'ai pas vraiment d'explication... Normalement le tableau jF contient des données de type date et on compare avec une date "formatée" string !??
Merci encore.
Peut-être que quelqu'un pourra me donner une explication.
 

Discussions similaires

Statistiques des forums

Discussions
312 224
Messages
2 086 409
Membres
103 201
dernier inscrit
centrale vet