[Résolu] Probleme de comparaison de date

N3oTraX

XLDnaute Nouveau
Bonjour à tous,

Je rencontre actuellement un soucis pour comparer 2 dates. L'une est une date lue d'un planning, l'autre est une "manipulation savante" qui suit la démarche suivante :
- Une fonction VBA me trouve les jour fériés dynamiquement en fonction de l'année.
- Je change le format des cellule en type date via excel pour qu'il m'affiche le résultat de type jj/mm/aaaa

La fonction des jours fériés est la suivante :
Code:
Function Paques(Yr As Integer) As Long

  Dim Century As Integer
  Dim Sunday As Integer
  Dim Epact As Integer
  Dim Golden As Integer
  Dim LeapDayCorrection As Integer
  Dim SynchWithMoon As Integer
  Dim N As Integer

  Golden = (Yr Mod 19) + 1
  Century = Yr \ 100 + 1
  LeapDayCorrection = 3 * Century \ 4 - 12
  SynchWithMoon = (8 * Century + 5) \ 25 - 5
  Sunday = 5 * Yr \ 4 - LeapDayCorrection - 10
  Epact = (11 * Golden + 20 + SynchWithMoon - LeapDayCorrection) Mod 30
  If Epact < 0 Then Epact = Epact + 30
  If (Epact = 25 And Golden > 11) Or Epact = 24 Then Epact = Epact + 1
  N = 44 - Epact
  If N < 21 Then N = N + 30
  N = N + 7 - ((Sunday + N) Mod 7)
  Paques = DateSerial(Yr, 3, N)

End Function

Me demandez pas ce que la fonction ci-dessus fait, elle marche très bien pour trouvé les jours indexés sur Paques.

Cette derniere me renvoi une variable de type Long (donc convertie dans la cell excel en date jj/mm/aaaa).
Le souci est que je la compare avec une variable de type string appelée Day avec la fonction suivante :

Code:
Private Function isFerie(Day As String) As Boolean

    Dim JF As Object

    Worksheets("Configuration").Activate
    
    Range("G14:G24").Select
    
    For Each JF In Selection
        
        'MsgBox JF.Value
        
        If JF.Value = Day Then
            isFerie = True
        Else
            isFerie = False
        End If
    Next
    
    'MsgBox JF.Value & "; " & Day & "; " & isFerie
    
    Worksheets("Extraction_Planning").Activate

End Function

J'ai testé les valeurs lues par la macro, elles sont bien au même format (c.a.d jj/mm/aaaa)
Mais la fonction me retourne toujours FAUX après comparaison.

Quelqu'un peut-il m'aider à comprendre ceci ?

Merci d'avance
 
Dernière édition:

jp14

XLDnaute Barbatruc
Re : Probleme de comparaison de date

Bonsoir

Une date dans excel est un nombre, quand on l'utilise Excel transforme ce nombre en texte.
En fait on voit le nombre à travers un filtre qui dépend du pays..
Lorsque que l'on compare des dates il faut s'assurer des formats, la fonction Isdate doit être utilisé avant la comparaison.

If Not IsDate(toto) Then
Call MsgBox("Ce n'est pas une date", vbExclamation, Application.Name)
Exit Sub
End If

JP
 

N3oTraX

XLDnaute Nouveau
Re : Probleme de comparaison de date

En intégrant le if not IsDate(Day), je n'ai aucun retour...
Dois-je considéré que finalement il lit bien une "vrai" date ?

Pour l'exemple la variable Day est renseignée avec la valeur 01/11/2011, IsDate ne revoie rien, je le compare avec mon tableau de jour férié qui contient bien la valeur 01/11/2011, et j'obtiens toujours isFerie = false.
A n'y rien comprendre...

Pour ceux qui ont un peu de temps, je fourni le fichier original, seul le bouton "Remplir mes EV" est exploitable car il vous manquera un fichier pour utiliser l'extraction de planning.
 

Pièces jointes

  • Test_Calcul_Paie_006.xls
    202 KB · Affichages: 167
Dernière édition:

jp14

XLDnaute Barbatruc
Re : Probleme de comparaison de date

Bonjour

En utilisant les espions on constate que JF est une date (au sens d'excel), que l'on compare avec une date de type String. (Day As String).
Pour que la comparaison puisse se faire il faut écrire
Code:
If CDate(Day) = JF.Value Then
Cdate transforme Day en date excel.
Le code
Code:
If Not IsDate(Day) Then
       isFerie = False
       exit function
    End If
est nécessaire, il évitera un message d'erreur si Day n'est pas une date.

JP
 

N3oTraX

XLDnaute Nouveau
Re : Probleme de comparaison de date

Effectivement expliqué comme ceci ca semble plus logique, mais la comparaison ne fonctionne toujours pas, la fonction renvoi toujours false.


Est-ce parce que le tableau que j'ai créé de jours fériés est rempli en date juliennes ?
Edit : d'ailleurs les dates ne semblent pas être de type julienne car avec une fontion de convertion ca donne d'importe quoi...
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16