Help pour un script

Fermé
hamid-ma Messages postés 16 Date d'inscription mardi 16 février 2016 Statut Membre Dernière intervention 27 avril 2016 - 18 févr. 2016 à 14:38
hamid-ma Messages postés 16 Date d'inscription mardi 16 février 2016 Statut Membre Dernière intervention 27 avril 2016 - 23 févr. 2016 à 16:35
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

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 mardi 16 février 2016 Statut Membre Dernière intervention 27 avril 2016
19 févr. 2016 à 11:40
merci Mosca pour la réponse, je pense que vous avez raison..
0
Mosca > hamid-ma Messages postés 16 Date d'inscription mardi 16 février 2016 Statut Membre Dernière intervention 27 avril 2016
19 févr. 2016 à 15:01
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 mardi 16 février 2016 Statut Membre Dernière intervention 27 avril 2016
19 févr. 2016 à 16:07
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 mardi 16 février 2016 Statut Membre Dernière intervention 27 avril 2016
19 févr. 2016 à 16:27
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 mardi 16 février 2016 Statut Membre Dernière intervention 27 avril 2016
23 févr. 2016 à 16:35
salut Mosca ça marche parfaitement, merci beaucoup
0