OVH Cloud OVH Cloud

Problème de numéro de semaine ???

33 réponses
Avatar
LE TROLL
Bonjour,

Je n'arrive pas à avoir la bonne semaine aux extrêmes:

- J'utilise le format (ww)
- La semaine se change le lundi
- Donc à la fin de l'année il peut y avoir une semaine 53
qui passe même au début de l'autre année...
- Donc encore, pas de semaine 1 avant l'année suivant...
- Heu, c'est comme ça, désolé...

Dans Excel j'utilise ce calcul (qui fonctionne), mais je
n'y comprends rien, recopiage, lol:
=ENT((C2-SOMME(MOD(DATE(ANNEE(C2-MOD(C2-2;7)+3);1;2);{1E+99;7})*{1;-1})+5)/7)
C2 étant la date du jour
---------------

Mais là en VB, je n'arrive pas à retranscrire ces signes
cabalistiques...

Alors si quelqu'un a une idée de calcul avec ma semaine
53 ???

Merci, au revoir et à bientôt :o)
--
ECRIRE AU TROLL http://irolog.free.fr/letroll/index.html
------------------------------------------------------------
LE TROLL, éleveur de trolls depuis César, qui disait :
Avec une hache, celui qui tient le manche a toujours raison
!

3 réponses

1 2 3 4
Avatar
LE TROLL
Ben si c'est comme mes réponses d'hier, tu va lui casser
son jouet, vas-y, modifies, comme ça on en sera
débarrassé...
Avatar
Alfred
"LE TROLL" <le a écrit dans le message de
news:
Alfred, j'air regardé ta routine, merci encore,
cependant si on force la semaine 1 de vb à passer en 53, il
faut forcer toute l'année +1 semaine, c'est assez laborieux,
je cherche un calcul global, qui donne le numéro de la
semaine, quoi qu'il en soit, avec comme contrainte:

Voici l'énoncé du problème:

-1- VB5
-2- La semaine commence le lundi
-3- La semaine 1 n'est jamais en fin N-1, donc 53 si besoin
-4- Donc aussi la 53 peut aller sur l'année N avant le 1er
lundi.
Exemple de la formule à modifier sous Excel, qui fonctionne:



=ENT((C2-SOMME(MOD(DATE(ANNEE(C2-MOD(C2-2;7)+3);1;2);{1E+99;7})*{1;-1})+5)/7
)
C2 étant la date du jour par rapport au calcul...

exemples pratiques:
jeudi 1/1/2004 = s1
lundi 27/1/2004 = s53
samedi 1/1/2005 = s53
lundi 3/1/2005 = s1
samedi 31/12/2005 = s52
dimanche 1/1/2006 = s52
lundi 2/1/2006 = s1

Il n'y a rien à voir avec la norme iso 8601 je crois, le
calendrier sus-cité impose cette forme là, je dois la
respecter...

En fait je ne suis pas assez bon en date de semaine,
j'utilise rarement, donc comme sus-dit je cherche une
formule globale, telle que celle d'Excel, l'idéal serait que
quelqu'un sache me la retranscrire en VB5, car ce matin ce
fut plutôt raté :o)

Merci, @+, bye, Joe.
--------------------------




Bonjour Le Troll

Voici une autre formule de calacul de semaine:

Public Function WEEKNR(InputDate As Long) As Integer
Dim A As Integer, B As Integer, C As Long, D As Integer
WEEKNR = 0
If InputDate < 1 Then Exit Function
A = Weekday(InputDate, vbSunday)
B = Year(InputDate + ((8 - A) Mod 7) - 3)
C = DateSerial(B, 1, 1)
D = (Weekday(C, vbSunday) + 1) Mod 7
WEEKNR = Int((InputDate - C - 3 + D) / 7) + 1
End Function

peut-être faudra-t-il changer vbSunday en vbMonday pour la France ?
à tester...

Alfred
Avatar
LE TROLL
1 2 3 4