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
RE

@apnart : donc la FW peut s'arrêter le 27 octobre ?

@ Pierrejean
Oui le tout dernier est OK.
Edit
non cela change le mardi !

J'avais corrigé ainsi
Code:
Function prem_lundi(an)
n = Weekday(CDate("01/11/" & an))
prem_lundi = CDate("01/11/" & an) - n + 2
End Function
Function num_fisc(ladate As Date) As String
If ladate < prem_lundi(Year(ladate)) Then
  num_fisc = Year(ladate) + IIf(Month(ladate) > 10, 1, 0) & "-" & Format(Int((ladate - prem_lundi(Year(ladate) - 1)) / 7) + 1, "00")
Else
   num_fisc = Year(ladate) + 1 & "-" & Format(Int((ladate - prem_lundi(Year(ladate))) / 7) + 1, "00")
End If
End Function
 

apnart

XLDnaute Occasionnel
Re

@ chris
Selon # 8 apnart souhaite des semaines du Lundi au Vendredi
as-tu vu le dernier fichier posté ?

Désolé, oui j'ai vu mais il y a encore des soucis dedans.

J'ai mis en 1ère date 2018 au lieu de 2019 pour ne pas descendre trop bas dans le fichier et car j'ai encore mon calendrier "carton" sous la main, c'est plus simple pour moi ;)

sur la copie écran attachée on voit le soucis dès la 1ère semaine. (nota, mes semaines vont du lundi au dimanche)
 

Pièces jointes

  • pbweek.pdf
    57.2 KB · Affichages: 10

chris

XLDnaute Barbatruc
RE

Non : c'est lié à ma question sur les semaines à cheval sur 2 Fiscal years...

Selon ta réponse du #14 la semaine du 26/10/2020 au 01/11/2020 devrait être la 1... comme celle de 28/10/2019 au 03/11/2019

"-W" fonctionne...
 

chris

XLDnaute Barbatruc
Re

Ceci a l'air OK
Code:
Function FW(ladate As Date)
    debut = DateSerial(Year(ladate) - IIf(Month(ladate) < 11, 1, 0), 11, 1)
    lundidebut = debut - WorksheetFunction.Weekday(debut, 3)
    fin = lundidebut + 363 'IIf(ladate < debut, 364, 0)
    If WorksheetFunction.WeekNum(ladate, 2) = WorksheetFunction.WeekNum(debut, 2) Then
        semaine = 1
    Else
        semaine = ((ladate - WorksheetFunction.Weekday(ladate, 3) - (lundidebut)) / 7) + 1
    End If
    FW = Year(ladate) + IIf(ladate > fin Or Month(ladate) > Month(fin), 1, 0) & "-" & Format(semaine, "00")
End Function
 

apnart

XLDnaute Occasionnel
Bon bah c'est encore moi, désolé, ça fonctionne quand je l'utilise dans une feuille en faisant référence à une cellule avec une date, mais quand je l'intègre à ma macro, ça plante sur " lundidebut = debut - WorksheetFunction.Weekday(debut, 3)"

dans ma macro, je récupère sur une feuille la date dans une variable en faisant (le X c'est car c'est dans une boucle):
Dim MV2date As Date
MV2date = Cells(X, 13).Value

Puis j'utilise la macro de Chris :
MV2week = FW(MV2date)

et j'ai donc l'erreur : "lundidebut = debut - WorksheetFunction.Weekday(debut, 3)"

des idées ? :oops:
 

job75

XLDnaute Barbatruc
Bonjour apnart, chris, Pierre,

Perso j'utiliserai cette fonction :
Code:
Function FW(dat As Date) As String
Dim PremierNovembre As Date, PremierLundi As Date
PremierNovembre = DateSerial(Year(dat) + (Month(dat) < 11), 11, 1)
PremierLundi = PremierNovembre - (PremierNovembre - 2) Mod 7
FW = Year(dat) & "-W" & Format(1 + Int((dat - PremierLundi) / 7), "00")
End Function
Puis pour la boucle :
Code:
Dim MV2week As String
'---
If IsDate(Cells(X, 13)) Then
    MV2week = FW(Cells(X, 13))
End If
A+
 

apnart

XLDnaute Occasionnel
Merci job75, ça semble fonctionner, je n'ai plus de plantage dans la macro, mais pour l'année, ça ne s'incrémente pas à partir du 1er nov,

exemple, le 02/11/2018 devrait me donner 2019-W01 alors que ta fonction me donne 2018-W01

un p'tit coup de main please
 

apnart

XLDnaute Occasionnel
J'ai testé ça, il semble que ça soit bon, vous pouvez confirmer ?

Function FiscWeek(dat As Date) As String
Dim PremierNovembre As Date, PremierLundi As Date
PremierNovembre = DateSerial(Year(dat) + (Month(dat) < 11), 11, 1)
PremierLundi = PremierNovembre - (PremierNovembre - 2) Mod 7
If Month(dat) > 10 Then
FiscWeek = Year(dat) + 1 & "-W" & Format(1 + Int((dat - PremierLundi) / 7), "00")
Else
FiscWeek = Year(dat) & "-W" & Format(1 + Int((dat - PremierLundi) / 7), "00")
End If
End Function
 

job75

XLDnaute Barbatruc
Bonjour apnart,
Code:
Function FiscWeek(dat As Date) As String
Dim PremierNovembre As Date, PremierLundi As Date
PremierNovembre = DateSerial(Year(dat) + (Month(dat) < 11), 11, 1)
PremierLundi = PremierNovembre - (PremierNovembre - 2) Mod 7
FiscWeek = Year(PremierLundi) + 1 & "-W" & Format(1 + Int((dat - PremierLundi) / 7), "00")
End Function
A+
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87