Clashme
Messages postés29Date d'inscriptionvendredi 6 juin 2008StatutMembreDernière intervention17 juillet 2008
-
1 juil. 2008 à 14:50
zen69
Messages postés584Date d'inscriptionjeudi 28 décembre 2006StatutMembreDernière intervention29 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
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]
Clashme
Messages postés29Date d'inscriptionvendredi 6 juin 2008StatutMembreDernière intervention17 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
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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.
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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 ^^)
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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.
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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).
'******************************************************************