Numéro de semaine dans calendrier fausse

christian.bedere

XLDnaute Occasionnel
Bonjour à vous tous

Je dispose d'un calendrier dans un userform, j'ai formaté une textbox pour qu'elle affiche le numéro de la semaine avec ce code :

semaine=format(calendar1,"ww")

Cela fonctionne, jusqu'au moment où quand je clique sur la journée du dimanche, elle m'affiche le numéro de la semaine suivante, comme si la semaine commençait le dimanche.

Avez-vous une réponse à ma question? Je vous remercie infiniement !!

Kiki
 

Pièces jointes

  • Essai.xls
    34.5 KB · Affichages: 127
  • Essai.xls
    34.5 KB · Affichages: 125
  • Essai.xls
    34.5 KB · Affichages: 124

Catrice

XLDnaute Barbatruc
Re : Numéro de semaine dans calendrier fausse

Bonjour,

Il faut que tu joues avec les parametres de Format, par exemple :

Private Sub Calendar1_Click()
Semaine = Format(Calendar1, "ww", vbMonday, vbFirstFourDays)
End Sub

Tu trouveras plus de details dans l'aide.
 

chris

XLDnaute Barbatruc
Re : Numéro de semaine dans calendrier fausse

Bonjour

Sur la base de ce que tous ont indiqué la formule exacte est
semaine=format(calendar1,"ww",2,2)
car si elle marche actuellement, la formule de Jean-Marcel ne marchera pas en 2010 par exemple car, comme indiqué par PascalXLD, nous ne numérotons par selon la norme américaine.
 

ROGER2327

XLDnaute Barbatruc
Re : Numéro de semaine dans calendrier fausse

Bonsoir à tous.
La norme internationale concernant la définition des n° de semaine est la norme I.S.O. 8601. Elle n'est pas toujours respectée aux États Unis d'Amérique. Notamment, les produits initialement conçus pour les É.U.A. ne sont souvent pas suffisamment adaptés pour la distribution internationale. Pour Microsoft® Visual Basic 6.0 Édition professionnelle, on peut consulter Numérotation de semaines avec DatePart :
(...) Les règles de numérotation des semaines de l'année sont
différentes entre les Etats-Unis et l'Europe. La valeur par défaut du
paramètre "FirstWeekOfYear" de la fonction DatePart n'est pas forcément
celui attendu par l'utilisateur européen. (...)
On peut en dire autant du paramètre VbDayOfWeek.

D'accord avec Catrice, la moins fausse des solutions me semble être
Code:
Function nosem1(d) [COLOR="Green"]' d est une valeur de date[/COLOR]
    nosem1 = DatePart("ww", d, vbMonday, vbFirstFourDays)
End Function
qui donne cependant des résultats bizarres pour le 30/12/2019 ou le 31/12/2007.​
Je pense qu'il vaut mieux écrire une fonction respectant la norme ISO, comme par exemple
Code:
Function NOSEM(d As Date) As Long
[COLOR="Green"]'
' Fonction ajoutée le 2/06/2004 par ROGER
' N° de la semaine dans l'année de la date D conforme à la norme ISO.

'[/COLOR]
   d = Int(d)
   NOSEM = DateSerial(Year(d + (8 - WeekDay(d, vbSunday)) Mod 7 - 3), 1, 1)
   NOSEM = ((d - NOSEM - 3 + (WeekDay(NOSEM, vbSunday) + 1) Mod 7)) \ 7 + 1
End Function
qui a l'air d'être correcte. (Par sécurité, j'ai explicitement écrit le paramètre vbSunday bien que ce soit le paramètre par défaut.)

Code:
=ENT((D+SOMME(MOD(DATE(ANNEE(D-MOD(D-2;7)+3);1;2);{1E+99;7})*{-1;1})+5)/7)
D représente une valeur de date semble fonctionner dans Excel®.​
Bonne nuit !
ROGER2327
 

Discussions similaires

Réponses
5
Affichages
566

Statistiques des forums

Discussions
312 342
Messages
2 087 436
Membres
103 545
dernier inscrit
agent3