Help pour un script

hamid-ma Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
hamid-ma Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

1 réponse

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
hamid-ma Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
merci Mosca pour la réponse, je pense que vous avez raison..
0
Mosca > hamid-ma Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
hamid-ma Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
Mosca > hamid-ma Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
hamid-ma Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
salut Mosca ça marche parfaitement, merci beaucoup
0