Calculer un numero de semaine en fonction d'une date

nabseven

XLDnaute Nouveau
Bonjour à tous,
J'aimerais, comme l'intitulé l'indique, calculer un numero de semaine en fonction d'une date. J'ai effectué beaucoup de recherche mais ca ne marche toujours pas. J'ai testé plein de formules que j'ai récupérer sur les forums mais ca ne marche pas. Par exemple, pour la date du 31/12/2008, le résultat affiché est 1 alors qu'il devrait être 52. Si quelqu'un pouvait m'aider. Merci d'avance.
 

JCGL

XLDnaute Barbatruc
Re : Calculer un numero de semaine en fonction d'une date

Bonjour à tous,

Une formule de Monique :

Code:
=ENT(MOD(ENT((A3-2)/7)+0.6;52+5/28))+1
Ta date en A3

A+

Ajout tiré du WikiPedia:

L'organisation internationale de normalisation (ISO) a émis les recommandations suivantes :
  1. Le lundi est considéré comme le premier jour de la semaine. (norme ISO 8601 et Académie française)
  2. Les semaines d'une même année sont numérotées de 01 à 52 (parfois 53).
  3. La semaine qui porte le numéro 01 est celle qui contient le premier jeudi de janvier.
  4. Il peut exister une semaine n° 53 (années communes finissant un jeudi, bissextiles finissant un jeudi ou un vendredi).
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Calculer un numero de semaine en fonction d'une date

Bonjour à tous,
Eh bien chapeau Monique, dire que moi j'avais fait ça :

Code:
Function NumSem(DateJour As Date) As Long
'Calcule le numéro de semaine d'une année suivant cette norme :
'la semaine du 1er janvier n'est la semaine 1 que si elle contient au moins 4 jours
'la semaine commence le lundi
Dim PremJanv As Date, PremJanvSuiv As Date, DateSem1 As Date, DateSem1Suiv As Date
    PremJanv = DateSerial(Year(DateJour), 1, 1)
    PremJanvSuiv = DateSerial(Year(DateJour) + 1, 1, 1)
    If Weekday(PremJanv, vbMonday) <= 4 Then
        DateSem1 = PremJanv - Weekday(PremJanv, vbMonday) + 1
    Else
        DateSem1 = PremJanv + 8 - Weekday(PremJanv, vbMonday)
    End If
    If Weekday(PremJanvSuiv, vbMonday) <= 4 Then
        DateSem1Suiv = PremJanvSuiv - Weekday(PremJanvSuiv, vbMonday) + 1
    Else
        DateSem1Suiv = PremJanvSuiv + 8 - Weekday(PremJanvSuiv, vbMonday)
    End If
    NumSem = 1 + (DateJour - DateSem1) \ 7
    If DateSem1 > DateJour Then
        NumSem = NumSem(PremJanv - 1)
    ElseIf DateJour >= DateSem1Suiv Then
        NumSem = NumSem(PremJanvSuiv)
    End If
End Function

et que la formule de Monique commence seulement à ne pas être d'accord avec moi en 2105...

Je ne comprend pas sa formule mais j'admire le résultat !
 

JCGL

XLDnaute Barbatruc
Re : Calculer un numero de semaine en fonction d'une date

Re,

Tu as aussi celle-là pour un Calendrier 1904 de Monique aussi :

Code:
=ENT(MOD(ENT((A3-2+(JOUR(1)=2)*6)/7)+0.6+((JOUR(1)=2)*208);52+5/28))+1
A+
 

kjin

XLDnaute Barbatruc
Re : Calculer un numero de semaine en fonction d'une date

Bonjour,
Comme déjà indiqué par JCGL (que je salue), si pour toi, le 31/12/08 est la 52ème semaine tu risques peut-être d'avoir quelques soucis !
Avec ta date en A1 :
=NO.SEMAINE(A1) te renverras "53"
=ENT(MOD(ENT((A1-2)/7)+0,6;52+5/28))+1 te renverras "1"

Mais jamais "52"
A+
kjin
 

JHA

XLDnaute Barbatruc
Re : Calculer un numero de semaine en fonction d'une date

Bonjour à tous,

Pourquoi ne pas utiliser la fonction NO.SEMAINE()
=NO.SEMAINE(A1;2) pour 31/12/08 cela donne sem 53

Si le nomero 53 ne te plait pas , tu peux faire ceci:
=SI(NO.SEMAINE(A1;2)=53;1;NO.SEMAINE(A1;2))

Cette fonction n'est-elle pas fiable?

Pour Nabseven, le 31/12/08 donne semaine 1 ou 53 si tu restes sur la même année mais pour moi la semaine 52 s'arrête au 28/12/2008.

JHA
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Calculer un numero de semaine en fonction d'une date

Bonjour à tous,

NO.SEMAINE n'est pas fiable parce qu'elle considère que le 1er janvier est toujours dans la 1ère semaine de l'année, ce qui ne correspond pas à la norme française "1ère semaine de 4 jours"....
Donc certaines années on aura un décalage d'une semaine.
 

JCGL

XLDnaute Barbatruc
Re : Calculer un numero de semaine en fonction d'une date

Re,
Salut kjin,

Un petit fichier récapitulatif avec des formules et des fonctions retrouvées sur ce Forum.
Il manque des intervenants(es) mais je pense être remonté assez loin.

Maintenant, libre à vous de choisir la formule ou la fonction qui vous convient.

Merci aussi de répercuter la "paternité" du code et/ou de de la formule

A+
 

Pièces jointes

  • N° Semaine.zip
    11.9 KB · Affichages: 933

Micke-31

XLDnaute Occasionnel
Re : Calculer un numero de semaine en fonction d'une date

Salut,

Ci dessous une fonction qui comptabilise les semaines jusqu'au 31 décembre soit du 29/12 affichera 53 et recommencera le décompte à 1 au 1er janvier

Function CLSC(Dates As Date) As Integer
Dim Semaine As Integer
Semaine = Int((Dates - DateSerial(Year(Dates), 1, 1) + _
((Weekday(DateSerial(Year(Dates), 1, 1)) + 1) _
Mod 7) - 3) / 7) + 1
If Semaine = 0 Then
Semaine = CLSC(DateSerial(Year(Dates) - 1, 12, 31))
ElseIf Semaine = 53 And (Weekday(DateSerial(Year(Dates), 12, 31)) - 1) _
Mod 7 <= 3 Then
Semaine = 53
End If
CLSC = Semaine
End Function

A+
 

abcd

XLDnaute Barbatruc
Re : Calculer un numero de semaine en fonction d'une date

Bonjour,

Merci JCGL pour ce tableau récapitualtif.

Petite précision quant à la formule proposée en colonne B.
Suivant la norme ISO (colonne E) deux semaines peuvent se voir attribuer un même numéro dans la même année, par exemple les 01/01/2006 et 31/12/2006, toutes deux semaine 52.
Ce qui pose problème pour des extractions sur base du numéro de semaine (les deux semaines sont prises en compte).
De là l'idée de numéroter "0" la première semaine de l'année si la norme ISO lui attribue le dernier numéro de l'année précédente.

Ce n'est pas exact suivant la norme, mais les calculs ultérieurs le sont, ce qui est quand même le plus important.

abcd

Edition pour tototiti :
La norme ISO n'est une norme "française", mais bien "européenne".
Rendons à Cesar ce qui lui appartient.
 
Dernière édition:

Pyrof

XLDnaute Occasionnel
Re : Calculer un numero de semaine en fonction d'une date

Bonjour,

J'ai eu aussi ce problème, et je me suis rendu compte qu'il faudrait que la date que l'on donne à la fonction NO.SEMAINE soit un Samedi.

De plus dans mes travaux j'avais souvent besoin de la date du lundi de la semaine courante.
J'ai donc fais le fonction lundi duivante

Function lundi(tmp As Date, Optional jour)
Application.Volatile
If IsMissing(jour) Then jour = 0
lundi = DateSerial(Year(tmp), Month(tmp), Day(tmp) - Weekday(tmp, 2) + 1 + jour)
End Function

Elle me retourne le précédent lundi.

Si tu fais maintenant NO.SEMAINE(lundi(ma_date)+5) tu trouvera bien 1
 

JCGL

XLDnaute Barbatruc
Re : Calculer un numero de semaine en fonction d'une date

Bonjour à tous,
Salut ABCD :),

Comme dit dans mon message :
Maintenant, libre à vous de choisir la formule ou la fonction qui vous convient.

Je pense que tous ont compris que je ne souhaitais que rassembler quelques formules et fonctions glanées sur XLD.

Il est inévitable qu'elles peuvent et/ou doivent être adaptées à vos cas personnels

A+
 

TheLio

XLDnaute Accro
Re : Calculer un numero de semaine en fonction d'une date

Bonjour tous,
Pour ma part, j'ai intégré la "Wonder Formule à Monique" dans mes fichiers pour la simple et bonne raison que je travaille sous 2003 au travail et 2007 at home.
En sachant que ces fonctions ne sont plus en macro complémentaires, mais directement intégrée à 2007, il faut reprendre et valider chaque formules... :(
(donc, mieux vaut prévenir et oublier NO.SEMAINE si vous allez faire migrer vos classeurs sur 2007 /et suivants...)
Alors je dis Merci Monique (et JCGL pour son fichier récapitulatif)
A++
Lionel
 

tototiti2008

XLDnaute Barbatruc
Re : Calculer un numero de semaine en fonction d'une date

Bonjour à tous,

Simplement pour ajouter une autre formule (en effet la formule de Monique semble avoir quelques soucis à partir de l'année 2105 mais celle-ci semble fonctionner tout le temps (au moins jusqu'au 1/1/3000)) :

=ENT((D1-SOMME(MOD(DATE(ANNEE(D1-MOD(D1-2;7)+3);1;2);{1E+99;7})*{1;-1})+5)/7)

Je ne la comprend pas, trouvée par un collègue sur internet...
C'était juste pour enrichir le sujet.
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 249
Membres
103 498
dernier inscrit
FAHDE