Premier jour de la semaine [Résolu]

Messages postés
4
Date d'inscription
lundi 30 août 2004
Dernière intervention
7 novembre 2005
- - Dernière réponse : Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 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!!!!!!!!!
Afficher la suite 

13 réponses

Meilleure réponse
Messages postés
4
Date d'inscription
lundi 30 août 2004
Dernière intervention
7 novembre 2005
3
Merci
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

Merci alexnrok 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Dernière intervention
5 mai 2009
0
Merci
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
-------------------------------------------------
Messages postés
4
Date d'inscription
lundi 30 août 2004
Dernière intervention
7 novembre 2005
0
Merci
merci je vai voir ça tout de suite mais ça m'a l'air bien!
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Dernière intervention
5 mai 2009
0
Merci
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
-------------------------------------------------
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Dernière intervention
9 juin 2006
0
Merci
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.
Messages postés
111
Date d'inscription
dimanche 19 février 2006
Dernière intervention
2 avril 2010
0
Merci
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...
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
j'avoue ne pas voir ce que viens faire le coté bissextile de la chose
Messages postés
111
Date d'inscription
dimanche 19 février 2006
Dernière intervention
2 avril 2010
0
Merci
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.
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
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)
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
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.
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
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
Messages postés
234
Date d'inscription
mercredi 25 octobre 2000
Dernière intervention
5 octobre 2012
0
Merci
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
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.