OVH Cloud OVH Cloud

Nombre de semaines dans l'année

8 réponses
Avatar
choko
Bonjour à tous,

étant vraiment pas à l'aise avec les dates, je me demandais si quelqu'un
avait une astuce pour trouver le nombre de semaines selon l'année étudiée
(52 ou 53) .

Merci pour votre aide

Choko

8 réponses

Avatar
Jacky
Bonjour Choko

Un exemple parmi d'autres (donné sur ce forum)
'----------------
'Recherche du n° de semaine norme Europe
x = "31/12/" & Year(Now) 'pour voir si l'année comporte 52 ou 53 semaines
'x = Now ' décoche pour avoir la semaine en cours
If Day(x) = 2 And Month(x) = 1 And Year(x) Mod 400 = 101 Then
numsem = 52
GoTo A
End If
If WeekDay(x) = 2 And Month(x) = 12 And Day(x) > 28 Then
numsem = 1
Else: numsem = DatePart("ww", x, 2, 2)
End If
A:
MsgBox "Semaine " & numsem & Chr$(10) & "pour la date du : " & x
'------------------
Salutations
JJ


"choko" a écrit dans le message de
news:%
Bonjour à tous,

étant vraiment pas à l'aise avec les dates, je me demandais si quelqu'un
avait une astuce pour trouver le nombre de semaines selon l'année étudiée
(52 ou 53) .

Merci pour votre aide

Choko




Avatar
Daniel.M
Bonjour,

Avec l'année en A1 (par ex: 2004) :

R+ET(JOURSEM(DATE(A1;{2;8};))>5)

Salutations,

Daniel M.

"choko" wrote in message
news:%
Bonjour à tous,

étant vraiment pas à l'aise avec les dates, je me demandais si quelqu'un
avait une astuce pour trouver le nombre de semaines selon l'année étudiée
(52 ou 53) .

Merci pour votre aide

Choko




Avatar
Jacky
Bonsoir Daniel

Pourrais-tu expliquer : {2;8}
Stp
JJ

"Daniel.M" a écrit dans le message de
news:
Bonjour,

Avec l'année en A1 (par ex: 2004) :

R+ET(JOURSEM(DATE(A1;{2;8};))>5)

Salutations,

Daniel M.

"choko" wrote in message
news:%
Bonjour à tous,

étant vraiment pas à l'aise avec les dates, je me demandais si quelqu'un
avait une astuce pour trouver le nombre de semaines selon l'année
étudiée


(52 ou 53) .

Merci pour votre aide

Choko








Avatar
choko
Un grand Merci à vous,

L'option de Daniel correspond tout à fait à ma requête.
Jacky, je garde le code pour plus tard, car mon appli pourrait bien le
nésseciter.

Je ne comprends pas non plus le {2;8}.....

; ))))
Choko
"Daniel.M" a écrit dans le message de
news:
Bonjour,

Avec l'année en A1 (par ex: 2004) :

R+ET(JOURSEM(DATE(A1;{2;8};))>5)

Salutations,

Daniel M.

"choko" wrote in message
news:%
Bonjour à tous,

étant vraiment pas à l'aise avec les dates, je me demandais si quelqu'un
avait une astuce pour trouver le nombre de semaines selon l'année
étudiée


(52 ou 53) .

Merci pour votre aide

Choko








Avatar
Daniel.M
Salut,


' ***************************************
Jacky, je garde le code pour plus tard, car mon appli pourrait
bien le nésseciter.


Si tu as besoin de code en VBA, celui-ci est très court:

Annee = 2004 ' ou toute autre année comme 2005, ou Year(Date) pour l'année
courante

NSemISO = Format(DateSerial(Annee, 12, 28), "ww", vbMonday, vbFirstFourDays)

En d'autres mots, le 28 décembre est toujours 7 jours avant le 4 janvier de l'an
suivant.
Et selon les normes ISO, le 4 janvier est toujours dans la première semaine ISO
de son année.
Conclusion logique: le 28 décembre est toujours dans la dernière semaine ISO de
son année.
Retournons donc la semaine de ce 28 décembre pour avoir le nombre de semaines de
cette année.


Je ne comprends pas non plus le {2;8}.....


Préambule:
========= Année non-bissextile: le 3 janvier DOIT être le samedi (rien d'autre). Pour tout
autre jour du 3 janvier (lundi, mardi etc), il n'y a pas assez de jours dans
l'année pour faire 53 semaines.

Année bissextile: le 3 janvier doit être le samedi ou vendredi et, dans ce
dernier cas, on s'aperçoit que le 1 janvier de l'année suivante tombe un
vendredi (toujours).

3 janvier An ==> vendredi (pour AN bissextile seulement) ou samedi
1 jan (An+1) ==> vendredi ou samedi

Conclusion: Les seules années qui auront 53 semaines seront celles où :

le 3 janvier est un vendredi ou samedi
ET
le 1er janvier de l'année suivante tombe un vendredi ou samedi.


Transformation des dates pour d'autres plus simples à écrire:
============================================================ JOURSEM(3 jan An)
= JOURSEM(3 jan An + 28 jours)
= JOURSEM(31 jan An)
= JOURSEM(0 fev An)
= JOURSEM(DATE(An,2,0))

JOURSEM(1 jan (An+1))
= JOURSEM(1 jan (An+1) - 154 jours) ' 154 est divisible sans reste par 7
= JOURSEM(31 juillet An)
= JOURSEM(0 août An)
= JOURSEM(DATE(An,8,0))

Et ces 2 dates devront retourner un JOURSEM > 5 (un vendredi ou un samedi).

R+ET(JOURSEM(DATE(A1;2;0))>5;JOURSEM(DATE(A1;8;0))>5)

R+ET(JOURSEM(DATE(A1;{2;8};))>5)

Beaucoup d'autres couples de dates (de part et d'autre du 28 février) peuvent
donc donner la bonne réponse, l'intérêt de ces deux dates est qu'elles se
représentent de façon succinte dans une matricielle implicite parce qu'elles
sont le même jour (i.e. 0) et qu'en plus, comme ce jour = 0, on peut omettre
d'inscrire ce 0 dans la formule.

Salutations,

Daniel M.

Avatar
Jacky
Merci Daniel pour cette magnifique explication.

Si je comprend parfaitement cette formule
R+ET(JOURSEM(DATE(A1;2;0))>5;JOURSEM(DATE(A1;8;0))>5)
la syntaxe de celle-ci:
R+ET(JOURSEM(DATE(A1;{2;8};))>5)
me pose problème, particulièrement {2;8}
D'accord , elle sont identique, mais je ne saisis pas la logique pour
arriver à cette syntaxe.
Pourrais-tu éclairer ma petite lanterne ?

Merci
JJ

"Daniel.M" a écrit dans le message de
news:
Salut,


' ***************************************
Jacky, je garde le code pour plus tard, car mon appli pourrait
bien le nésseciter.


Si tu as besoin de code en VBA, celui-ci est très court:

Annee = 2004 ' ou toute autre année comme 2005, ou Year(Date) pour
l'année

courante

NSemISO = Format(DateSerial(Annee, 12, 28), "ww", vbMonday,
vbFirstFourDays)


En d'autres mots, le 28 décembre est toujours 7 jours avant le 4 janvier
de l'an

suivant.
Et selon les normes ISO, le 4 janvier est toujours dans la première
semaine ISO

de son année.
Conclusion logique: le 28 décembre est toujours dans la dernière semaine
ISO de

son année.
Retournons donc la semaine de ce 28 décembre pour avoir le nombre de
semaines de

cette année.


Je ne comprends pas non plus le {2;8}.....


Préambule:
========= > Année non-bissextile: le 3 janvier DOIT être le samedi (rien d'autre).
Pour tout

autre jour du 3 janvier (lundi, mardi etc), il n'y a pas assez de jours
dans

l'année pour faire 53 semaines.

Année bissextile: le 3 janvier doit être le samedi ou vendredi et, dans ce
dernier cas, on s'aperçoit que le 1 janvier de l'année suivante tombe un
vendredi (toujours).

3 janvier An ==> vendredi (pour AN bissextile seulement) ou samedi
1 jan (An+1) ==> vendredi ou samedi

Conclusion: Les seules années qui auront 53 semaines seront celles où :

le 3 janvier est un vendredi ou samedi
ET
le 1er janvier de l'année suivante tombe un vendredi ou samedi.


Transformation des dates pour d'autres plus simples à écrire:
============================================================ > JOURSEM(3 jan An)
= JOURSEM(3 jan An + 28 jours)
= JOURSEM(31 jan An)
= JOURSEM(0 fev An)
= JOURSEM(DATE(An,2,0))

JOURSEM(1 jan (An+1))
= JOURSEM(1 jan (An+1) - 154 jours) ' 154 est divisible sans reste
par 7

= JOURSEM(31 juillet An)
= JOURSEM(0 août An)
= JOURSEM(DATE(An,8,0))

Et ces 2 dates devront retourner un JOURSEM > 5 (un vendredi ou un
samedi).


R+ET(JOURSEM(DATE(A1;2;0))>5;JOURSEM(DATE(A1;8;0))>5)

R+ET(JOURSEM(DATE(A1;{2;8};))>5)

Beaucoup d'autres couples de dates (de part et d'autre du 28 février)
peuvent

donc donner la bonne réponse, l'intérêt de ces deux dates est qu'elles se
représentent de façon succinte dans une matricielle implicite parce
qu'elles

sont le même jour (i.e. 0) et qu'en plus, comme ce jour = 0, on peut
omettre

d'inscrire ce 0 dans la formule.

Salutations,

Daniel M.





Avatar
Daniel.M
Hello,

Quoi dire sinon que c'est la manière de représenter les constantes matricielles
dans une formule. L'aide d'Excel (constantes matricielles) pourrait t'en dire un
peu plus.

Dans le cas qui nous occupe, DATE(A1;{2;8};) génère 2 dates : le 31 janvier et
le 31 juillet de l'an A1. On récupère le JOURSEM de ces dates et on les compare
à 5. Si les 2 sont plus grands que 5, le ET sera VRAI.
Et 52+VRAI donne 53.

Salutations,

Daniel M.



"Jacky" wrote in message
news:
Merci Daniel pour cette magnifique explication.

Si je comprend parfaitement cette formule
R+ET(JOURSEM(DATE(A1;2;0))>5;JOURSEM(DATE(A1;8;0))>5)
la syntaxe de celle-ci:
R+ET(JOURSEM(DATE(A1;{2;8};))>5)
me pose problème, particulièrement {2;8}
D'accord , elle sont identique, mais je ne saisis pas la logique pour
arriver à cette syntaxe.
Pourrais-tu éclairer ma petite lanterne ?

Merci
JJ

"Daniel.M" a écrit dans le message de
news:
Salut,


' ***************************************
Jacky, je garde le code pour plus tard, car mon appli pourrait
bien le nésseciter.


Si tu as besoin de code en VBA, celui-ci est très court:

Annee = 2004 ' ou toute autre année comme 2005, ou Year(Date) pour
l'année

courante

NSemISO = Format(DateSerial(Annee, 12, 28), "ww", vbMonday,
vbFirstFourDays)


En d'autres mots, le 28 décembre est toujours 7 jours avant le 4 janvier
de l'an

suivant.
Et selon les normes ISO, le 4 janvier est toujours dans la première
semaine ISO

de son année.
Conclusion logique: le 28 décembre est toujours dans la dernière semaine
ISO de

son année.
Retournons donc la semaine de ce 28 décembre pour avoir le nombre de
semaines de

cette année.


Je ne comprends pas non plus le {2;8}.....


Préambule:
========= > > Année non-bissextile: le 3 janvier DOIT être le samedi (rien d'autre).
Pour tout

autre jour du 3 janvier (lundi, mardi etc), il n'y a pas assez de jours
dans

l'année pour faire 53 semaines.

Année bissextile: le 3 janvier doit être le samedi ou vendredi et, dans ce
dernier cas, on s'aperçoit que le 1 janvier de l'année suivante tombe un
vendredi (toujours).

3 janvier An ==> vendredi (pour AN bissextile seulement) ou samedi
1 jan (An+1) ==> vendredi ou samedi

Conclusion: Les seules années qui auront 53 semaines seront celles où :

le 3 janvier est un vendredi ou samedi
ET
le 1er janvier de l'année suivante tombe un vendredi ou samedi.


Transformation des dates pour d'autres plus simples à écrire:
============================================================ > > JOURSEM(3 jan An)
= JOURSEM(3 jan An + 28 jours)
= JOURSEM(31 jan An)
= JOURSEM(0 fev An)
= JOURSEM(DATE(An,2,0))

JOURSEM(1 jan (An+1))
= JOURSEM(1 jan (An+1) - 154 jours) ' 154 est divisible sans reste
par 7

= JOURSEM(31 juillet An)
= JOURSEM(0 août An)
= JOURSEM(DATE(An,8,0))

Et ces 2 dates devront retourner un JOURSEM > 5 (un vendredi ou un
samedi).


R+ET(JOURSEM(DATE(A1;2;0))>5;JOURSEM(DATE(A1;8;0))>5)

R+ET(JOURSEM(DATE(A1;{2;8};))>5)

Beaucoup d'autres couples de dates (de part et d'autre du 28 février)
peuvent

donc donner la bonne réponse, l'intérêt de ces deux dates est qu'elles se
représentent de façon succinte dans une matricielle implicite parce
qu'elles

sont le même jour (i.e. 0) et qu'en plus, comme ce jour = 0, on peut
omettre

d'inscrire ce 0 dans la formule.

Salutations,

Daniel M.









Avatar
Jacky
Re..
c'est la manière de représenter les constantes matricielles
J'ai beaucoup de mal avec cela, il va falloir que je m'y mette à


l'application de ces <constantes matricielles>, je ne connaît pas trop!
Merci en tout cas, je vais aussi voir l'aide d'Excel.
Bonne journée
JJ

"Daniel.M" a écrit dans le message de
news:
Hello,

Quoi dire sinon que c'est la manière de représenter les constantes
matricielles

dans une formule. L'aide d'Excel (constantes matricielles) pourrait t'en
dire un

peu plus.

Dans le cas qui nous occupe, DATE(A1;{2;8};) génère 2 dates : le 31
janvier et

le 31 juillet de l'an A1. On récupère le JOURSEM de ces dates et on les
compare

à 5. Si les 2 sont plus grands que 5, le ET sera VRAI.
Et 52+VRAI donne 53.

Salutations,

Daniel M.



"Jacky" wrote in message
news:
Merci Daniel pour cette magnifique explication.

Si je comprend parfaitement cette formule
R+ET(JOURSEM(DATE(A1;2;0))>5;JOURSEM(DATE(A1;8;0))>5)
la syntaxe de celle-ci:
R+ET(JOURSEM(DATE(A1;{2;8};))>5)
me pose problème, particulièrement {2;8}
D'accord , elle sont identique, mais je ne saisis pas la logique pour
arriver à cette syntaxe.
Pourrais-tu éclairer ma petite lanterne ?

Merci
JJ

"Daniel.M" a écrit dans le message de
news:
Salut,


' ***************************************
Jacky, je garde le code pour plus tard, car mon appli pourrait
bien le nésseciter.


Si tu as besoin de code en VBA, celui-ci est très court:

Annee = 2004 ' ou toute autre année comme 2005, ou Year(Date) pour
l'année

courante

NSemISO = Format(DateSerial(Annee, 12, 28), "ww", vbMonday,
vbFirstFourDays)


En d'autres mots, le 28 décembre est toujours 7 jours avant le 4
janvier



de l'an
suivant.
Et selon les normes ISO, le 4 janvier est toujours dans la première
semaine ISO

de son année.
Conclusion logique: le 28 décembre est toujours dans la dernière
semaine



ISO de
son année.
Retournons donc la semaine de ce 28 décembre pour avoir le nombre de
semaines de

cette année.


Je ne comprends pas non plus le {2;8}.....


Préambule:
========= > > > Année non-bissextile: le 3 janvier DOIT être le samedi (rien d'autre).
Pour tout

autre jour du 3 janvier (lundi, mardi etc), il n'y a pas assez de
jours



dans
l'année pour faire 53 semaines.

Année bissextile: le 3 janvier doit être le samedi ou vendredi et,
dans ce



dernier cas, on s'aperçoit que le 1 janvier de l'année suivante tombe
un



vendredi (toujours).

3 janvier An ==> vendredi (pour AN bissextile seulement) ou samedi
1 jan (An+1) ==> vendredi ou samedi

Conclusion: Les seules années qui auront 53 semaines seront celles où
:




le 3 janvier est un vendredi ou samedi
ET
le 1er janvier de l'année suivante tombe un vendredi ou samedi.


Transformation des dates pour d'autres plus simples à écrire:
============================================================ > > > JOURSEM(3 jan An)
= JOURSEM(3 jan An + 28 jours)
= JOURSEM(31 jan An)
= JOURSEM(0 fev An)
= JOURSEM(DATE(An,2,0))

JOURSEM(1 jan (An+1))
= JOURSEM(1 jan (An+1) - 154 jours) ' 154 est divisible sans
reste



par 7
= JOURSEM(31 juillet An)
= JOURSEM(0 août An)
= JOURSEM(DATE(An,8,0))

Et ces 2 dates devront retourner un JOURSEM > 5 (un vendredi ou un
samedi).


R+ET(JOURSEM(DATE(A1;2;0))>5;JOURSEM(DATE(A1;8;0))>5)

R+ET(JOURSEM(DATE(A1;{2;8};))>5)

Beaucoup d'autres couples de dates (de part et d'autre du 28 février)
peuvent

donc donner la bonne réponse, l'intérêt de ces deux dates est qu'elles
se



représentent de façon succinte dans une matricielle implicite parce
qu'elles

sont le même jour (i.e. 0) et qu'en plus, comme ce jour = 0, on peut
omettre

d'inscrire ce 0 dans la formule.

Salutations,

Daniel M.