Obtenir le numero de semaine sans le bogue du 29 janvier compté en semeine 53

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 378 fois - Téléchargée 28 fois

Contenu du snippet

il prend le numero de la semaine d'une date
il prend en fait le numero de semaine du dimanche ainsi la semaine entiere a le meme numéro rt evite donc le bogue du lundi 29 decembre compté en semaine 53 au lieu de semaine 1

Source / Exemple :


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

A voir également

Ajouter un commentaire

Commentaires

Messages postés
8
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
20 juin 2007
1
Si ça peut interesser, la fonction inverse

'Calcul la date de début de semaine en fonction d'un numéro de semaine et d'une année
Function DateSemaine(semaine, année)
Dim JourDeLAn, MonJourSem, NbresJours

JourDeLAn = CDate("01/01/" & année)
MonJourSem = Weekday(JourDeLAn, 2)
Select Case MonJourSem
Case 1
NbresJours = ((Val(semaine) - 1) * 7) + 2
Case 2
NbresJours = ((Val(semaine) - 1) * 7) + 1
Case 3
NbresJours = ((Val(semaine) - 1) * 7) + 0
Case 4
NbresJours = ((Val(semaine) - 1) * 7) + 6
Case 5
NbresJours = ((Val(semaine) - 1) * 7) + 5
Case 6
NbresJours = ((Val(semaine) - 1) * 7) + 4
Case 7
NbresJours = ((Val(semaine) - 1) * 7) + 3
End Select
DateSemaine = CDate(Day(NbresJours) & "/" & Month(NbresJours) & "/" & année)
End Function
Messages postés
8
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
20 juin 2007
1
Ceci marche nickel et est beaucoup plus clean (moins usine à gaz):

Function NumeroSemaine(Optional ByVal vDate As Variant) As Integer
NumeroSemaine = Format(vDate, "ww", vbMonday, vbFirstFourDays)
End Function
Messages postés
11
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
30 juillet 2007

qu'elqu'un a t-il fait la fonction inverse ?
Messages postés
478
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015

exact
voici une autre correction
dat = dat.adddays((8-semain) mod 7)
n'oublie pas d'updater ton code
Messages postés
7
Date d'inscription
lundi 5 janvier 2004
Statut
Membre
Dernière intervention
6 février 2004

désolé Warny mais ton code est bogué!!!!!
si si
en fait le dimanche 4 janvier ainsi que tout les autres dimanche avec ton code sont ecalé d'une semaine!!!
ainsi le dimanche 4 janvier normalement compté en semaine 1 passe en semaine 2!!!
voici le correctif:
if semain <>1 then
dat=dat.adddays(8-semain)
else
dat=dat
end if

voila c tout bon
Afficher les 11 commentaires

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.