Premier jour de la semaine

Résolu
alexnrok Messages postés 4 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 7 novembre 2005 - 30 août 2004 à 16:50
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 13 janv. 2011 à 10:25
Bonjour est-il possible d'otenir le premier jour d'une semaine (en chiffre) en passant le numéro de la semaine ainsi que l'année? Par avance merci!!!!!!!!!
A voir également:

13 réponses

alexnrok Messages postés 4 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 7 novembre 2005
31 août 2004 à 09:50
Function GetLundi(Byval wn as long, byval Y as long) as Date
GetLundi = DateAdd("ww", wn, CDate("01/01/" & y)) - Weekday(CDate("01/01/" & y)) + 2
End Function
Toute petite modif (le -1 dans le DateAdd) mais ça marche nikel merci à Dragon et crenaud76
3
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
30 août 2004 à 16:56
Deux fonction que j'ai faite il y a quelques temps en VBA, mais devrait marcher en VB6.0

'*****************************************************************
'Fonction : jour_semaine *
' Projet : Rapports_Timetech *
' Par : Maxime Savard *
' Le : 2004-01-29 *
' description : Reçoi une semaine et une année *
' et retourne une string qui indique *
' la première et la dernière journée de la semaine *
' ex: Du 2003-10-03 au 2003-10-10 *
'*****************************************************************
Function jour_semaine(Semaine As Integer, année As Integer) As String
Dim temp As Date
Dim JourDeLAn As Date
Dim MonJourSem As Integer
Dim NbresJours As Integer

'trouve le jour de l'an de l'année
JourDeLAn = CDate("01/01/" & année)
'trouve le jour de l'an tombe quel jour (Lundi, mardi, .......)
MonJourSem = WeekDay(JourDeLAn, 2)

temp = (CDate("01/01/" & année) - MonJourSem) + ((val(Semaine) - 1) * 7)
jour_semaine = "Du " & temp & " au " & temp + 6
'fabrique la date du lundi de la semaine rechercher
'temp = CDate("01/01/" & Année) + NbresJours
'Fabrique la string final
'jour_semaine = "Du " & temp & " au " & temp + 6

End Function

Function jour_semaine_Dimanche(Semaine As Integer, année As Integer) As String
Dim JourDeLAn As Date
Dim MonJourSem As Integer
Dim NbresJours As Integer

'trouve le jour de l'an de l'année
JourDeLAn = CDate("01/01/" & année)
'trouve le jour de l'an tombe quel jour (Lundi, mardi, .......)
MonJourSem = WeekDay(JourDeLAn, 2)

jour_semaine_Dimanche = (CDate("01/01/" & année) - MonJourSem) + ((val(Semaine) - 1) * 7)

End Function
-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
0
alexnrok Messages postés 4 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 7 novembre 2005
30 août 2004 à 17:00
merci je vai voir ça tout de suite mais ça m'a l'air bien!
0
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
30 août 2004 à 17:03
j'ai faite la première fonction avant de faire la 2e lol

mais en gros, la première retourne une string donnera l'intervale de temps de la semaine.

la 2e, donne la journée du dimanche seulement
-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
0

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

Posez votre question
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
31 août 2004 à 00:47
si j'ai bien compris, tu veux savoir qu'elle est la date du Lundi d'une semaine, en fonction de son Num de semaine et de l'année ?
Si c'est bien cela, alors voila une formule d'une seule ligne qui le fait ...
Function GetLundi(Byval wn as long, byval Y as long) as Date
GetLundi = DateAdd("ww", wn - 1, CDate("01/01/" & y)) - Weekday(CDate("01/01/" & y)) + 2
End Function

A utiliser en transmettant le num de semaine à l'argument 'wn' et l'année à l'argument 'y'
Christophe R.
0
sebtralalaetph Messages postés 111 Date d'inscription dimanche 19 février 2006 Statut Membre Dernière intervention 2 avril 2010 1
5 févr. 2009 à 16:06
Bonjour,
il me semble que seule la solution de Dragon est bonne car les autres ne prennent pas en compte les années bissextiles.

Enfin, il me semble.
Bon boulot...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 févr. 2009 à 16:25
j'avoue ne pas voir ce que viens faire le coté bissextile de la chose
0
sebtralalaetph Messages postés 111 Date d'inscription dimanche 19 février 2006 Statut Membre Dernière intervention 2 avril 2010 1
5 févr. 2009 à 17:31
si on teste les deux méthodes avec semaine 6 de l'année 2011, on ne trouve pas les memes resultats.
Ce n'est peeut etre pas due aux années bissextile  mais sur certaines années, on ne trouve pas le meme résultat avec les deux solutions proposées.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 févr. 2009 à 08:30
NE PAS FAIRE :

CDate("01/01/" & y)

c'est moche, mais bon, ca fonctionne, partout
mais c'est une très mauvaise habitude a ne pas prendre. vous vous rendez dépendant des paramètres régionnaux du poste.

imaginez :

CDate("06/02/" & y)

sur certains postes, il s'agira du 6 Février
sur d'autres, ce sera le 2 Juin ...

passez par Dateserial, qui sera de plus plus rapide en temps d'execution

DateSerial(y, 1,1)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 févr. 2009 à 08:43
concernant la fonction de dragon :

? GetFirstDay(2,2009)
Du 04/01/2009 au 10/01/2009

les semaines commencent au dimanche, on ne tiens pas compte des paramètres régionaux.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 févr. 2009 à 09:05
je dirai:

Function GetWeekFirstDay(ByVal vnWeek As Long, ByVal vnYear As Long) As Date
Dim dFirstJan As Date
dFirstJan = DateSerial(vnYear, 1, 1)
GetWeekFirstDay = DateAdd("d", 7 * (vnWeek - 1), dFirstJan) - _
Weekday(dFirstJan, vbUseSystemDayOfWeek) + 1
End Function
0
peug Messages postés 232 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 5 octobre 2012
12 janv. 2011 à 18:28
La fonction GetWeekFirstDay est assez fausse..
GetWeekFirstDay(1,2011) retourn le 27/12/2010

Y'a aussi l'IDO 8601 qui détermine quelle est la semaine 1 d'une année (La première semaine d'une année est celle qui comporte au moins 4 jours).. Pas facile. Moi je creuse encore
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 janv. 2011 à 10:25
Tu as raison...

ajoutons simplement :
Function GetWeekFirstDay(ByVal vnWeek As Long, ByVal vnYear As Long) As Date
Dim dFirstJan As Date
    dFirstJan = DateSerial(vnYear, 1, 1)
    GetWeekFirstDay = DateAdd("d", 7 * (vnWeek - 1), dFirstJan) - _
                      Weekday(dFirstJan, vbUseSystemDayOfWeek) + 1
    If dFirstJan > GetWeekFirstDay Then
        GetWeekFirstDay = GetWeekFirstDay + 7
    End If
End Function


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
Rejoignez-nous