Premier jour de la semaine [Résolu]

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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

cs_dragon 2336 Messages postés samedi 14 juillet 2001Date d'inscription 5 mai 2009 Dernière intervention - 30 août 2004 à 16:56
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
-------------------------------------------------
alexnrok 4 Messages postés lundi 30 août 2004Date d'inscription 7 novembre 2005 Dernière intervention - 30 août 2004 à 17:00
0
Merci
merci je vai voir ça tout de suite mais ça m'a l'air bien!
cs_dragon 2336 Messages postés samedi 14 juillet 2001Date d'inscription 5 mai 2009 Dernière intervention - 30 août 2004 à 17:03
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
-------------------------------------------------
crenaud76 4172 Messages postés mercredi 30 juillet 2003Date d'inscription 9 juin 2006 Dernière intervention - 31 août 2004 à 00:47
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.
sebtralalaetph 111 Messages postés dimanche 19 février 2006Date d'inscription 2 avril 2010 Dernière intervention - 5 févr. 2009 à 16:06
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...
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 5 févr. 2009 à 16:25
0
Merci
j'avoue ne pas voir ce que viens faire le coté bissextile de la chose
sebtralalaetph 111 Messages postés dimanche 19 février 2006Date d'inscription 2 avril 2010 Dernière intervention - 5 févr. 2009 à 17:31
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.
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 6 févr. 2009 à 08:30
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)
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 6 févr. 2009 à 08:43
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.
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 6 févr. 2009 à 09:05
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
peug 234 Messages postés mercredi 25 octobre 2000Date d'inscription 5 octobre 2012 Dernière intervention - 12 janv. 2011 à 18:28
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
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 13 janv. 2011 à 10:25
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.