Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

8 réponses
Avatar
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

8 réponses

Avatar
Zoury
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" a écrit dans le message de
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




Avatar
le_troll
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" a écrit dans le message de 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




Avatar
Zoury
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/
Avatar
Zoury
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/
Avatar
Teddy
Merci, c'est ce que je cherchais !
Je vais quand même approfondir l'emploi de ce "DateSerial".

Teddy



"Zoury" a écrit dans le message de
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/




Avatar
Teddy
Merci à tous pour vos réponses.

Teddy



"le_troll" a écrit dans le message de
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" a écrit dans le message de 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
>
>




Avatar
le_troll
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" a écrit dans le message de news:
#
Merci, c'est ce que je cherchais !
Je vais quand même approfondir l'emploi de ce "DateSerial".

Teddy



"Zoury" a écrit dans le message de
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/
>
>




Avatar
le_troll
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" a écrit dans le message de news:
#
Merci, c'est ce que je cherchais !
Je vais quand même approfondir l'emploi de ce "DateSerial".

Teddy



"Zoury" a écrit dans le message de
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/
>
>