OVH Cloud OVH Cloud

Semaine

10 réponses
Avatar
leo
Bonsoir,

Existe t'il une fonction qui renvoie le numéro de semaine de l'année ?

Merci d'avance,

--

Amicalement
Leo
----------------------------------------------------------
Pour les Riders, BMX, VTT, un seul site
LITTLE BIG TRAIL
http://perso.wanadoo.fr/lbt/
----------------------------------------------------------

10 réponses

Avatar
Rai
Bonsoir,

Un p'tit tour sur l'excellent Excelabo, et hop !!
http://www.excelabo.net/xl/calendriers.php#numerosemaine

La solution est sous la main
(merci au Grand Chef LL)

Bonne soirée

Rai

"leo" a écrit dans le message de news: 41a8decb$0$815$
Bonsoir,

Existe t'il une fonction qui renvoie le numéro de semaine de l'année ?

Merci d'avance,

--

Amicalement
Leo
----------------------------------------------------------
Pour les Riders, BMX, VTT, un seul site
LITTLE BIG TRAIL
http://perso.wanadoo.fr/lbt/
----------------------------------------------------------






Avatar
michdenis
Bonjour Leo,

Compatible avec la calendrier 1900 et 1904

B3 et une date quelconque !

=ENT((B3-(DATE(ANNEE(B3-JOURSEM(B3-1)+4);1;3)-JOURSEM(DATE(ANNEE(B3-JOURSEM(B3-1)+4);1;3)))+5)/7)


Salutations!



"leo" a écrit dans le message de news: 41a8decb$0$815$
Bonsoir,

Existe t'il une fonction qui renvoie le numéro de semaine de l'année ?

Merci d'avance,

--

Amicalement
Leo
----------------------------------------------------------
Pour les Riders, BMX, VTT, un seul site
LITTLE BIG TRAIL
http://perso.wanadoo.fr/lbt/
----------------------------------------------------------
Avatar
Polemos
Salut,

La prochaine pour ne pas perdre de temps, tu vas sur Google avec comme mots clef "semaine
vba" et 10 ms plus tard tu as ta réponse !


http://www.cathyastuce.com/vba/ex_fonctions_ex.htm
Cette fonction donne le numéro de la semaine selon la norme Européenne (1ère semaine 1ère semaine de 4 jours) :

Public Function NoSem(UneDate As Date) As Integer
On Error Resume Next
NoSem = CInt(Format(UneDate, "ww", vbMonday, vbFirstFourDays))
End Function

Cordialement
Polemos


On Sat, 27 Nov 2004 21:08:44 +0100, "leo" wrote:

Bonsoir,

Existe t'il une fonction qui renvoie le numéro de semaine de l'année ?

Merci d'avance,


Avatar
Leo
Merci à tous.


"Rai" a écrit dans le message de news:
41a8e0e0$0$17346$
Bonsoir,

Un p'tit tour sur l'excellent Excelabo, et hop !!
http://www.excelabo.net/xl/calendriers.php#numerosemaine

La solution est sous la main
(merci au Grand Chef LL)

Bonne soirée

Rai

"leo" a écrit dans le message de news:
41a8decb$0$815$
Bonsoir,

Existe t'il une fonction qui renvoie le numéro de semaine de l'année ?

Merci d'avance,

--

Amicalement
Leo
----------------------------------------------------------
Pour les Riders, BMX, VTT, un seul site
LITTLE BIG TRAIL
http://perso.wanadoo.fr/lbt/
----------------------------------------------------------






Avatar
GD
Bonsour ® Polemos,
;o)))
pour ne pas perdre de temps ???
Cette fonction donne le numéro de la semaine selon la norme Européenne (1ère
semaine = 1ère semaine de 4 jours) :
Function WOY (MyDate As Date) As Integer ' Semaine de l'année
WOY = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
If WOY > 52 Then
If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then WOY = 1
End If
End Function

tu aurais plutot du indiquer ce lien :
http://support.microsoft.com/default.aspx?scid=kb;fr;200299

BOGUE : Les fonctions Format et DatePart peuvent renvoyer un numéro de
semaine erroné pour le Dernier lundi de l'année
Public Function NoSem(UneDate As Date) As Integer
On Error Resume Next

NoSem = CInt(Format(UneDate, "ww", vbMonday, vbFirstFourDays))
End Function
;o)))


@+


Avatar
AV
Hum...ta fonction aussi est boguée ;-)
Vérifier avec les dimanches 2 janvier pour les années 2101, 2501
(etc...intervalle 400 ans) qui renvoient 53 au lieu de 52

Une alternative :
Function NUMSEM_ISO_europ(cel As Range) 'av
'bug des dimanches 2 janvier pour les années 2101, 2501 (etc...intervalle 400
ans)
If Day(cel) = 2 And Month(cel) = 1 And Year(cel) Mod 400 = 101 Then
NUMSEM_ISO_europ = 52
Exit Function
End If
If Weekday(cel) = 2 And Month(cel) = 12 And Day(cel) > 28 Then
NUMSEM_ISO_europ = 1
Else: NUMSEM_ISO_europ = DatePart("ww", cel, 2, 2)
End If
End Function

AV
Avatar
Pounet95
Bonjour Alain,
Je me suis laissé dire qu'Excel 183 intégrera directement cette fonction
;o)))))

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
"AV" a écrit dans le message de news:
Ocb$
Hum...ta fonction aussi est boguée ;-)
Vérifier avec les dimanches 2 janvier pour les années 2101, 2501
(etc...intervalle 400 ans) qui renvoient 53 au lieu de 52

Une alternative :
Function NUMSEM_ISO_europ(cel As Range) 'av
'bug des dimanches 2 janvier pour les années 2101, 2501 (etc...intervalle
400
ans)
If Day(cel) = 2 And Month(cel) = 1 And Year(cel) Mod 400 = 101 Then
NUMSEM_ISO_europ = 52
Exit Function
End If
If Weekday(cel) = 2 And Month(cel) = 12 And Day(cel) > 28 Then
NUMSEM_ISO_europ = 1
Else: NUMSEM_ISO_europ = DatePart("ww", cel, 2, 2)
End If
End Function

AV




Avatar
Daniel.M
Bonjour,

Hum...ta fonction aussi est boguée ;-)

Vérifier avec les dimanches 2 janvier pour les années 2101, 2501
(etc...intervalle 400 ans) qui renvoient 53 au lieu de 52


Pour VBA, tant qu'à utiliser une fonction lourde (car DatePart renvoie
'beaucoup' de types de résultats) de Microsoft qui, au surplus, contient des
bugs, pourquoi pas une petite fonction de 2 lignes qui fonctionne sans exception
parce qu'elle traduit exactement la norme ISO?

' Par Daniel M.
Function ISOWeekNum(d1 As Date) As Integer
Dim Jan03 As Long
Jan03 = DateSerial(Year(d1 - WeekDay(d1 - 1) + 4), 1, 3)
ISOWeekNum = Int((d1 - Jan03 + WeekDay(Jan03) + 5) / 7)
End Function

Salutations,

Daniel M.

Avatar
Modeste
Bonsour® AV,
;o))
ou tu as vu que je parlais de "MA" fonction ???
pffff...ceci dit en tant que MVP te trompe pas de
cible !!!
http://support.microsoft.com/default.aspx?
scid=kb;fr;200299

L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR
MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU
IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE
L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE
PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE
PROFIT.

et en toute sincérité, l'argumentation avancée par
Daniel.M est on ne peut plus judicieuse et justifiée...
@+


-----Message d'origine-----
Hum...ta fonction aussi est boguée ;-)
Vérifier avec les dimanches 2 janvier pour les années
2101, 2501

(etc...intervalle 400 ans) qui renvoient 53 au lieu de 52

Une alternative :
Function NUMSEM_ISO_europ(cel As Range) 'av
'bug des dimanches 2 janvier pour les années 2101, 2501
(etc...intervalle 400

ans)
If Day(cel) = 2 And Month(cel) = 1 And Year(cel) Mod 400
= 101 Then

NUMSEM_ISO_europ = 52
Exit Function
End If
If Weekday(cel) = 2 And Month(cel) = 12 And Day(cel) >
28 Then

NUMSEM_ISO_europ = 1
Else: NUMSEM_ISO_europ = DatePart("ww", cel, 2, 2)
End If
End Function

AV


.



Avatar
AV
ou tu as vu que je parlais de "MA" fonction ???
pffff...


pffff...où t'as vu que j'avais vu...?

Daniel.M est on ne peut plus judicieuse et justifiée...


pffff...où t'as vu que j'avais dit le contraire...?

pfff...final...ma proposition est simplement un moyen d'utiliser "DatePart" tout
en évitant les bugs
Quant aux soluces pour le N° de semaine, il en y en a plus que le père
Brossolette peut en bénir
;-)
AV