Posez votre question Signaler

[VBScript] numéro de semaine [Résolu]

Dinheru 1019Messages postés mercredi 20 avril 2005Date d'inscription 17 avril 2009Dernière intervention - Dernière réponse le 10 avril 2015 à 08:31
Bonjour a tous et toutes !! C'est encore moi !! ^^

Voila ce coup-ci je voudrais savoir si il existe une fonction de VBScript qui retourne le numéro de semaine en cours.
J'ai déja trouvé pour :
- le jour -->
 jour = day(now)

- le mois -->
 mois = month(now)

- l'année -->
 annee = year(now)


Est-ce qu'il existe une fonction dans le genre :
 semaine=week(now)
( Mais ça, ça marche pô !! )

Voila merci d'avance !!
Lire la suite 
Réponse
+17
moins plus
Plus simple que ca, on peut utiliser la version format présente dans VBA, qui peut se conformer à la norme iso.
Exemple:

Dim datetest, semaine

datetest = #23/7/2010#
semaine = Format(datetest, "ww", vbMonday, vbFirstFourDays)


Dans ce cas, Format renvoie 29, ce qui est la bonne réponse.
L'argument vbMonday définit le premier jour de la semaine (selon la norme, Lundi, mais dimanche par défaut pour VBA si l'argument est omis) et vbFirstFourDays définit que la semaine n°1 est la première semaine contenant au moins 4 jour (soit la semaine contenant le 1er jeudi de l'année, c'est équivalent; si l'argument est omis, VBA considère que c'est la semaine du 1er janvier, ce qui n'est pas toujours exact)

On peut bien sur utiliser des variables pour définir la date, en utilisant la fonction CDate:

Dim jour, mois, annee
Dim datetest, semaine

jour = 23
mois = 7
annee = 2010
datetest = CDate(jour & "/" & mois & "/" & annee)
semaine = Format(datetest, "ww", vbMonday, vbFirstFourDays)


On peut aussi n'utiliser que les 2 derniers chiffres de l'année, VBA considère alors que l'année est comprise entre 1930 et 2029


Note à part, la fonction Format permet de mettre en forme une date (entre autres), c'est l'argument "ww" qui fait qu'il renvoie le numéro de la semaine. En le remplacant par exemple par "dddd d mmmm yyyy", la fonction retourne dans notre exemple "vendredi 32 juillet 2010"
babou- 10 avril 2015 à 08:31
Il suffit de changer le dernier argument :
semaine = Format(DD, "ww", vbMonday, vbFirstJan1)
Répondre
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+8
moins plus
Voici une solution qui n'apporte rien à la discussion, mais elle a le mérite d'apporter la solution à tous ceux qui, comme moi, tomberont ici lors de leur recherche. La solution peut répondre à diverses normes y compris la norme ISO abordée par thev

DatePart("ww",date,vbMonday,vbFirstFourDays)

Ca colle avec les calendriers officiels en France

http://www.commentcamarche.net/contents/vbscript/vbs-fonctions-date.php3
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+3
moins plus
salut,
c'est pas une fonction directe mais un calcul:

   semaine=DateDiff("w",DateSerial(Year(Date),1,1),Date)


un (+1) pourra etre necessaire, à toi de tester ;)
Ajouter un commentaire
Réponse
+1
moins plus
ATTENTION : Ca depend de la norme... Votre fonction est bonne pour les USA, pas en Europe... Si pour certaines annees la fonction proposée ne posera pas de pb, pour d'autres comme 2010 bonjour les degats...

Ex : Dans la majorité des calendriers européens le 01/01/2010 appartient à la semaine 53 de l'annee 2009.

Or DateDiff("w", DateSerial(Year("01/01/2010"), 1, 1), "01/01/2010") + 1 donne 1 ....

A méditer...
Ludivine50 111Messages postés lundi 9 février 2009Date d'inscription 2 février 2012Dernière intervention - 18 mai 2009 à 14:09
Bonjour à tous,

J'ai fait l' "amusante" découverte il y a quelques minutes: Excel ne donne pas le même numéro de semaine pour 2010 que les 4 calendriers papiers qui sont étalés devant moi! Et c'est vraiment la cata!

Le lien suivant donnera réponse à toutes vos interrogations:

http://www.excel-downloads.com/forum/87561-installation-fonction-no-semaine.html

à + le forum
Répondre
Ajouter un commentaire
Réponse
+1
moins plus
Bonjour à tous,

J'ai programmé la fonction ci-dessous et travail avec depuis 2 ans en tant que responsable planning.
Elle permet de choisir le format d'affichage pour la 1ère semaine de 2011 entre "01" ou "201101", ainsi que le 1er jour de la semaine (dim. ou lun.)
pour vous aider taper dans la cellule "=nosem(aide)"

nota :
la programation n'est peut-être pas très orthodox, un peu longue avec les execption et les options, mais 100% opérationnelle.


***********************
Function NoSem(UneDate, Optional Jour = 2, Optional Typ = 1)
' seb
On Error Resume Next

If UneDate = "aide" Then NoSem = "=NoSem(date ; +option Lundi=1 et Dimanche=2 ; + option 41=1 et 200941=2) => defaut =NoSem(date;2;1)": GoTo fin
If Year(UneDate) = 1899 Then NoSem = "": GoTo fin


'cas particulier 28-29/12/2003
If Jour = 1 And Typ = 1 And UneDate = 37984 Then NoSem = 1: GoTo fin
If Jour = 2 And Typ = 1 And UneDate = 37983 Then NoSem = 1: GoTo fin
If Jour = 1 And Typ = 2 And UneDate = 37984 Then NoSem = 200401: GoTo fin
If Jour = 2 And Typ = 2 And UneDate = 37983 Then NoSem = 200401: GoTo fin
'cas particulier 30-31/12/2007
If Jour = 1 And Typ = 1 And UneDate = 39447 Then NoSem = 1: GoTo fin
If Jour = 2 And Typ = 1 And UneDate = 39446 Then NoSem = 1: GoTo fin
If Jour = 1 And Typ = 2 And UneDate = 39447 Then NoSem = 200801: GoTo fin
If Jour = 2 And Typ = 2 And UneDate = 39446 Then NoSem = 200801: GoTo fin
'cas particulier 29-30/12/2019
If Jour = 1 And Typ = 1 And UneDate = 43829 Then NoSem = 1: GoTo fin
If Jour = 2 And Typ = 1 And UneDate = 43828 Then NoSem = 1: GoTo fin
If Jour = 1 And Typ = 2 And UneDate = 43829 Then NoSem = 202001: GoTo fin
If Jour = 2 And Typ = 2 And UneDate = 43828 Then NoSem = 202001: GoTo fin


If Jour = 1 Then sem = CInt(Format(UneDate, "ww", vbMonday, vbFirstFourDays)): GoTo saut1 '
If Jour = 2 Then sem = CInt(Format(UneDate + 1, "ww", vbMonday, vbFirstFourDays)): GoTo saut1 ' seb

saut1:

If sem = 52 Or sem = 53 Then GoTo saut2

If Typ = 1 Then NoSem = sem: GoTo fin
If Typ = 2 And Jour = 2 Then NoSem = (Year(UneDate - Weekday(UneDate, vbSunday) + 6) * 100) + sem: GoTo fin
If Typ = 2 And Jour = 1 Then NoSem = (Year(UneDate - Weekday(UneDate, vbMonday) + 6) * 100) + sem: GoTo fin

saut2:
If Typ = 1 Then NoSem = sem: GoTo fin
If Typ = 2 And Jour = 2 Then NoSem = (Year(UneDate - Weekday(UneDate, vbSunday)) * 100) + sem: GoTo fin
If Typ = 2 And Jour = 1 Then NoSem = (Year(UneDate - Weekday(UneDate, vbMonday)) * 100) + sem: GoTo fin


fin:

End Function
**********************************
Ajouter un commentaire
Réponse
+0
moins plus
Encore une fois merci Sam3000 !!! ^^

ça marche très bien ( avec le +1) .

(>°-°)> @+ <(°-°<)
Ajouter un commentaire
Réponse
+0
moins plus
Tout à fait exact. Je me suis finalement programmé une fonction basée sur la norme ISO :
premier jeudi de l'année = toujours jeudi de la semaine 1.
Myriam- 16 juil. 2009 à 08:26
Salut Thev.


Je suis justement entrain d'essayer de programmer une fonction de ce type en prenant en compte la norme ISO, mais j)avoue que je ne sais pas trop comment faire. Peux tu m'aiguiller?


Merci!!

Myriam
Répondre
Ajouter un commentaire
Réponse
-1
moins plus
voici la fonction que j'ai programmée

Function semaine(date_s)
    
    année = Year(date_s)
    date_premier_an = DateSerial(année, 1, 1)
    For j = 0 To 6
        date_j = date_premier_an + j
        jour = Format(date_j, "dddd", vbMonday)
        If jour = "jeudi" Then
            date_lun_semaine1 = date_j - 3
            If date_s >= date_lun_semaine1 Then
                Exit For
            Else
                date_premier_an = DateSerial(année - 1, 1, 1)
                j = -1
            End If
        End If
    Next
    semaine = 1 + (date_s - date_lun_semaine1) \ 7

End Function
Ajouter un commentaire
Ce document intitulé «  [VBScript] numéro de semaine  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

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.

Le fait d'être membre vous permet d'avoir des options supplémentaires.