N° semaine fiscale à partir du 1er novembre

  • Initiateur de la discussion Initiateur de la discussion apnart
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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
 
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

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
 
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 ? 😳
 
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+
 
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
 
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
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
1 K
Réponses
5
Affichages
4 K
Réponses
7
Affichages
1 K
C
Réponses
6
Affichages
2 K
C
Retour