Help pour un script

bonjour, svp quelqu'un peut m explique a quoi il sert se script ..
-------------------------------------------------------------------------------------------
Public Function DayOfYear(ByVal year As Integer, ByVal month As Integer, ByVal day As Integer) As Integer
Dim x As Integer
Dim monthday() As Integer = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}
x = monthday(month - 1) + day
If ((year Mod 4 = 0) And ((year Mod 100.0! = 0) Or (year Mod 400 = 0)) And (month > 2)) Then
x = x + 1
End If
DayOfYear = x
End Function
------------------------------------------------------------------------------------------
merci d avance

1 réponse

  1. Bonjour,

    Cette fonction est sensée calculer le nombre de jours écoulés à une date donnée. Mais le resultat est faux pour une année bissextile.
    DayOfYear(2016,2,29) donne 60
    DayOfYear(2016,3,1) donne 60 aussi alors que 31+29+1=61

    A revoir
    1. merci Mosca pour la réponse, je pense que vous avez raison..
    2. @hamid-maVoici le bon test

      If ((year Mod 4 = 0) And (Not (year Mod 100 = 0) Or (year Mod 400 = 0)) And (month > 2)) Then
    3. Bonjour Mosca merci pour votre réponse mais je n'arrive pas à comprendre votre, en fait vous avez changer quoi

      PS: je ne suis un expert en VBA
    4. @hamid-maC'est juste plus une question de syntaxe que de logique

      year Mod 100.0! = 0

      cette expression est sensée vouloir dire : le reste de la division entière de year par 100 est différent de zero.

      en VB ou VBA ça s'écrit: year Mod 100 <> 0
      ou encore Not (year Mod 100 = 0)

      Le signe != est utilé en C; C++ ; Java
      L'équivalent en VB est <>

      De plus l'initialisation du tableau monthday() est incorrecte

      Voilà la correction:

      Option Explicit
      Public Function DayOfYear(ByVal year As Integer, ByVal month As Integer, ByVal day As Integer) As Integer

      Dim x As Integer
      Dim monthday() As Variant
      monthday = Array(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334)
      x = monthday(month - 1) + day
      'MsgBox (year Mod 4 = 0) And (year Mod 100 = 0) And (year Mod 400 = 0)
      If ((year Mod 4 = 0) And (Not (year Mod 100 = 0) Or (year Mod 400 = 0)) And (month > 2)) Then
      x = x + 1
      End If
      DayOfYear = x
      End Function

      Sub test()
      MsgBox DayOfYear(2016, 3, 1) 'annee bissextile
      MsgBox DayOfYear(2015, 3, 1) 'annee non bissextile
      End Sub


      Colle ce code dans un module et exécutes test, sauf erreur ça devrait marcher
    5. salut Mosca ça marche parfaitement, merci beaucoup