Trouver numéro de semaine

Clashme Messages postés 29 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 17 juillet 2008 - 1 juil. 2008 à 14:50
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 - 2 sept. 2009 à 20:40
Public Function TrouverNuméroSemaine(ByVal Dte As Date) As Integer

bonjour tout le monde !!
voilà j'utilise depuis un mois une petite fonction pour trouver mon numéro de semaine ! avec la condition de la semaine 53

j'ai trouvé cette fonction sur ce site qui correspondé trés bien a ma demande
mais j'ai remarqué que pour mes dates de 2008 et 2009 tout allé bien!
mais à partir du 03/01/2010 mes semaines étaient décaller d'une semaine + 1 dans le temps par rapport à mon calendrier que j'ai sous mes yeux...
voici la fonction :
TrouverNuméroSemaine = Format(Dte - 2, "ww", vbSaturday)
If TrouverNuméroSemaine > 52 Then
TrouverNuméroSemaine = 52
If Format(Dte + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then
TrouverNuméroSemaine = 1
End If
End If

End Function

si quelqu'un pouvait m'éclairer sur mon probleme xD
merci d'avance

11 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 juil. 2008 à 15:24
Bonjour,

et si tu t'intéressais (voir celà dans ton aide en ligne, sur ta machine) à la fonction Datepart, tout simplement  ?
0
Clashme Messages postés 29 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 17 juillet 2008
1 juil. 2008 à 16:16
bonjour jmfmarques !

tout simplement le meme probleme....

DateFin = "28/07/2010"
semainetest = DatePart("ww", DateFin) 'me donne 31

semainef = Format(DateFin - 2, "ww", vbSaturday) ' me donne 31

alors que normalement le 28 juillet 2010 tombe en semaine 30 !
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
1 juil. 2008 à 16:39
Salut,
Une recherche rapide sur google et tu aurais trouvé ceci.

t&ct=res&cd=5&url=http%3A%2F%2Fwww.freevbcode.com%2FShowCode.asp%3FID%3D7369&ei=NEFqSIfuG4_o0gXgtpynDA&usg=AFQjCNGIqzQsey2vUTJyldiHcv1r56I5-w&sig2=7728bDV2rdyIVnEwbdzDbQ Retrieve The Week Number For a Given Date

Private Sub Form_Load()
MsgBox Week(#7/28/2010#)
End Sub<hr />

Private Function Week(dteValue As Date) As Integer
  'Monday is set as first day of week
  Dim lngDate As Long
  Dim intWeek As Integer
 
  'If january 1. is later then thursday, january 1. is not in week 1
  If Not Weekday("01/01/" & Year(dteValue), vbMonday) > 4 Then
     intWeek = 1
  Else
     intWeek = 0
  End If
  'Sets long-value for january 1.
  lngDate = CLng(CDate("01/01/" & Year(dteValue)))
 
  'Finds the first monday of year
  lngDate = lngDate + (8 - Weekday("01/01/" & Year(dteValue), vbMonday))
  'Increases week by week until set date is passed
  While Not lngDate > CLng(CDate(dteValue))
     intWeek = intWeek + 1
     lngDate = lngDate + 7
  Wend
  'If the date set is not in week 1, this finds latest week previous year
  If intWeek = 0 Then
     intWeek = Week("31/12/" & Year(dteValue) - 1)
  End If
  Week = intWeek
End Function , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i€n
Pensez: Réponse acceptée
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 juil. 2008 à 16:57
salut,

et pour le fun, pas plus loin que dans cette fenêtre sur la droite...

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Clashme Messages postés 29 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 17 juillet 2008
1 juil. 2008 à 17:00
écoute j'ai recherché/testé plusieur fonction plus que tu ne le crois avant de posté ici !

j'avais préféré celle que j'ai mise sur mon premier message ! 1/ pour ca taille 2/ elle fonctionne sans boucle...
3/ ces résultat correcte
avant de m'appercevoir du probléme lié à l'année 2010

certe ton code à l'aire de fonctionner mais je le trouve trop long
surtout pour mon traitement qui travail sur plus de 2000 lignes

merci comme meme julien de vouloir m'aider

si d'autres personnes ont des idées n'ésité pas
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
1 juil. 2008 à 17:31
Salut,

oui j'ai une autre idee...

- te prendre par la main et aller voir le lien que t'a donné PCPT car il regroupe toute les methodes generiques. Les solutions de Jmfmarques et de Jrivet incluses.

Bon courage

A+
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
1 juil. 2008 à 18:01
Ou alors écrire toi même ta propre fonction ?
C'est ce que j'ai fait personnellement moi-même en m'inspirant de plusieurs trouvées sur le net (ce qui fait qu'à mon avis, on doit retrouver la même chose un peu partout au nom de variable près).
La voici, la voilà :

Public Function NuméroSemaine(DateContrôlée As Date) As String
   
    NuméroSemaine = DatePart("ww", DateContrôlée, vbMonday, vbFirstFourDays)
    If NuméroSemaine > 52 Then
        If DatePart("ww", DateContrôlée + 7, vbMonday, vbFirstFourDays) = 2 Then
           NuméroSemaine = 1
       End If
    End If
    NuméroSemaine = Right("0" & NuméroSemaine, 2)


End Function

Ah oui, ma fonction sort la semaine au format String parce que je veux que les premières soient 01, 02 ... 09 et non 1, 2, ... 9.

Si je rentre 28/07/2010, je trouve la semaine 30.

Autrement, ton problème peut venir que tu paramètres très mal la fonction DatePart.
Le numéro de semaine par chez nous correspond aux options vbMonday et vbFirstFourDays : si elles ne sont pas précisées, elles ont pour valeur par défaut vbSunday et vbFirstJan1.
Mais même bien paramétrée, elle ne fonctionne pas toujours bien (essayez avec le 31/12/2007 et dites moi ce qui ressort ^^)

'alà

Molenn
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
1 juil. 2008 à 21:24
Attention à la définition du n° de semaine et notamment de la première semaine de l'année.
Cela peut varier.

les définitions les plus courantes sont :
- La première semaine est celle du 1er Janvier
- La premiere semaine est la première semaine de l'année comptant au moins 4 jours
- Le premiere semaine est la première semaine complete de l'année.

Sachant que le premier jour de l'année peut etre variable lui aussi, et définie soit le dimanche, soit le lundi.

Généralement en France, le premier jour de la semaine est défini sur Lundi, et la première semaine de l'année, celle du 1er Janvier.
Mais ce n'est pas forcément le cas dans le paramétrage de ton logiciel.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
2 juil. 2008 à 09:12
Pas tout à fait vrai Casy, en France, la première semaine n'est pas celle contenant le 1er janvier.
Exemple : le 1er janvier 2006 faisait partie de la semaine 52.

La règle est la suivante :
'******************************************************************
' Calcul des dates d'une année par numéro de semaine
'
' Recommandations de l'Organisation Internationale de Standardisation
' Norme ISO 8601

' - Le lundi est considéré comme le premier jour de la semaine.
' - Les semaines d'une même année sont numérotées de 01 à 52
' (parfois 53).
' - La semaine qui porte le numéro 01 est celle qui contient le
' premier jeudi de janvier.
' - Il peut exister une semaine n°53 (années communes finissant
' un jeudi, bissextiles finissant un jeudi ou un vendredi).
'******************************************************************

Molenn
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
2 juil. 2008 à 12:04
salut,

le snippet de Molenn est dispo ici :
http://www.vbfrance.com/infomsg_TROUVER-NUMERO-SEMAINE_1163483.aspx#9

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0
zen69 Messages postés 584 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 29 avril 2010 1
2 sept. 2009 à 20:40
Sur ce site (lien) tu vas trouver un algorithme il n'en tient qu'à toi de l'adapter pour VB.

Perso je l'ai adapter à SQL Serveur et je l'ai aussi reversée prenant pour input un string tel que "2009-W01-1" et retourne une date.

 
 Julien B.
 
0
Rejoignez-nous