Page 1 sur 1

RecupNumeroSemaine

MessagePublié: 19 Juil 2005 à 20:53
par Stephane Maillard
Cette fonction retourne le numéro de semaine par rapport à une date données.

Pour appeler la fonction :

' Le champs dateDebut est au format Temps (date seul)

varDate = RecupNumeroSemaine(doc.dateDebut(0))[syntax="ls"]Function RecupNumeroSemaine(dateJour As Variant) As Integer

On Error Goto ReturnZero

Const Janvier = 1, Fevrier = 2, Mars = 3, Avril = 4, Mai = 5, Juin = 6
Const Juillet = 7, Aout = 8, Septembre = 9, Octobre = 10, Novembre = 11
Const Decembre = 12

Dim i%, y%, m%, d%, Semaine%, Jours%
Dim aMois(12) As Integer

aMois(Janvier) = 31
aMois(Fevrier) = 28
aMois(Mars) = 31
aMois(Avril) = 30
aMois(Mai) = 31
aMois(Juin) = 30
aMois(Juillet) = 31
aMois(Aout) = 31
aMois(Septembre) = 30
aMois(Octobre) = 31
aMois(Novembre) = 30
aMois(Decembre) = 31

y% = Year(dateJour)
m% = Month( dateJour)
d% = Day( dateJour )

If y% Mod 4 = 0 Then
aMois(Fevrier) = aMois(Fevrier) + 1
End If

Jours% = Weekday( Datenumber(y%, 1, 1) ) + 1

For i% = 1 To m% - 1
Jours% = Jours% + aMois(i%)
Next

Jours% = Jours% + d%

Semaine% = Jours% / 7

If Semaine% > 52 Then Semaine% = 1

RecupNumeroSemaine = Semaine%
Exit Function

ReturnZero:
RecupNumeroSemaine = 0
Exit Function

End Function[/syntax]

MessagePublié: 05 Juin 2006 à 00:03
par Michael DELIQUE
Salut

une autre fonction qui renvoi le numéro de la semaine en fonction d'une date. la fonction peux utiliser 2 méthodes de calcule différent

Public Function NumWeek(Byval wDDate As String, wnbVersion As Integer) As Integer
'calcul le numéro de la semaine pour une date passée

'Déclaration des Variables
Dim Fdate As String
Dim nbTotalDay As Integer
Dim nbDay As Integer

On Error Goto ErreurHandle

If wnbVersion = 1 Then

'récupere le premier jour de l'année de la date passé
Fdate="01/01/"+Right(wDdate,4)

Select Case Weekday(Fdate)
Case 1 ' dimanche
nbDay = 7
Case 2 ' lundi
nbDay = 1
Case 3 'mardi
nbDay = 2
Case 4 'mercredi
nbDay = 3
Case 5 'jeudi
nbDay = 4
Case 6 'Vendredi
nbDay = 5
Case 7 'Samedi
nbDay = 6
End Select

'calcul le nombre de jour entre passé depuis le début de l'année et la date passée
nbTotalDay =Cint(Cdbl(Datevalue(wDdate))-Cdbl(Datevalue(Fdate)))+nbDay

'retourne le nombre de semaines passé
NumWeek = Abs((nbTotalDay\7))+1
Else
NumWeek= Cint(Format(wDDate,"WW"))
End If

If NumWeek < 1 Then
NumWeek = 1
End If

If NumWeek > 53 Then
NumWeek = 53
End If

Exit Function

MessagePublié: 06 Juin 2006 à 10:47
par oguruma
hi, tu sais que tu as cela directement dans format$... regarde ma classe DateRangeManagement, le format "ww"

MessagePublié: 06 Juin 2006 à 12:51
par Michael DELIQUE
Salut

je sais, regarde bien la fonction elle permet de calculer le numéro selon 2 méthode la deuxieme utilise le format

MessagePublié: 07 Juin 2006 à 09:20
par oguruma
:oops: :oops: :oops:

MessagePublié: 14 Août 2006 à 10:08
par Raziel
La fonction Format$(..., "ww") comporte un bug lorsqu'une semaine se trouve à cheval.

Ex :
Retourne S1 pour le 01/01/2005 alors que l'on est en S53

Retourne S1 pour le 01/01/2006 alors que l'on est en S52

Pour plus d'infos, voici un lien :
http://www-1.ibm.com/support/docview.ws ... wg21176534

MessagePublié: 20 Août 2006 à 17:26
par oguruma
ok je note ce lien de réponse
désolé pour ma réponse à ce propos sur un autre post traitant de ce sujet
;)