Premier et dernier jour de la semaine

cs_rhum1 Messages postés 3 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 14 mai 2002 - 6 mai 2002 à 17:07
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008 - 3 nov. 2004 à 21:17
Bonjour,
je voudrais recuperer la date du premier et du dernier jour de la semaine à partir du numéro de semaine et de l'année.
si vous avez un truc merci.

Rhum1

13 réponses

legma Messages postés 10 Date d'inscription mercredi 23 janvier 2002 Statut Membre Dernière intervention 6 mai 2002
6 mai 2002 à 17:54
bonjour,
Tu peux utiliser la fonction Weekday(Date) qui te renvoie un numéro correspondant à un jour de la semaine (1->dimanche,7->samedi), ou encore utiliser la fonction WeekdayName(Date) qui te renvoie directement le nom du jour correspondant.

Pour ton problème, tu sais qu'une semaine c'est 7 jour (là, je ne t'apprends rien!), donc tu peux multiplier le numéro de ta semaine par 7 (pour savoir le numéro du jour dans l'année) et ensuite tu ajoute le résultat à la date #01/01/année# et à partir de là tu dois pouvoir déterminer le premier et le dernier jour de la semaine.

Désolé si je ne suis pas très clair, mais j'espère que cela va t'aider quand même !
Bon courage. :big)
0
cs_rhum1 Messages postés 3 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 14 mai 2002
6 mai 2002 à 22:26
Merci,
c'est assez clair. J'avais oublié qu'on pouvais faire
des calculs avec les dates.
0
fkuchta Messages postés 44 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 20 novembre 2008
5 nov. 2003 à 16:28
Cela ne peut pas fonctionner.

Notre calendrier est fait de telle manière que le premier jour de la première semaine de l'année n'est pas forcément le 1er janvier.

Je m'explique : pour la semaine 01 de l'année 2004, le premier jour de cette semaine est le lundi 29 décembre 2003.

Tout comme le premier jour de la semaine 02 de l'année 2004 est le lundi 5 janvier 2004...

Regardez sur votre calendrier...

Je cherche actuellement une solution et c'est vrai qu'à part coder une usine à gaz, je ne vois pas de solution.

Si vous en trouvez une, je suis preneur !!

Fabrice.
0
cs_john42 Messages postés 7 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 6 février 2004
3 févr. 2004 à 10:52
tout comme fabrice
je cherche un moyen d'obtenir le numero de la semaine et j'utilise pour cela : DatePart("ww",dat,vbmonday).
Seulement pour la semaine du lundi 29 decembre au dimanceh 4 janvier j'obtient pour le 29 et 31 le numero 53 et pour le 1 au 4 janvier le numero de semaine 1.
que faut t'il faire pour que ma semaine ne soit plus couper en deux?

merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fkuchta Messages postés 44 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 20 novembre 2008
3 févr. 2004 à 11:26
Voici deux fonctions qui donnent le numéro de la semaine et le numéro de l'année. Ces deux fonctions ont l'air de renvoyer les bonnes valeurs. :big)

Function TrouveSemaineDeLaDate(ByVal DateConcernee As Date) As String
' Bogue du lundi 29 décembre 2003 qui est compté en semaine 53 au lieu de semaine 1
If Format(DateConcernee, "dd/mm/yyyy", vbMonday, vbFirstFourDays) = "29/12/2003" Then
TrouveSemaineDeLaDate = "01"
Else
TrouveSemaineDeLaDate = Format(Format(DateConcernee, "ww", vbMonday, vbFirstFourDays), "00")
End If
End Function

Function TrouveAnneeDeLaDate(ByVal DateConcernee As Date) As String
' Bogue du lundi 29 décembre 2003 qui est compté en semaine 53 au lieu de semaine 1
If Format(DateConcernee, "dd/mm/yyyy", vbMonday, vbFirstFourDays) = "29/12/2003" Then
TrouveAnneeDeLaDate = "2004"
Else
TrouveAnneeDeLaDate = Format(DateConcernee, "yyyy", vbMonday, vbFirstFourDays)
End If
End Function
0
fkuchta Messages postés 44 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 20 novembre 2008
3 févr. 2004 à 11:28
Sur fond gris :

Function TrouveSemaineDeLaDate(ByVal DateConcernee As Date) As String
    ' Bogue du lundi 29 décembre 2003 qui est compté en semaine 53 au lieu de semaine 1
    If Format(DateConcernee, "dd/mm/yyyy", vbMonday, vbFirstFourDays) = "29/12/2003" Then
        TrouveSemaineDeLaDate = "01"
    Else
        TrouveSemaineDeLaDate = Format(Format(DateConcernee, "ww", vbMonday, vbFirstFourDays), "00")
    End If
End Function

Function TrouveAnneeDeLaDate(ByVal DateConcernee As Date) As String
    ' Bogue du lundi 29 décembre 2003 qui est compté en semaine 53 au lieu de semaine 1
    If Format(DateConcernee, "dd/mm/yyyy", vbMonday, vbFirstFourDays) = "29/12/2003" Then
        TrouveAnneeDeLaDate = "2004"
    Else
        TrouveAnneeDeLaDate = Format(DateConcernee, "yyyy", vbMonday, vbFirstFourDays)
    End If
End Function
0
cs_john42 Messages postés 7 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 6 février 2004
4 févr. 2004 à 08:54
dedolé mais cela ne marche pas.De plus je suis en vb.net et donc voici mon message d'erreur :

Message: BC30057: Too many arguments to 'Public Function Format(Expression As Object, [Style As String = ""]) As String'.

Source Error:



Line 13: dim i as integer
Line 14: dim semaine1 as integer
Line 15: if format("dd/mm/yyyy",dat, vbFirstFourDays)="29/12/2003" then
Line 16: semaine="1"

un grand merci qd meme fkuchta
0
fkuchta Messages postés 44 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 20 novembre 2008
4 févr. 2004 à 09:51
Alors, peut-être qu'en enlevant les arguments :
, vbMonday, vbFirstFourDays

au bout de la fonction format, ça devrait marcher ?
0
cs_john42 Messages postés 7 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 6 février 2004
4 févr. 2004 à 10:53
ca y est j'ai resolu mon probleme en lui passant comme date celle du dimanche.cela devrait en plus fonctionné pour toute les années . En tout cas voici mon code
:
Sub Button1_Click(sender As Object, e As EventArgs)
label1.visible=true
label2.visible=true
dim dat as date
dim semaine as integer
dim semain as integer

dat=(calendar1.selecteddate)
semain=weekday(dat)
if semain=2 then
dat=dat.adddays(6)
end if

if semain=3 then
dat=dat.adddays(5)
end if

if semain=4 then
dat=dat.adddays(4)
end if

if semain=5 then
dat=dat.adddays(3)
end if

if semain=6 then
dat=dat.adddays(2)
end if

if semain=7 then
dat=dat.adddays(1)
end if

semaine=datepart("ww",dat,vbmonday)

label2.text=("le numero de la semaine dont la date du " & calendar1.selecteddate & " fait partie est le :").tostring
label1.text=semaine
End Sub

voila c'est assez simple je pense
maintenant je vais créer une classe car je dois réutiliser ce code plusieurs fois
a plus et merci fkuchta
0
fkuchta Messages postés 44 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 20 novembre 2008
4 févr. 2004 à 11:49
Est-ce que tu as la bogue du lundi 29 décembre 2003 qui est compté en semaine 53 ( >:) pas bon) au lieu de semaine 1 ?

A+
0
cs_john42 Messages postés 7 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 6 février 2004
5 févr. 2004 à 08:44
non il n'y a plus le bug du lundi 29.Il passe alors bien en semaine 1
car le numero de toute la semaine prend le numero de semaine du dimanche
voila c assez clair je crois
0
fkuchta Messages postés 44 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 20 novembre 2008
9 févr. 2004 à 09:25
Ca me paraît louche.
Nos semaines françaises commencent le lundi, pas le dimanche.

As-tu vérifié sur des jours charnières ? Les dimanche et lundi de fin d'année par exemple, sur plusieurs années.
0
mortiis Messages postés 120 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 9 mars 2008
3 nov. 2004 à 21:17
Bonjour à tous

il existe un algo pour savoir quel est le premier jour de la premiere semaine dans un mois donné selon le mois et l'année.

Je l'avait programmé en c++ je le met, il ne reste plus qu'a traduire en vb.

nM est le numéro du mois (1 à 12) et nA l'année ( 2004 )
Si on est en janvier ou en février il faut faire :
nM += 12;
nA -= 1;

nPremJour = (UINT)(2+(2*nM)+(0.6*(nM+1))+nA+(nA/4)-(nA/100)+(nA/400))%7;

Voila sa retourne un entier entre 0 et 6 (Dimanche à Samedi)
Sa fonctionne bien avec les années bisextiles et autres, il n'y a pas d'exceptions et pas besoin de switch case.
0
Rejoignez-nous