Function PremièreAnnuité(fecha As Date, Optional TypeAnnée As Byte = 1, Optional MoisClôture As Byte = 12) As Integer
'Nombre de jours depuis une date donnée (INCLUSE) jusqu'à la fin de l'année
'- fecha : la date
'- TypeAnnée = 1 : année comptable --> 12 mois de 30 jours <=> 360 jours
'- TypeAnnée = 2 : année fiscale normale de 365 jours
'si "TypeAnnée" est omis, par défaut ce sera une année dite comptable de 360 jours, de loin la plus fréquente
'- MoisClôture : mois de clôture
'si "MoisClôture" est omis, par défaut ce sera le mois de décembre (12), de loin le plus fréquent
'Éxemples:
'"=PremièreAnnuité(une_date;2;10)" --> nombre de jours, dans une année de 365 jours, entre la date (incluse) et le 31 octobre
'"=PremièreAnnuité(une_date;1;10)" ou "=PremièreAnnuité(une_date;;10)" --> nombre de jours, dans une année de 360 jours, entre la date (incluse) et le 30 octobre
'"=PremièreAnnuité(une_date;2)" --> nombre de jours, dans une année de 365 jours, entre la date (incluse) et le 31 décembre
'"=PremièreAnnuité(une_date)" --> nombre de jours, dans une année de 360 jours, entre la date (incluse) et le 30 décembre
'Magic_Doctor / job75
Dim mesmois As Variant, nbjoursmois As Byte, i As Byte, nbjr As Integer
nbjoursmois = IIf(TypeAnnée = 1, 30, NbJoursDuMois(Month(fecha), Year(fecha)))
mesmois = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) 'année de 365 jours
mesmois = Split(Join(mesmois) & " " & Join(mesmois))
If Month(fecha) <= MoisClôture Then
If TypeAnnée = 1 Then 'année de 360 jours
nbjr = 30 * (MoisClôture - Month(fecha))
Else 'année de 365 jours
For i = Month(fecha) To MoisClôture - 1
nbjr = mesmois(i) + nbjr
Next
End If
Else
If TypeAnnée = 1 Then 'année de 360 jours
nbjr = 30 * (12 + MoisClôture - Month(fecha))
Else 'année de 365 jours
For i = Month(fecha) To MoisClôture + 11
nbjr = mesmois(i) + nbjr
Next
End If
End If
PremièreAnnuité = nbjoursmois - Day(fecha) + 1 + nbjr
End Function
------------------------------------------------------------------------------
Function NbJoursDuMois(m As Byte, Optional année As Integer = 0) As Byte
'Renvoie le nombre de jours d'un mois en fonction de son Nº
' m : un Nº de mois (janvier --> 1 ... décembre --> 12)
'- année : si omis, ne tiendra pas compte des années bissextiles (février -2- aura toujours 28 jours)
'Magic_Doctor
Dim mesmois As Variant, x As Byte, nbjoursmois As Byte
x = IIf(année = 0, 28, IIf(LeapYear(année), 29, 28))
mesmois = Array(31, x, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
NbJoursDuMois = mesmois(m - 1)
End Function
------------------------------------------------------------------------------
Function LeapYear(a%) As Boolean
'Vérifie si une année est bissextile ou pas (tient compte des années théoriquement bissextiles et qui ne le sont en fait pas, comme 1800/1900/2100...)
'- a : une année quelconque
'ROGER2327
LeapYear = ((a Mod 4) = 0) * (1 + ((a Mod 100) = 0) * (1 + (((a \ 100) Mod 4) = 0)))
End Function