Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…