XL 2019 Power Query - extraire le nombre de semaine d'une année en fct d'une date

Flx1er

XLDnaute Occasionnel
Bonjour,
Je n'arrive pas à calculer le nombre de semaine qu'une année possède.

La norme ISO 8601, (https://fr.wikipedia.org/wiki/ISO_8601 cf chapitre numéro de semaine \ Système de numérotation \ Remarques et conséquences ) stipule :
"La dernière semaine de l'année (52 ou 53) est celle qui contient le dernier jeudi de l'année. Elle est la dernière à avoir la majorité de ses jours (au moins 4) dans l'année et contient systématiquement le 28 décembre. C'est aussi celle dont le dimanche est le plus proche du 31 décembre. Elle termine au plus tôt le 28 décembre ou au plus tard le 3 janvier ;"

La fonction Date.WeekOfYear, retourne la semaine d'une date.
Donc en passant comme paramètre "aaaa,12,28" à Date.WeekOfYear, je m'attendais a avoir le bon nombre de semaine. Eh bien non.

Pouvez vous m'aider a résoudre ce problème.
En vous remerciant
Cordialement

En pièce jointe un document de travail
 

Pièces jointes

  • Nbre semaine dans année 1.xlsx
    17.6 KB · Affichages: 5
Dernière édition:
Solution
Bonjour,

Voici une fonction qui le fait :
/*
Fonction renvoyant le nombre de semaines dans l'année désirée.
--------------------------------------------------------------
Paramètres :
--------------------------------------------------------------
Année : Facultatif (année en cours par défaut)
Valeurs possibles de 1 à 9999.

*/

(optional Année as number) as number =>
let
An = if Année = null or Année < 1 or Année > 9999 then Date.Year(DateTime.LocalNow()) else Année
in
52+Number.From((Date.DayOfWeek(#date(An,1,31),Day.Sunday)>4) and (Date.DayOfWeek(#date(An,7,31),Day.Sunday)>4))

Vous savez créer une fonction maintenant Non ?
Sinon, demandez :)
cordialement

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Voici une fonction qui le fait :
/*
Fonction renvoyant le nombre de semaines dans l'année désirée.
--------------------------------------------------------------
Paramètres :
--------------------------------------------------------------
Année : Facultatif (année en cours par défaut)
Valeurs possibles de 1 à 9999.

*/

(optional Année as number) as number =>
let
An = if Année = null or Année < 1 or Année > 9999 then Date.Year(DateTime.LocalNow()) else Année
in
52+Number.From((Date.DayOfWeek(#date(An,1,31),Day.Sunday)>4) and (Date.DayOfWeek(#date(An,7,31),Day.Sunday)>4))

Vous savez créer une fonction maintenant Non ?
Sinon, demandez :)
cordialement
 

fibled

XLDnaute Nouveau
Bonjour,

Voici une fonction qui le fait :


Vous savez créer une fonction maintenant Non ?
Sinon, demandez :)
cordialement

Bonjour Hasco

Quitte à passer pour un peu bête, je dois avouer ne pas savoir comment traduire ta proposition de code en Visual BASIC de base !
Pourrais-tu me donner le code VBA pour cette fonction qui me serait actuellement fort utile.

Je m’excuse d'avance pour le dérangement mais je te serais très reconnaissant si tu savais me donner un code directement (ou presque !) utilisable dans mes petite macro Excel :)

Merci d'avance
Frederic
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Cette fonction en langage M (langage dePower query) est la traduction d'une fonction vba qu'on trouvait partout sur internet lorsque la fonction excel NO.SEMAINE.ISO n'existait pas (excel < 2013) je crois qu'elle est à l'origine de Laurent Longres.

Si vous n'utilisez pas excel < 2013, vous n'avez pas besoin d'une fonction vba, la fonction de feuille NO.SEMAINE.ISO.

Inutile de réinventer la roue.

Mais si vous aimez ça :
VB:
Function NOSEM(D As Date) As Long
'Laurent Longre
   D = Int(D)
   NOSEM = DateSerial(Year(D + (8 - WeekDay(D)) Mod 7 - 3), 1, 1)
   NOSEM = ((D - NOSEM - 3 + (WeekDay(NOSEM) + 1) Mod 7)) \ 7 + 1
End Function

Cordialement
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,
je me réponds à moi-même :
Cette fonction en langage M (langage de Power query) fonction vba qu'on trouvait partout sur internet lorsque la fonction excel NO.SEMAINE.ISO n'existait pas (excel < 2013). je crois qu'elle est à l'origine de Laurent Longre.

Non c'est pas celle là que je ai donnée en M dans le post 2, mais peu importe les deux fonctionnent.

Cordialement
 
Dernière édition:

fibled

XLDnaute Nouveau
Re,
je me réponds à moi-même :


Non c'est pas celle là que je ai donnée en M dans le post 2, mais peu importe les deux fonctionnent.

Cordialement
Merci à vous deux pour vos reponses.

In finé, je me suis débrouillé avec la fonction DatePart() , qui m'a permis de regrouper et de comparer des enregistrements correspondant à une meme semaine .

cordialement
Frederic
 

chris

XLDnaute Barbatruc
Bonjour

Effectivement j'ai bégayé
1663095160372.png
 

Discussions similaires

Statistiques des forums

Discussions
311 715
Messages
2 081 822
Membres
101 822
dernier inscrit
holale