macro nombre de semaine à cheval

Lio59

XLDnaute Nouveau
Bonjour ou soir à tous!
Je souhaite que s'affiche le nombre de semaines d'une année scolaire à partir d'une simple saisie de la première année.
Pour l'instant je souhaite connaître le nombre de semaines du 01/09/ année saisie et 31/12/ année + 1 selon le calendrier en norme ISO (européenne) et non américaine... J'ai téléchargé des compléments macro "morefunc" Morefunc Télécharger Morefunc gratuitementpermettant notamment de charger la formule NUM.SEMAINE permettant de calculer le nombre de semaines selon la norme ISO.

Pour l'instant j'arrive à un résultat par affichage successif dans différentes cellules, voici le code

Private Sub CommandButton1_Click()
Dim septembre As Integer
Dim decembre As Integer
Range("B1").Formula = "=DATE(RC[-1],9,1)" 'En B1, donne la date du 01/09/ de l'année saisie en A1 (RC[-1])
Range("C1").Formula = "=NUM.SEMAINE(B1)" ' En C1, donne le numéro de la semaine de la date B1
septembre = Range("C1").Value 'la variable septembre prend la valeur du numéro de semaine de C1
Range("B2").Formula = "=DATE(year(B1),Month(B1)+3,31)" 'En B2, ajout de 3 mois et affiche le 31ème jours de la date en B1
Range("C2").Formula = "=NUM.SEMAINE(B2)" 'En C2, donne le numéro de la semaine de la date affichée en B2
decembre = Range("C2").Value 'la variable decembre prend la valeur du numéro de semaine de C2
Range("C3").Value = decembre - septembre 'En C3 s'affiche la différence des variables decembre et septembre
End Sub

Je souhaiterais exécuter la même chose mais ne doit s'afficher sur la feuille la date de début, le bouton et le résultat.
Mon soucis est donc d'affecter les résultats successifs à des variables... je n'y arrive pas, même en déclarant Dim variable as date!


Je sais qu'il faudra rajouter une boucle afin d'éviter d'avoir un nombre de semaines négatives.... oui, le 31/12/2012 tombe en semaine 1 de l'année 2013 et le 01/01/2010 en semaine 53 de l'année 2009... c'est normal... c'est européen......

Merci à tous... bonne soirée!
Lio
 

ROGER2327

XLDnaute Barbatruc
Re : macro nombre de semaine à cheval

Bonjour Lio59
(...) je souhaite connaître le nombre de semaines du 01/09/ année saisie et 31/12/ année + 1 selon le calendrier en norme ISO (européenne) et non américaine (...)
Cette affaire me semble bien embrouillée. Essayons d'y voir plus clair. Du 1er septembre A au 31 décembre (A+1) inclus s'écoulent 487 jours lorsque (A+1) est une année ordinaire, 488 jours lorsque (A+1) est une année bissextile. Une division par 7 nous indique que ces deux dates définissent un intervalle de 69 semaines et 4 jours lorsque (A+1) est une année ordinaire, 69 semaines et 5 jours lorsque (A+1) est une année bissextile.
La norme internationale n'y peut pas grand chose. La norme étasunienne non plus. Quant à la norme américaine, je ne peux rien en dire car je n'en ai jamais entendu parler. (A ma connaissance, l'Amérique est un continent, pas une entité juridique ou administrative susceptible d'édicter des normes.)
_
D'où le code :
Code:
[COLOR="DarkSlateGray"]Private Sub CommandButton1_Click()
   [B1].Value = "69 semaines et " & 4 - ((([A1].Value + 1) Mod 4) = 0) + ((([A1].Value + 1) Mod 100) = 0) - ((([A1].Value + 1) Mod 400) = 0) & " jours"
End Sub[/COLOR]
ou la formule :
Code:
[COLOR="DarkSlateGray"]="69 semaines et "&4+SOMME((MOD(A1+1;{4;100;400})=0)*{1;-1;1})&" jours"[/COLOR]
Bonne journée.
_
ROGER2327
 

Pièces jointes

  • 69_semaines.xls
    20.5 KB · Affichages: 83

hoerwind

XLDnaute Barbatruc
Re : macro nombre de semaine à cheval

Bonjour, salut Roger,

La fonction NUMSEMAINE de Morefunc ne renvoie pas le nombre de semaines mais, comme son nom l'indique, le numéro de la semaine.

Les différences entre les normes ISO (européenne) et US (américaine) :
Le premier jour de la semaine est le lundi (ISO) et le dimanche (US)
La semaine 1 est la première semaine de l'année comportant 4 jours (ISO) et la première semaine contenant le 1er jour de l'année (US).

La formule :
=ENT((DATEDIF(DATE(A1;9;1);DATE(A1+1;12;31);"d")+1)/7)
renvoie 69 (semaines).
Le +1 dans cette formule n'a rien à voir avec une quelconque norme.
La formule calcule le nombre de jours entre le 01/09/2009 à 00:00 et le 31/12/2010 à 00:00.
Donc s'il faut inclure le 31/12/2010 dans le calcul, il faut ajouter 1 jour (bornes comprises)
 

wilfried_42

XLDnaute Barbatruc
Re : macro nombre de semaine à cheval

bonjour à tous

j'ai pas tout compris et surement pas la question à la vue des réponses apportées, je ne vois pas l'intérêt de la norme ISO dans un calcul du nombre de semaines dans une période.
la date de départ en A1
Nombre de semaines : =ENT(((("31/12/" & (ANNEE(A1)+1))*1)-A1)/7)

ensuite pour lister les dates de début et de fin la boucle :
Code:
Dim i as integer, dd as date
dd = Range("A1")
for i = 1 to int(((datevalue("31/12/" & (year(dd)+1))-dd)/7)
         Range("A" & i+1) = dd + ((i-1)*7)
         range("B" & i+1) = dd + ((i-1)*7)+6 
next i
 
Dernière édition:

Lio59

XLDnaute Nouveau
Re : macro nombre de semaine à cheval

Bonsoir à vous,

Tout d'abord, merci pour vos réponses. Je pensais avoir été clair en mettant en gras ce que je souhaitais.... à savoir transposer des formules (fonctions) dans des lignes de VBA.

Pour cela, effectivement j'ai donné quelques explications supplémentaires. Bon désolé pour le continent américain... cela dit, je pense que l'on m'a compris...;)

La fonction NUM.SEMAINE (qui renvoie un numéro de semaine) peut être utile pour calculer le nombre de semaines entre 2 dates.

La norme relative aux semaines a bien son importance. Illustrons....
Américaine... euhh US
01/09/2010 semaine 36
31/12/2010 semaine 53
15/07/2011 semaine 29
Donc nbreDeSemaine = ((53-36)+1) + 29 = 47

Pourquoi le +1? C'est la même chose que de vouloir compter des piquets de clôtures ou vouloir compter le nombre d'intervalles...

Norme EUR
01/09/2010 semaine 35
31/12/2010 semaine 52
15/07/2011 semaine 28
Donc nbrDeSemaine = ((52-35)+1) + 28 = 46

En norme US, il y a 2 jours en semaine 1, le samedi 01 et dimanche 02 janvier


Bref je souhaite connaître une macro pouvant calculer le nombre de semaines entre le 01/09/année et le 15/07/année+1 c'était écrit en gras

Oui, il est possible d'utiliser cette formule : =ARRONDI.SUP(DATEDIF(A1;A1;"d")/7;0) car le 15 juillet année+1 peut être le premier jour d'une semaine suivante! Donc il est plus juste de d'arrondir à l'entier supérieur...


Je souhaite pouvoir l'écrire en macro

Donc la méthode serait-elle celle-ci :
Transcrire la formule dans une fonction (function en VBA)
De lui affecter une variable
Et de rappeler cette "function" par son NOM ?

OU

via la syntaxe Evaluate(formule)

Encore merci

Bonne journée à vous...

Lio
 

hoerwind

XLDnaute Barbatruc
Re : macro nombre de semaine à cheval

Bonjour,

Petite mise en garde, au cas où ...

Suivant la norme ISO deux semaines d'une même année peuvent porter le même numéro.
Exemple : les 01/01/2006 et 31/12/2006 (semaine 52)

Ce problème n'existe pas sous la norme US.
 

ROGER2327

XLDnaute Barbatruc
Re : macro nombre de semaine à cheval

Bonjour à tous
Pour une fois, pas d'accord avec vous, hoerwind. La norme ISO 8601 donne ceci :
_
DATE_____________ISO 8601__
01/01/2006_______2005-W52-7
31/12/2006_______2006-W52-7
_
Autrement dit le 1er janvier 2006 est le dernier jour de la 52ème semaine de 2005, le 31 décembre 2006 est le dernier jour de la 52ème de 2006.
C'est la supériorité de la norme internationale sur la norme locale étasunienne : TOUTES les semaines comportent SEPT jours (est c'est heureux), alors que la norme étasunienne détruit la semaine comme unité stable en lui accordant une durée variant de UN à SEPT jours. Mais cette norme est locale et ne concerne qu'un petit nombre d'individus relativement à la population mondiale. Nous pouvons par conséquent l'oublier et continuer de considérer, avec bon sens, qu'une semaine est invariablement une période calendaire de sept jours.​
Cordialement,
ROGER2327
 

hoerwind

XLDnaute Barbatruc
Re : macro nombre de semaine à cheval

Bonjour Roger et les autres forumeurs,

Là n'était pas mon propos.

L'intention était d'attirer l'attention de notre ami Lio sur le fait que le résultat renvoyé par la fonction NUM.SEMAINE() de Morenfunc pouvait être cause d'éventuelles erreurs de calcul.
Ajouter l'année est une façon de faire, bien que cela rende les calculs ultérieurs quelque peu plus malaisés.
 

Lio59

XLDnaute Nouveau
Re : macro nombre de semaine à cheval

Bonjour à tous,

Effectivement hoerwind a raison, la fonction NUM.SEMAINE renvoie la valeur 52 pour le 01/01/2006 et le 31/12/2006. C'est pourquoi je souhaite utiliser la méthode citée dans mon premier message afin d'arriver au bon nombre de semaines quelque soit l'année sélectionnée.
Je me rends bien compte que le nombre de semaines entre le 01/09/année et le 15/07/année+1 est bien de 46 semaines à l'exception de quelques années où le nombre est de 47.... bref....
ROGER2327, vous semblez être très compétent dans le domaine mais laissez vos lecteurs, enfin moi, sur ma fin....

Alors je réécris la question de départ :

Quel serait le code ou plus exactement la syntaxe permettant d''obtenir le résultat de la formule
En A1 je saisis une année (par exemple : 2009)
Le résultat de la formule "=NUM.SEMAINE(A1)" serait récupéré par une variable a
Le résultat de la formule "=DATE(year(A1),Month(A1)+3,31)" récupéré par une variable b
si b <> 1 alors je passe du 31/12/année au 01/01/année+1, puis au 02/01/année+1, puis au 03/01/année+1, etc... jusqu'à ce que la variable b=1 (jusqu'à ce que le numéro de l'année+1 soit 1)
Le résultat de la formule "=NUM.SEMAINE(b)" serait récupéré par une variable c
Le résultat de la formule = c - a serait affiché en A2, par exemple.

Merci à vous tous....
Si ma question vous paraît stupide ou si la méthode peut être contournée par une autre façon de faire, je suis preneur....

Lio
 

ROGER2327

XLDnaute Barbatruc
Re : macro nombre de semaine à cheval

Re à Lio59
Je veux bien croire que vous restez sur votre faim, mais il faut dire que vous ne nous aidez guère :
Message #1 :
(...) le nombre de semaines du 01/09/ année saisie et 31/12/ année + 1 (...)
Message #9 :
(...) le nombre de semaines entre le 01/09/année et le 15/07/année+1 (...)
Sur le principe, le raisonnement est le même : de date 1 à date 2 : x jours.
partie entière de x/7 = nombre de semaines séparant les deux dates.
Les dates 1 et 2 étant fixes dans l'année, le nombre de jours les séparant est toujours le même, à un près à cause des années bissextiles.
S'agissant de la période allant du 1/9 au 15/7 (inclus) de l'année suivante, elle comporte 319 ou 318 jours selon que l'année suivante est ou n'est pas bissextile. Autrement dit, c'est une période de 45 semaines et 4 ou 3 jours.
Une autre question est de connaitre le nombre de semaines complètes commençant par un lundi (ou tout autre jour) comprises dans cette période. La réponse dépend et du nom du jour du début de période et de la nature de l'année suivante (bissextile ou non). Selon les cas, on trouve 44 ou 45 semaines complètes commençant par un lundi (ou tout autre jour).
Dans le cas de semaines complètes commençant par un lundi, on peut utiliser :
Code:
[COLOR="DarkSlateGray"]=45-(MOD(JOURSEM(DATE([B]A1[/B]+1;7;15);2);7)>3+SOMME((MOD([B]A1[/B]+1;{4;100;400})=0)*{1;-1;1}))[/COLOR]
A1 est l'année du début de la période.
On ne peut pas dire qu'une solution s'impose plus qu'une autre :
Si un chantier est prévu du 3 au 16 décembre 2009, il est peu probable qu'on prétende que le chantier est prévu pour durer une semaine, sous prétexte que la seule semaine complète commençant par un lundi dans cette période est la semaine du 7 au 13 décembre 2009. (Variante pour les pays ayant des semaines élastiques de un à sept jours : trois semaines...)
Il est clair que des travaux s'étendant du 3 au 16 inclus durent exactement deux semaines, quelle que soit l'année.
A vous de choisir entre les deux questions :
  1. Combien de semaines s'écoulent du 1er septembre au 15 juillet de l'année suivante ?
  2. Combien compte-t-on de semaines complètes commençant par un lundi entre le 1er septembre et le 15 juillet de l'année suivante ?
Cordialement,​
ROGER2327
 

Discussions similaires

Statistiques des forums

Discussions
312 374
Messages
2 087 727
Membres
103 655
dernier inscrit
MOUNIRACH16