XL 2016 VBA - FirstDayOfWeek & FirstWeekOfYear applicables en France

Solution
Re
Voir le test avec IsoWeekNum
VB:
Sub exemple()
    exempleDate_1 = CDate("30/12/2019") 'Date pour exemple
    exempleDate_2 = CDate("31/12/2019") 'Date pour exemple
   
    MsgBox Application.IsoWeekNum(exempleDate_1) & vbCrLf & Application.IsoWeekNum(exempleDate_2) 'Numéro de semaine ISO

End Sub
Jean marie

Dudu2

XLDnaute Barbatruc
Alors pourquoi
VB:
Sub a()
    MsgBox DatePart("ww", CDate("01/01/2023"), vbMonday, vbFirstFourDays)
End Sub
donne 52 et pas 1 ???
1652726212655.png
 

ChTi160

XLDnaute Barbatruc
Bonsoir Dudu2
Bonsoir le Fil
Apparemment tu traites le 1/01/2023 qui est le dimanche de la dernière semaine de l'année 2022
Donc Normal que tu ais 52 ! NON ?
Si tu traites le 2 tu auras bien semaine 1
ou alors je n'ai pas saisi lol
jean marie
 

Dudu2

XLDnaute Barbatruc
D'autant plus que j'ai des résultats différents sur ces 2 fonctions:
VB:
Sub a()
    MsgBox DatePart("ww", CDate("01/01/2023"), vbMonday, vbFirstFourDays)
    MsgBox WorksheetFunction.WeekNum(CDate("01/01/2023"), vbMonday)
End Sub
La première retourne 52, l'autre 1.
 

Dudu2

XLDnaute Barbatruc
Et comment expliquer que
VB:
Sub b()
    MsgBox DatePart("ww", CDate("30/12/2019"), vbMonday, vbFirstFourDays)   '--> 53
    MsgBox DatePart("ww", CDate("31/12/2019"), vbMonday, vbFirstFourDays)   '--> 1
End Sub
Alors que c'est le Lundi et le Mardi de la même semaine 1 de 2020 ?
Là je suis paumé.
 

ChTi160

XLDnaute Barbatruc
Re
Voir le test avec IsoWeekNum
VB:
Sub exemple()
    exempleDate_1 = CDate("30/12/2019") 'Date pour exemple
    exempleDate_2 = CDate("31/12/2019") 'Date pour exemple
   
    MsgBox Application.IsoWeekNum(exempleDate_1) & vbCrLf & Application.IsoWeekNum(exempleDate_2) 'Numéro de semaine ISO

End Sub
Jean marie
 

Dudu2

XLDnaute Barbatruc
Je me demande si les Anglosaxons ne considèrent pas les derniers jours de l'année comme faisant toujours partie de ladite année...
Les anglo-saxons considèrent que le 1er jour de la semaine est le dimanche.
Mais ça c'est corrigé par la présence du vbMonday comme FirstDayOfWeek.
Je ne sais pas comment ils considèrent la 1ère semaine de l'année.
Mais là je l'ai forcée à vbFirstFourDays pour matcher l'ISO 8601.
 

ChTi160

XLDnaute Barbatruc
Re
Y'a ca aussi qui fonctionne !
Code:
Sub test()
    exempleDate_1 = CDate("30/12/2019") 'Date pour exemple
    exempleDate_2 = CDate("31/12/2019") 'Date pour exemple
 MsgBox Format(exempleDate_1, "ww", , vbFirstFourDays) & vbCrLf & _
         Format(exempleDate_2, "ww", , vbFirstFourDays)
  End Sub
Jean marie
 

patricktoulon

XLDnaute Barbatruc
re
salut @Dudu2 c'est bien connu que les fonctions date avant la isoweeknum ne savent pas faire la différence
office est en anglais a la base ;)
c'est bien pour cela que tu a les deux fonctions dispos sur les versions office a partir de 2013
savoir no.semaine et no.semaine.iso
pour ceux qui sont encore sur 2007;)

VB:
'le 01/01/2023 =dimanche 01 janvier 2023
'c'est un dimanche donc le 7 eme jour de la semaine pour nous
'ca ne peux donc pas etre  le debut d'une semaine
'c'est donc bien le dimanche de la semaine 52 de l'année précédente
'sachant que pour que ca soit une semaine il faut que le jour soit au minimum le 4 eme a savoir un jeudi (vbfirstfourday)

Sub a() 'on est bon pour le francais
    Debug.Print DatePart("ww", CDate("01/01/2023"), vbMonday, vbFirstFourDays)
End Sub

Sub a2()    'pour 2007 ' on est bon
    Debug.Print ISOWEEK2007(CDate("01/01/2023"))
End Sub

Sub a3() 'equivalent à no.semaine   inutile  et à proscrire on est pas bon!!!!!!!!!
    Debug.Print WorksheetFunction.WeekNum(CLng(CDate("01/01/2023")), vbFirstFourDays)
End Sub

Sub a4() 'equivalent à no.semaine.iso   là oui on a bien la semaine identifiée
    Debug.Print WorksheetFunction.IsoWeekNum(CLng(CDate("01/01/2023")))
End Sub

'fonction perso
Function ISOWEEK2007(dat As Date)
    Dim X&:    X = CLng(dat)
    ISOWEEK2007 = Evaluate("= TRUNC((" & X & "-WEEKDAY(" & X & ",2)+11-DATE(YEAR(" & X & "-WEEKDAY(" & X & " ,2)+4),1,1))/7)")
End Function
a +
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 361
Messages
2 087 626
Membres
103 612
dernier inscrit
GLOIRE