Correspondance année et numéro de semaine

Bonjour,

Malgré mes recherches sur ce forum qui m'on largement permis d'avancer sur comment extraire un numéro de semaine à partir d'une date ( NO.SEMAINE(DATE X;21) ou NO.SEMAINE.ISO(DATE X) ).

Je n'arrive pas à extraire à partir d'une date un numéro de semaine et son année correspondante. Ou tout du moins certaines dates sont problématiques. C'est à dire toutes les dates qui sont dans la première semaine de l'année N mais dont le jour est en année N-1.

Tel que par exemple (il 'y a d'autres exemples dans le fichier joint) : 31/12/2012 date pour laquelle j'aimerais obtenir SEM 1 2013 et pas SEM 1 2012 via le code ci après.

"SEM "&TEXTE(NO.SEMAINE(41274;21);"0")&" "&TEXTE(41274;"aaaa")

A la lecture du fichier joint et mes commentaires auriez vous une solution à me proposer (de préférence sans MACROS) ?

Merci

Cordialement

Hugues

Bonsoir,

Je n'utilise jamais les fonctions Microsoft de calcul du numéro de semaine !

Microsoft a mis une particulièrement mauvaise volonté pour ne pas produire une fonction renvoyant en tout temps le résultat exact !

Sa dernière censée renvoyer le résultat à la norme européenne trouve encore le moyen d'être en erreur tous les 28 ans !!

Bref, donc je préconise une fonction renvoyant le résultat exact de façon pérenne ou une fonction personnalisée faisant de même.

Ceci dit les fonctions ou formules utilisables sont conçues pour renvoyer le numéro de semaine sans l'année ISO de référence.

En bricolant rapidement :

Function ANNSEM(d As Date) As String
    Dim dref, s%, a%
    Application.Volatile
    dref = DateSerial(Year(d + (8 - Weekday(d)) Mod 7 - 3), 1, 3)
    a = Year(dref)
    dref = dref - Weekday(dref) + 2
    s = (d - dref) \ 7 + 1
    ANNSEM = a & "-S" & Format(s, "00")
End Function

Cette fonction devrait te renvoyer : 2013-S01 pour le 31/12/2012.

Je vais tout de même la tester !

Cordialement.

NB- Je vais voir si je peux adapter une formule...


=ANNEE(RECHERCHE(A1;DATE(ANNEE(A1)+{-1;0;1};1;3)))&"-S"&TEXTE(ENT((A1-RECHERCHE(A1;DATE(ANNEE(A1)+{-1;0;1};1;3)-JOURSEM(DATE(ANNEE(A1)+{-1;0;1};1;3))+2))/7)+1;"00")

Voilà pour le même résultat en formule.

C'est un arrangement de la formule ci-dessous renvoyant le numéro de semaine.

=ENT((A1-RECHERCHE(A1;DATE(ANNEE(A1)+{-1;0;1};1;3)-JOURSEM(DATE(ANNEE(A1)+{-1;0;1};1;3))+2))/7)+1

NB- Tu peux arranger la sortie chaîne aussi bien pour la fonction que pour la formule, selon tes souhaits.

J'ai mis en forme selon la norme ISO 8601 : Année-S ou W-NumSem sur 2 caract. (évent. suivi de : -Jour de 1 à 7, que j'ai omis...)

Cordialement.

Bonjour MFERRAND,

Merci pour ta réponse.

Je n'ai pas encore testée la fonction, je ferais cela dans la soirée.

Par contre concernant la formule sauf erreur de ma part (je n'ai pas pris le temps de comprendre entièrement la syntaxe je l'ai juste appliquée à mon classeur exemple en modifiant chaines de caractère) elle ne renvois pas le résultats attendu.

Ainsi par exemple 31/12/2012 renvois 2012-S01 (et non 2013-S01).

Le classeur exemple sera peut être plus explicite et surtout on peut y voir qu'il y'a d'autres dates qui posent problèmes.

Cordialement

Hugues

Bonjour,

Tu as raison ! J'ai été un peu vite pour la formule, je la remets en chantier...

La fonction renvoie bien 2013.

A+


=ANNEE(RECHERCHE(E55;DATE(ANNEE(E55)+{-1;0;1};1;3)-JOURSEM(DATE(ANNEE(E55)+{-1;0;1};1;3))+2;DATE(ANNEE(E55)+{-1;0;1};1;3)))&"-S"&TEXTE(ENT((E55-RECHERCHE(E55;DATE(ANNEE(E55)+{-1;0;1};1;3)-JOURSEM(DATE(ANNEE(E55)+{-1;0;1};1;3))+2))/7)+1;"00")

Ça devrait aller mieux, mais là je commence à la trouver un peu longue !

Je verrai si je peux la raccourcir, mais pas le temps tout de suite.

nb- Je vois que j'ai laissé E55, cellule sur laquelle elle pointait dans mon classeur test... (pas gênant je pense...)

Re bonjour MFERRAND,

Ta dernière formule fonctionne parfaitement.

Je te remercie et cela malgré la longueur de la dite formule moi je n'y étais pas arrivé.

Je vais analyser la syntaxe pour bien la comprendre.

Je vais également essayer de m'approprier ta fonction et l'ajouter à mes macros complémentaires.

Encore merci pour la justesse de ta réponse et sa rapidité

Cordialement

Hugues

Ce qui l'allonge, c'est que pour renvoyer une date permettant de définir l'année, le résultat renvoyé par RECHERCHE doit être pris dans un vecteur différent de celui de la recherche...

Si je parviens à la réduire, je reviendrai ! (mais pour l'heure, je prépare mon départ et manque un peu de temps).

Mais une fonction personnalisée est aussi simple d'emploi qu'une fonction native d'Excel...

Cordialement.

Rechercher des sujets similaires à "correspondance annee numero semaine"