NUMÉRO DE LA SEMAINE : SANS LES BUGS DE LA SEMAINE 53 ET DU 29/12 (TESTÉ ET VÉRI
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 2006
-
3 août 2004 à 10:36
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
22 mars 2009 à 23:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 22 mars 2009 à 23:17
sub
function
...
end function
end sub
ca peut pas etre imbriqué...
jodeciters
Messages postés7Date d'inscriptionvendredi 26 décembre 2008StatutMembreDernière intervention16 mars 2009 22 mars 2009 à 15:01
Bonjour
je cherche également à obtenir un numéro de semaine dans une suite de dates en colonne.
Je programme ci-dessous que j'ai trouvé à plusieurs reprises dans des forums semble est correct.
Function NOSEM(D As Date) As Long
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
Mon souci est que je ne sais pas le mettre en oeuvre. Lorsque je tâche de l'exécuter, j'ai un message d'erreur du type "end sub attendu"
voici le code que j'ai tenté de faire :
Sub sen()
Function num_sem(D As Date) As Long
D = Range("A2").Value 'pour exemple A2 indique une date
num_sem = DateSerial(Year(D + (8 - Weekday(D)) Mod 7 - 3), 1, 1)
num_sem = ((D - num_sem - 3 + (Weekday(num_sem) + 1) Mod 7)) \ 7 + 1
End Function
End Sub
merci de votre aide
cs_orwen
Messages postés1Date d'inscriptionvendredi 13 janvier 2006StatutMembreDernière intervention 8 octobre 2008 8 oct. 2008 à 14:48
Merci pour le code Renfield, très utile et testé avec succès.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 4 janv. 2008 à 10:24
EBartSoft, et moi même avons également déposé des Snippets qui pourraient t'être utile
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 4 janv. 2008 à 10:21
chatissimus
Messages postés2Date d'inscriptiondimanche 8 août 2004StatutMembreDernière intervention 3 janvier 2008 3 janv. 2008 à 19:35
Le soucis ?
prends n'importe quel calendrier avec la numérotation des semaines, tu le verras.
une semaine a un numéro et une année d'appartenance. cette numérotation est unique et normalisée.
la semaine 1 de l'année X est la première semaine comprenant le 4 janvier de l'année X.
si on s'en tient aux fonctions vba la semaine du 31/12/2007 au 6/1/2008 est la semaine 53 de l'année 2007 si on est le 31/12, et la semaine 1 de l'année 2008 si on est après le 1/1/2008.
La même semaine a deux numérotations...
et de toute façon il n'existe pas de semaine 53 dans l'année 2007.
(C'est pas moi qui le décide, c'est la ISO 8601 si tu veux de la lecture ;-) )
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 3 janv. 2008 à 12:03
le dernier jour de l'annnée n'est pas en semaine 1 ...
où est le soucis ?
chatissimus
Messages postés2Date d'inscriptiondimanche 8 août 2004StatutMembreDernière intervention 3 janvier 2008 3 janv. 2008 à 11:44
En utilisant
Format(Date, "ww", vbMonday, vbFirstFourDays)
ou
DatePart("ww",Date,vbMonday,vbFirstFourDays)
j'obtiens semaine 53 pour le #31/12/2007# au lieu de semaine 1
le code donné sort bien la semaine 1
(en même temps c'est du vba sous Access 97 ;-) ceci explique peu etre cela )
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 22 juin 2006 à 16:20
étrange, chez moi c'est correct...
? DatePart("ww",#01/01/05#)
1
à noter que la fonction DatePart possède en outre deux parametres FirstDayOfWeek et FirstWeekOfYear...
blarcheres
Messages postés2Date d'inscriptionvendredi 7 novembre 2003StatutMembreDernière intervention22 juin 2006 22 juin 2006 à 14:56
Contrairement à ce qu'on dit les autres, les autres, ce code :
Public function NumeroSemaine(ByVal D as Date) As Integer
NumeroSemaine = DatePart("ww",D)
End Function
est certe bien plus simple mais ne donne pas de bon résultats pour certains jours comme le 01/01/2005 qui tombe la semaine
31 et non pas la semaine 1.
Morricon
Messages postés41Date d'inscriptionlundi 23 décembre 2002StatutMembreDernière intervention 1 mars 2007 26 mai 2005 à 14:35
Oups !
C'est normal que la fonction : NumeroJourJulien renvoi un resultat comme celui-ci : 2453371,5 ?
J'ai moi-même écrit des fonctions de calcul numéro semaine, et je n'obtient pas ce type de résultat !!!??
J'avoue ne pas comprendre !
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 23 oct. 2004 à 12:13
- si on traduit cette source en asm ou C et que l'on en fait une dll appellé par VB...ca sera beaucoup plus rapide que les fonctions de VB (surtout en cas d'appel fréquents...)
c'est valable pour bon nombre de sources, tu sais.....
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 23 oct. 2004 à 11:10
salut
c bien de dire que le code a été copier-coller depuis vbfrance et d'ailleurs depuis ma source qui cela dit est effectivement bien compliquée et dont le résultat est le même que la m..tienne lol...
http://www.vbfrance.com/code.aspx?id=5253
pour ceux qui doutent de l'utilité de ce code, deux chose à dire :
- si on traduit cette source en asm ou C et que l'on en fait une dll appellé par VB...ca sera beaucoup plus rapide que les fonctions de VB (surtout en cas d'appel fréquents...)
- et de plus avec la date julienne, on peut calculer les saisons, les quartiers de lune, des éclipses et bien d'autres choses...
ShareVB
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 4 août 2004 à 20:02
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 4 août 2004 à 18:08
Pour info :
VarType(Format$(Date, "ww"))
retourne 8, cad que Format$ serait de type STRING...
Mais Format sans le signe $ est bien de type Variant.
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 4 août 2004 à 18:03
Moi je parlais d'exactitude dans le n° de semaine retourné...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 4 août 2004 à 16:57
meilleur, je sais pas, je fait part de ma preference....
Format$ renvoyant un String....
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 4 août 2004 à 15:10
Oui mais cela ne me dit pas en quoi DatePart serait meilleur que Format$(Date, "ww").
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 4 août 2004 à 14:58
j'utiliserai DatePart également, plutot que Format (Date , "WW" )
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 4 août 2004 à 14:51
En ce qui me concerne, j'ai tjs utilisé la façon de faire suivante pour trouver le n° de la semaine selon une date :
MsgBox Format$(Date, "ww")
Est-ce buggé selon des cas bien précis ?
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 3 août 2004 à 15:06
Tiens !! Je connaissais pas DatePart() !!
Stephle
Messages postés10Date d'inscriptionlundi 17 mars 2003StatutMembreDernière intervention 3 août 2004 3 août 2004 à 14:35
Encore plus fort, et dans le meme genre que crenaud76:
Public function NumeroSemaine(ByVal D as Date) As Integer
NumeroSemaine = DatePart("ww",D)
End Function
Faut pas se prendre la tete quand des fonctions comme DateDiff() ou DatePart() existent déjà...
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 3 août 2004 à 11:47
Pour info : De l'eau chaude + de l'eau froide, ca donne de l'eau tiède !!!
juvamine
Messages postés468Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention30 août 20072 3 août 2004 à 11:35
j'ai la meme version que Christophe ^^
tu t'ai bien compliqué la vie je crois !!
a+
juva
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 3 août 2004 à 10:36
Sans voulori être méchant, voici ma version de ton code:
Public Function NumeroSemaine(ByVal D As Date) As Integer
NumeroSemaine = DateDiff("ww", "01/01/" & CStr(Year(D)), D, vbMonday, vbFirstJan1) + 1
End Function
22 mars 2009 à 23:17
function
...
end function
end sub
ca peut pas etre imbriqué...
22 mars 2009 à 15:01
je cherche également à obtenir un numéro de semaine dans une suite de dates en colonne.
Je programme ci-dessous que j'ai trouvé à plusieurs reprises dans des forums semble est correct.
Function NOSEM(D As Date) As Long
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
Mon souci est que je ne sais pas le mettre en oeuvre. Lorsque je tâche de l'exécuter, j'ai un message d'erreur du type "end sub attendu"
voici le code que j'ai tenté de faire :
Sub sen()
Function num_sem(D As Date) As Long
D = Range("A2").Value 'pour exemple A2 indique une date
num_sem = DateSerial(Year(D + (8 - Weekday(D)) Mod 7 - 3), 1, 1)
num_sem = ((D - num_sem - 3 + (Weekday(num_sem) + 1) Mod 7)) \ 7 + 1
End Function
End Sub
merci de votre aide
8 oct. 2008 à 14:48
4 janv. 2008 à 10:24
4 janv. 2008 à 10:21
Gobillot semble avoir prévu ce soucis :
http://www.codyx.org/snippet_recuperer-numero-semaine_61.aspx#401
testé avec mon code, issu du descriptif fournis sur le site wikipedia
http://fr.wikipedia.org/wiki/ISO_8601#Num.C3.A9ro_de_semaine
3 janv. 2008 à 19:35
prends n'importe quel calendrier avec la numérotation des semaines, tu le verras.
une semaine a un numéro et une année d'appartenance. cette numérotation est unique et normalisée.
la semaine 1 de l'année X est la première semaine comprenant le 4 janvier de l'année X.
si on s'en tient aux fonctions vba la semaine du 31/12/2007 au 6/1/2008 est la semaine 53 de l'année 2007 si on est le 31/12, et la semaine 1 de l'année 2008 si on est après le 1/1/2008.
La même semaine a deux numérotations...
et de toute façon il n'existe pas de semaine 53 dans l'année 2007.
(C'est pas moi qui le décide, c'est la ISO 8601 si tu veux de la lecture ;-) )
3 janv. 2008 à 12:03
où est le soucis ?
3 janv. 2008 à 11:44
Format(Date, "ww", vbMonday, vbFirstFourDays)
ou
DatePart("ww",Date,vbMonday,vbFirstFourDays)
j'obtiens semaine 53 pour le #31/12/2007# au lieu de semaine 1
le code donné sort bien la semaine 1
(en même temps c'est du vba sous Access 97 ;-) ceci explique peu etre cela )
22 juin 2006 à 16:20
? DatePart("ww",#01/01/05#)
1
à noter que la fonction DatePart possède en outre deux parametres FirstDayOfWeek et FirstWeekOfYear...
22 juin 2006 à 14:56
est certe bien plus simple mais ne donne pas de bon résultats pour certains jours comme le 01/01/2005 qui tombe la semaine
31 et non pas la semaine 1.
26 mai 2005 à 14:35
C'est normal que la fonction : NumeroJourJulien renvoi un resultat comme celui-ci : 2453371,5 ?
J'ai moi-même écrit des fonctions de calcul numéro semaine, et je n'obtient pas ce type de résultat !!!??
J'avoue ne pas comprendre !
23 oct. 2004 à 12:13
c'est valable pour bon nombre de sources, tu sais.....
23 oct. 2004 à 11:10
c bien de dire que le code a été copier-coller depuis vbfrance et d'ailleurs depuis ma source qui cela dit est effectivement bien compliquée et dont le résultat est le même que la m..tienne lol...
http://www.vbfrance.com/code.aspx?id=5253
pour ceux qui doutent de l'utilité de ce code, deux chose à dire :
- si on traduit cette source en asm ou C et que l'on en fait une dll appellé par VB...ca sera beaucoup plus rapide que les fonctions de VB (surtout en cas d'appel fréquents...)
- et de plus avec la date julienne, on peut calculer les saisons, les quartiers de lune, des éclipses et bien d'autres choses...
ShareVB
4 août 2004 à 20:02
typename ( Format(Date, "ww")) -> String
4 août 2004 à 18:08
VarType(Format$(Date, "ww"))
retourne 8, cad que Format$ serait de type STRING...
Mais Format sans le signe $ est bien de type Variant.
4 août 2004 à 18:03
4 août 2004 à 16:57
Format$ renvoyant un String....
4 août 2004 à 15:10
4 août 2004 à 14:58
4 août 2004 à 14:51
MsgBox Format$(Date, "ww")
Est-ce buggé selon des cas bien précis ?
3 août 2004 à 15:06
3 août 2004 à 14:35
Faut pas se prendre la tete quand des fonctions comme DateDiff() ou DatePart() existent déjà...
3 août 2004 à 11:47
3 août 2004 à 11:35
tu t'ai bien compliqué la vie je crois !!
a+
juva
3 août 2004 à 10:36