Comment obtenir la date du 1er jour de la semaine Numéro X ?

Le
Teddy
Bonjour,

Je sais avec DatePart() obtenir le numéro de la semaine d'une date donnée.

A l'inverse, je cherche un moyen d'obtenir la date complète du 1er jour de
la semaine connaissant le numéro de ladite semaine.

J'ai trouvé une méthode "système D" en comparant toutes les dates de l'année
jusqu'à avoir le même numéro de semaine mais cela ne me satisfait pas car
c'est lent.

Merci pour vos idées.

Teddy
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Zoury
Le #15290521
Salut Teddy!

regarde ce message :
http://groups.google.com/groups?selm=uy%24QJ%24E2CHA.868%40TK2MSFTNGP12

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/
" Teddy" news:
Bonjour,

Je sais avec DatePart() obtenir le numéro de la semaine d'une date donnée.

A l'inverse, je cherche un moyen d'obtenir la date complète du 1er jour de
la semaine connaissant le numéro de ladite semaine.

J'ai trouvé une méthode "système D" en comparant toutes les dates de


l'année
jusqu'à avoir le même numéro de semaine mais cela ne me satisfait pas car
c'est lent.

Merci pour vos idées.

Teddy




le_troll
Le #15290511
Bonsoir,

dim date1 as date
Si le 01/01/N est un dimanche = 1 (ou 0) suivant numérotation, disons 1
ici alors : date1 = 01/01/N
si le 01/01/N <> dimanche alors
date1= 26/12/N-1
for i = 1 to 6
if date1 = dimanche alors sort de la boucle
date1 = date1 + i
next i
fin de condition
' nous avons ainsi la date du dimanche 1er J de la 1ere semaine dans
"date1"
'
Si semaine_recherchee = 1 alors ---> date1
Si semaine_rechechee > 1 alors i = date1 + ((semaine_recherchee - 1) *
7)
' la variable date va additionner toute seule les jours correctement
suivant l'année concernée
' A tester, je n'ai pas essayé, manque de temps :o)
'---------------------------
En pratique sur l'année 2005
détermine le 1er dimanche, qui n'est pas le 1/1/5, donc on va le
chercher en 2004 = 26/12/4
Disons qu'on veut la semaine 3, soit : (3-1)* 7 = 14, soit 26/12/4+14 9, soit 9/1/5 = dimanche 9 (semaine 3)


--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Ce message est plein de virus "certifiés"
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


" Teddy"
Bonjour,

Je sais avec DatePart() obtenir le numéro de la semaine d'une date donnée.

A l'inverse, je cherche un moyen d'obtenir la date complète du 1er jour de
la semaine connaissant le numéro de ladite semaine.

J'ai trouvé une méthode "système D" en comparant toutes les dates de


l'année
jusqu'à avoir le même numéro de semaine mais cela ne me satisfait pas car
c'est lent.

Merci pour vos idées.

Teddy




Zoury
Le #15290501
oublie le premier lien... tu est quand même loin de ton profit..


regarde plutôt ceci :
'***
' Module1
Option Explicit

Private Sub Main()

Debug.Print FirstDateOfYear(2004, 2)

End Sub

Private Function FirstDateOfYear _
( _
ByRef iYear As Integer, _
ByRef iWeek As Integer, _
Optional ByRef FirstDayOfWeek As VbDayOfWeek = VbDayOfWeek.vbSunday
_
) As Date

FirstDateOfYear = DateSerial(iYear, 1, 1)
If Weekday(FirstDateOfYear, FirstDayOfWeek) <> 1 Then
FirstDateOfYear = FirstDateOfYear + (8 - Weekday(FirstDateOfYear,
FirstDayOfWeek))
End If
If (iWeek > 1) Then
FirstDateOfYear = FirstDateOfYear + (7 * (iWeek - 1))
End If

End Function
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/
Zoury
Le #15290491
naaa.. j'ai oublié de renommer la fonction avec toutes ces modifications...
FirstDateOfWeek me parait plus logique.

'***
' Module1
Option Explicit

Private Sub Main()

Debug.Print FirstDateOfWeek(2004, 2)

End Sub

Private Function FirstDateOfWeek _
( _
ByRef iYear As Integer, _
ByRef iWeek As Integer, _
Optional ByRef FirstDayOfWeek As VbDayOfWeek = VbDayOfWeek.vbSunday
_
) As Date

FirstDateOfWeek = DateSerial(iYear, 1, 1)
If Weekday(FirstDateOfWeek, FirstDayOfWeek) <> 1 Then
FirstDateOfWeek = FirstDateOfWeek + (8 - Weekday(FirstDateOfWeek,
FirstDayOfWeek))
End If
If (iWeek > 1) Then
FirstDateOfWeek = FirstDateOfWeek + (7 * (iWeek - 1))
End If

End Function
'***


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/
Teddy
Le #15290461
Merci, c'est ce que je cherchais !
Je vais quand même approfondir l'emploi de ce "DateSerial".

Teddy



"Zoury" news:
naaa.. j'ai oublié de renommer la fonction avec toutes ces


modifications...
FirstDateOfWeek me parait plus logique.

'***
' Module1
Option Explicit

Private Sub Main()

Debug.Print FirstDateOfWeek(2004, 2)

End Sub

Private Function FirstDateOfWeek _
( _
ByRef iYear As Integer, _
ByRef iWeek As Integer, _
Optional ByRef FirstDayOfWeek As VbDayOfWeek VbDayOfWeek.vbSunday
_
) As Date

FirstDateOfWeek = DateSerial(iYear, 1, 1)
If Weekday(FirstDateOfWeek, FirstDayOfWeek) <> 1 Then
FirstDateOfWeek = FirstDateOfWeek + (8 - Weekday(FirstDateOfWeek,
FirstDayOfWeek))
End If
If (iWeek > 1) Then
FirstDateOfWeek = FirstDateOfWeek + (7 * (iWeek - 1))
End If

End Function
'***


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/




Teddy
Le #15290451
Merci à tous pour vos réponses.

Teddy



"le_troll" news:%
Bonsoir,

dim date1 as date
Si le 01/01/N est un dimanche = 1 (ou 0) suivant numérotation, disons


1
ici alors : date1 = 01/01/N
si le 01/01/N <> dimanche alors
date1= 26/12/N-1
for i = 1 to 6
if date1 = dimanche alors sort de la boucle
date1 = date1 + i
next i
fin de condition
' nous avons ainsi la date du dimanche 1er J de la 1ere semaine dans
"date1"
'
Si semaine_recherchee = 1 alors ---> date1
Si semaine_rechechee > 1 alors i = date1 + ((semaine_recherchee - 1) *
7)
' la variable date va additionner toute seule les jours correctement
suivant l'année concernée
' A tester, je n'ai pas essayé, manque de temps :o)
'---------------------------
En pratique sur l'année 2005
détermine le 1er dimanche, qui n'est pas le 1/1/5, donc on va le
chercher en 2004 = 26/12/4
Disons qu'on veut la semaine 3, soit : (3-1)* 7 = 14, soit 26/12/4+14


> 9, soit 9/1/5 = dimanche 9 (semaine 3)


--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Ce message est plein de virus "certifiés"
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


" Teddy"
> Bonjour,
>
> Je sais avec DatePart() obtenir le numéro de la semaine d'une date


donnée.
>
> A l'inverse, je cherche un moyen d'obtenir la date complète du 1er jour


de
> la semaine connaissant le numéro de ladite semaine.
>
> J'ai trouvé une méthode "système D" en comparant toutes les dates de
l'année
> jusqu'à avoir le même numéro de semaine mais cela ne me satisfait pas


car
> c'est lent.
>
> Merci pour vos idées.
>
> Teddy
>
>




le_troll
Le #15290421
Salut,

DateSerial c'est pour avoir la valeur d'une date, ou faire une addition
ou une soustraction entre 2 dates, chacune incluse dans DateSerial
x = dateserial(2)-dateserial(1)
Normalement c'est ce qu'il faut utiliser, sinon, en rentrant en dur "jj" &
"/" & "mm"... tu auras une confusion si tu utilises le système anglophone,
voire une erreur, alors si tu t'adresse aux anglais, il faut aussi utiliser
les fonctions:
day(date)
month(date)
year(date)
le tout dans des variables "date" avec dateSerial, qui reconnaîtra les siens
:o)

--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Ce message est plein de virus "certifiés"
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


" Teddy" #
Merci, c'est ce que je cherchais !
Je vais quand même approfondir l'emploi de ce "DateSerial".

Teddy



"Zoury" news:
> naaa.. j'ai oublié de renommer la fonction avec toutes ces
modifications...
> FirstDateOfWeek me parait plus logique.
>
> '***
> ' Module1
> Option Explicit
>
> Private Sub Main()
>
> Debug.Print FirstDateOfWeek(2004, 2)
>
> End Sub
>
> Private Function FirstDateOfWeek _
> ( _
> ByRef iYear As Integer, _
> ByRef iWeek As Integer, _
> Optional ByRef FirstDayOfWeek As VbDayOfWeek > VbDayOfWeek.vbSunday
> _
> ) As Date
>
> FirstDateOfWeek = DateSerial(iYear, 1, 1)
> If Weekday(FirstDateOfWeek, FirstDayOfWeek) <> 1 Then
> FirstDateOfWeek = FirstDateOfWeek + (8 -


Weekday(FirstDateOfWeek,
> FirstDayOfWeek))
> End If
> If (iWeek > 1) Then
> FirstDateOfWeek = FirstDateOfWeek + (7 * (iWeek - 1))
> End If
>
> End Function
> '***
>
>
> --
> Cordialement
> Yanick Lefebvre - MVP pour Visual Basic
> Le français se refait une beauté, parlons en :
> http://www.orthographe-recommandee.info/
>
>




le_troll
Le #15290401
Addenda,

J'oubliais, si tu veux vraiment tout calculer sur les dates (ce qui un
jour ou l'autre sera nécessaire en informatique), il faut apprendre à
calculer je "JJ" astronomique, le jour Julien, et la date de Pâques dont
découle toutes les fêtes chrétiennes mobiles, elle-même dépendant de la
position de la Lune, soit 3 calculs.
Avec ça tu peux tout faire, le JJ est représenté comme le fait aussi
Windows, un entier pour les jours, suivit d'une décimale éventuelle pour la
fraction du jour (heures), soit JJ,jjjjjj
In fine, l'avantage du JJ est qu'il tient compte de la réforme grégorienne,
de l'année 0 absente, et peut devenir négatif vers (-4000), etc...
En informatique tu peux de retrouver à faire un jeu sur les romains, ou un
programme éducatif sur les égyptiens, lol, et là, Windows doit s'arrêter en
1900 je crois, donc tu devras passer en calculs purs, y compris pour les
dates futures trop lointaines...
Dis-moi si tu veux ces calculs?

--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Ce message est plein de virus "certifiés"
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


" Teddy" #
Merci, c'est ce que je cherchais !
Je vais quand même approfondir l'emploi de ce "DateSerial".

Teddy



"Zoury" news:
> naaa.. j'ai oublié de renommer la fonction avec toutes ces
modifications...
> FirstDateOfWeek me parait plus logique.
>
> '***
> ' Module1
> Option Explicit
>
> Private Sub Main()
>
> Debug.Print FirstDateOfWeek(2004, 2)
>
> End Sub
>
> Private Function FirstDateOfWeek _
> ( _
> ByRef iYear As Integer, _
> ByRef iWeek As Integer, _
> Optional ByRef FirstDayOfWeek As VbDayOfWeek > VbDayOfWeek.vbSunday
> _
> ) As Date
>
> FirstDateOfWeek = DateSerial(iYear, 1, 1)
> If Weekday(FirstDateOfWeek, FirstDayOfWeek) <> 1 Then
> FirstDateOfWeek = FirstDateOfWeek + (8 -


Weekday(FirstDateOfWeek,
> FirstDayOfWeek))
> End If
> If (iWeek > 1) Then
> FirstDateOfWeek = FirstDateOfWeek + (7 * (iWeek - 1))
> End If
>
> End Function
> '***
>
>
> --
> Cordialement
> Yanick Lefebvre - MVP pour Visual Basic
> Le français se refait une beauté, parlons en :
> http://www.orthographe-recommandee.info/
>
>




Poster une réponse
Anonyme