Help pour un script

hamid-ma Messages postés 19 Statut Membre -  
hamid-ma Messages postés 19 Statut Membre -
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. Mosca
     
    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
    0
    1. hamid-ma Messages postés 19 Statut Membre
       
      merci Mosca pour la réponse, je pense que vous avez raison..
      0
      1. Mosca > hamid-ma Messages postés 19 Statut Membre
         
        Voici le bon test

        If ((year Mod 4 = 0) And (Not (year Mod 100 = 0) Or (year Mod 400 = 0)) And (month > 2)) Then
        0
    2. hamid-ma Messages postés 19 Statut Membre
       
      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
      0
      1. Mosca > hamid-ma Messages postés 19 Statut Membre
         
        C'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
        0
    3. hamid-ma Messages postés 19 Statut Membre
       
      salut Mosca ça marche parfaitement, merci beaucoup
      0