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

  • Initiateur de la discussion Initiateur de la discussion Flx1er
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
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
 
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
 
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
 
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:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour