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

Trouver premier jour d'une semaine spécifique

10 réponses
Avatar
BEAUCHAND
Bonjour,
Bonne et heureuse année à tous!

Je travaille sur access 2000.
Est-il possible de trouver le premier jour d'une semaine spécifique en
indiquant si c'est la 1er, 2ième, 3ième, 4ième ou 5ième semaine du mois.
Cette journée ne doit pas être un samedi.
Ex: Quelle est la première journée de la 3ième semaine de Juin 2005.

Merci à l'avance!

10 réponses

Avatar
Gilbert
Bonjour

Peut-être un début de solution avec cette fonction:

Function fPremierJourSemaine(Semaine As Integer, _
annee As Integer) As Date
Dim Datetemp As Date
Datetemp = DateSerial(annee, 1, 1) + (Semaine - 1) * 7
fPremierJourSemaine = Datetemp - (Weekday(Datetemp) - vbMonday)
End Function

Gilbert


"BEAUCHAND" a écrit dans le message de
news:
Bonjour,
Bonne et heureuse année à tous!

Je travaille sur access 2000.
Est-il possible de trouver le premier jour d'une semaine spécifique en
indiquant si c'est la 1er, 2ième, 3ième, 4ième ou 5ième semaine du mois.
Cette journée ne doit pas être un samedi.
Ex: Quelle est la première journée de la 3ième semaine de Juin 2005.

Merci à l'avance!


Avatar
3stone
Salut,

"BEAUCHAND"
| Bonne et heureuse année à tous!


A toi aussi...


| Je travaille sur access 2000.
| Est-il possible de trouver le premier jour d'une semaine spécifique en
| indiquant si c'est la 1er, 2ième, 3ième, 4ième ou 5ième semaine du mois.
| Cette journée ne doit pas être un samedi.
| Ex: Quelle est la première journée de la 3ième semaine de Juin 2005.


Voir ici :
http://mypage.bluewin.ch/w.stucki/CalculsDates.htm#LundiSemCours


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
BEAUCHAND
Bonjour,

Merci à Gilbert et à 3stone,
Les 2 fonctions fonctionnent bien sauf que pour avoir la semaine du 6 mars
2006 je dois indiquer 10 comme no de semaine et moi j'aimerais pouvoir
indiquer Mars comme mois et 2 comme no de semaine.

Merci à l'avance.

"BEAUCHAND" wrote:

Bonjour,
Bonne et heureuse année à tous!

Je travaille sur access 2000.
Est-il possible de trouver le premier jour d'une semaine spécifique en
indiquant si c'est la 1er, 2ième, 3ième, 4ième ou 5ième semaine du mois.
Cette journée ne doit pas être un samedi.
Ex: Quelle est la première journée de la 3ième semaine de Juin 2005.

Merci à l'avance!


Avatar
Drizzit
J'ai pas tout testé, mais je pense que cette fonction est ok :

Public Function NumeroSemaine(datMaDate As Date, _
Optional lngPremierJourSemaine As VbDayOfWeek =
vbMonday) As Long

NumeroSemaine = Format(datMaDate, "ww", lngPremierJourSemaine) - _
Format("01/" & Format(datMaDate, "mm/yy"), "ww",
lngPremierJourSemaine) + 1

End Function
Avatar
Drizzit
Oups....
J'ai pas bien lu la question...
J'ai pas tout tester encore une fois...

Public Function DateDebutSemaine(lngNumeroSemaine As Long, _
lngAnnee As Long, _
Optional lngPremierJourSemaine As VbDayOfWeek vbMonday) As Date

DateDebutSemaine = DateAdd("ww", lngNumeroSemaine, CDate("01/01/" &
lngAnnee)) - _
Weekday(DateAdd("ww", lngNumeroSemaine,
CDate("01/01/" & lngAnnee)), lngPremierJourSemaine) + _
lngPremierJourSemaine - 1

End Function
Avatar
BEAUCHAND
Merci, je vais essayer cette fonction.

"Drizzit" wrote:

Oups....
J'ai pas bien lu la question...
J'ai pas tout tester encore une fois...

Public Function DateDebutSemaine(lngNumeroSemaine As Long, _
lngAnnee As Long, _
Optional lngPremierJourSemaine As VbDayOfWeek > vbMonday) As Date

DateDebutSemaine = DateAdd("ww", lngNumeroSemaine, CDate("01/01/" &
lngAnnee)) - _
Weekday(DateAdd("ww", lngNumeroSemaine,
CDate("01/01/" & lngAnnee)), lngPremierJourSemaine) + _
lngPremierJourSemaine - 1

End Function




Avatar
BEAUCHAND
Bonjour Drizzit,
Cette fonction donne le même résultat que les fonctions de Gilbert et 3stone
ce qui n'est pas vraiment ce dont j'ai besoin.

Merci quand même!

"BEAUCHAND" wrote:

Merci, je vais essayer cette fonction.

"Drizzit" wrote:

Oups....
J'ai pas bien lu la question...
J'ai pas tout tester encore une fois...

Public Function DateDebutSemaine(lngNumeroSemaine As Long, _
lngAnnee As Long, _
Optional lngPremierJourSemaine As VbDayOfWeek > > vbMonday) As Date

DateDebutSemaine = DateAdd("ww", lngNumeroSemaine, CDate("01/01/" &
lngAnnee)) - _
Weekday(DateAdd("ww", lngNumeroSemaine,
CDate("01/01/" & lngAnnee)), lngPremierJourSemaine) + _
lngPremierJourSemaine - 1

End Function






Avatar
david
salut,

tout dépend de ce que tu entends par 1° semaine du mois :
- du 1 au 6
- du 1 au 1° dimanche (ou autre jour...)
Cela change beaucoup le fonctionnement, si tu optes pour le 1° cas,
utilise ceci :
function getFirstDayOfMonthWeek(byval numMonth as byte, byval numWeek
as byte)as date
getFirstDayOfMonthWeek = dateSerial (year(date()), numMonth,
1+((numWeek-1) * 7))
end function
si tu utilises le 2° cas, il faut stocker ce premier calcul dans une
variable et ensuite, enlever le nombre correspondant au rand du jour
actuel et ajouter celui du 1° jour de la semaine, par exemple (si
calcul dans dt):
dt = dt - weekDay(dt) + vbMonday 'en définissant les semaines
commençant au lundi

A+, david
Avatar
BEAUCHAND
Bonjour David,
Une semaine valide peux commencer n'importe quel jour sauf le samedi.
Ex: Le 1er janvier 2005 était un samedi, donc la semaine valide est celle du
2 au 8 janvier.
J'espère que je suis assez claire.

Merci!

"david" wrote:

salut,

tout dépend de ce que tu entends par 1° semaine du mois :
- du 1 au 6
- du 1 au 1° dimanche (ou autre jour...)
Cela change beaucoup le fonctionnement, si tu optes pour le 1° cas,
utilise ceci :
function getFirstDayOfMonthWeek(byval numMonth as byte, byval numWeek
as byte)as date
getFirstDayOfMonthWeek = dateSerial (year(date()), numMonth,
1+((numWeek-1) * 7))
end function
si tu utilises le 2° cas, il faut stocker ce premier calcul dans une
variable et ensuite, enlever le nombre correspondant au rand du jour
actuel et ajouter celui du 1° jour de la semaine, par exemple (si
calcul dans dt):
dt = dt - weekDay(dt) + vbMonday 'en définissant les semaines
commençant au lundi

A+, david




Avatar
BEAUCHAND
Bonjour,
J'ai réussi à faire ce que je voulais en modifiant la fonction de David.

Voici ce que ça donne:
Function getFirstDayOfMonthWeek(ByVal numMonth As Byte, ByVal numWeek As
Byte, Annee As Integer) As Date
With CodeContextObject

Dim dt, dtVerif, Sem1
dt = DateSerial(Annee, numMonth, 1 + ((numWeek - 1) * 7))
dt = dt - Weekday(dt) + vbMonday
If Month(dt) <> numMonth Then
Sem1 = Format("01/" & numMonth & "/" & Annee)

'SemaineDu est la première semaine
'Sem2 à Sem5 sont les autres semaines du mois

dtVerif = Sem1
If Weekday(dtVerif) = vbSaturday Then
dt = dt + 7: .SemaineDu = dt
Else
.SemaineDu = Sem1
End If
Else
.SemaineDu = dt
End If
.Sem2 = dt + 7
.Sem3 = dt + 14
If Month(dt + 21) <> numMonth Then
.Sem4 = ""
Else
.Sem4 = dt + 21
End If
If Month(dt + 28) <> numMonth Then
.Sem5 = ""
Else
.Sem5 = dt + 28
End If
End With

End Function



Merci à tous!

"BEAUCHAND" wrote:

Bonjour David,
Une semaine valide peux commencer n'importe quel jour sauf le samedi.
Ex: Le 1er janvier 2005 était un samedi, donc la semaine valide est celle du
2 au 8 janvier.
J'espère que je suis assez claire.

Merci!

"david" wrote:

salut,

tout dépend de ce que tu entends par 1° semaine du mois :
- du 1 au 6
- du 1 au 1° dimanche (ou autre jour...)
Cela change beaucoup le fonctionnement, si tu optes pour le 1° cas,
utilise ceci :
function getFirstDayOfMonthWeek(byval numMonth as byte, byval numWeek
as byte)as date
getFirstDayOfMonthWeek = dateSerial (year(date()), numMonth,
1+((numWeek-1) * 7))
end function
si tu utilises le 2° cas, il faut stocker ce premier calcul dans une
variable et ensuite, enlever le nombre correspondant au rand du jour
actuel et ajouter celui du 1° jour de la semaine, par exemple (si
calcul dans dt):
dt = dt - weekDay(dt) + vbMonday 'en définissant les semaines
commençant au lundi

A+, david