N° semaine fiscale à partir du 1er novembre

apnart

XLDnaute Occasionnel
Bonjour les gens,

J'avais posé une question il y a pas mal de temps à propos des dates "fiscales" vs dates "calendaires", et j'avais eu ma réponse en ce qui concerne les mois (https://www.excel-downloads.com/threads/resolu-boucle-for-de-11-a-12-puis-1-a-10.20016871/).

Ma problématique complète aujourd'hui :

Dans ma boite (américaine), l'année fiscale commence le 1er novembre... (pas simples les ricains).

Donc en novembre et décembre, l'année fiscale = l'année calendaire + 1
et la semaine 1 fiscale est la semaine du 1er novembre, et la dernière semaine fiscale de l'année est la semaine avant le 1er novembre.

Dans mon excel, à partir d'une date entrée dans une cellule, je voudrais inclure dans une macro (qui fait déjà plein d'autres choses) la possibilité d'avoir dans la cellule à côté, sous le format "YYYY-WW", l'année fiscale, un tiret, et la semaine fiscale.

Ce "bidouillage" est dans une boucle qui va lire plus de 3000 de lignes, il faudrait donc que le code soit relativement léger. Faudrait-il d'ailleurs faire une fonction ?

Merci de votre aide,
Amicalement,
Bruno.
 

chris

XLDnaute Barbatruc
Bonjour

En formules ceci suffit
Code:
=NO.SEMAINE(MOIS.DECALER(A2;2))

Tu peux en faire une fonction personnalisée...

Code:
Function FW(ladate As Date)
    FW = WorksheetFunction.WeekNum(WorksheetFunction.EDate(ladate, 2))
End Function
 

chris

XLDnaute Barbatruc
Re

J'ai oublié le formatage
Code:
Function FW(ladate As Date)
    FW = Year(ladate) + IIf(Month(ladate) >= 11, 1, 0) & "-" & Format(WorksheetFunction.WeekNum(WorksheetFunction.EDate(ladate, 2)), "00")
End Function

Bise à pierrejean ;):)
 

apnart

XLDnaute Occasionnel
Hello,

Je remets 1 franc dans le nourrain... :oops:

En fait je suis parti sur la formule de Chris :
FW = Year(ladate) + IIf(Month(ladate) >= 11, 1, 0) & "-" & Format(WorksheetFunction.WeekNum(WorksheetFunction.EDate(ladate, 2)), "00")

Et ça me pose un soucis car comme cette année le 1er janvier était un mercredi, les semaines fiscales commencent le jeudi :(...

exemple, ma week11 fiscale, avec la formule, va du 10/01 au 16/01, alors qu'elle devrait aller du 14/01 au 18/01 :(

Des idées pour résoudre ce point ?
 

apnart

XLDnaute Occasionnel
Bonjour Bruno

A tester

Edit : A la bourre moi !!!
Salut et Bises Chris (et bravo !!!)

Bonjour pierrejean, je ne m'étais pas penché sur le code fourni, désolé, je viens de regarder et ça semble fonctionner sauf que les semaines commence le dimanche avec ce code.

Si je modifie le 2 par un 3, ça semble correct. Suis-je sur la bonne piste ?

Function prem_lundi(an)
n = Weekday(CDate("01/11/" & an))
prem_lundi = CDate("01/11/" & an) - n +
3
End Function

Merci d'avance.
 

chris

XLDnaute Barbatruc
Re tous

A priori sur la solution de pierrejean il y a encore un petit souci sur bon couple année semaine mais cela se corrige aisément.

En revanche il faudrait que tu précises ce qu'on fait sur la semaine charnière entre 2 années fiscales.

La semaine du 28/10/2019 au 03/11/2019 est-elle la fin de la FW 2019 ou le début de la FW 2020 ?
 

apnart

XLDnaute Occasionnel
Hello,

Je cherche aussi où est le pb, mais pas encore trouvé.

Pour nous, l'année fiscale (la week 1) commence la semaine du 1er nov, donc la semaine du 28/10 au 3/11 de 2019 est la semaine 1 de l'année 2020.

Pas simple tout ça :(

J'ai commencé ce bout de code avec une approche différente, quand je l'utilise dans une feuille avec des dates, ça marche, mais quand j'utilise la fonction à partir d'une macro, ça plante (type mismatch):

Function FiscalWeek(DateLue As Date) As String
If DateLue <> "" Then
Dim FirstWeek As Long
Dim WeekLue As Long
Dim MonthLu As Long
FirstWeek = WorksheetFunction.WeekNum(CDate("01/11/" & Year(DateLue)), 2) ' Week du 01/01 de l'année lue
WeekLue = WorksheetFunction.WeekNum(DateLue, 2)

If WeekLue - (FirstWeek - 1) > 0 Then
MonthLu = Month(DateLue)
YearLu = Year(DateLue)
If MonthLu >= 11 Then YearLu = YearLu + 1
FiscalWeek = YearLu & "-W" & Format(WeekLue - (FirstWeek - 1), "00")
Else
MonthLu = Month(DateLue)
YearLu = Year(DateLue)
If MonthLu >= 11 Then YearLu = YearLu + 1
FiscalWeek = YearLu & "-W" & Format(WeekLue + 9, "00")
End If
Else
FiscalWeek = "Pas de date"
End If
End Function
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 214
Membres
103 158
dernier inscrit
laufin