OVH Cloud OVH Cloud

calcul d'échéance

11 réponses
Avatar
herve
bonjour
je cherche à modifier cette formule, celle-ci fonctionne avec des années, je
souhaite la faire travailler avec des mois.
L16 : date de départ
M16 : durée en année
N16 : renouvellement en année
O16 : préavis en mois

=SI(L16="";"";MAX(DATE(ANNEE(L16)+M16+PLAFOND((AUJOURDHUI()>DATE(ANNEE(L16)+
M16;MOIS(L16)-O16;JOUR(L16)))*((AUJOURDHUI()-DATE(ANNEE(L16)+M16;MOIS(L16)-O
16;JOUR(L16)))/365);N16);MOIS(L16);JOUR(L16));AUJOURDHUI();L16))

merci
a+

1 réponse

1 2
Avatar
herve
bonjour
tjour plus fort
j'essais ce soir chez moi
a+ merci
herve

"FxM" a écrit dans le message de
news:
re-

herve wrote:
je cherche, je cherche
j'ai trouvé l'auteur de la macro que j'utilise , sans le préavis de 3
mois,


c'est toi ou vous le 21 07 2001
milles merci car je l'utilise tjr


Eh ben ... j'étais dans des coups foireux :o))

Cette fois-ci sous forme de fonction perso :
Alt-F11 | insertion | module, y recopier ce qui est entre les lignes
(attention aux coupures de ligne). L'utilisation est décrite plus bas.

@+
FxM


======== début de code ====== > Public Function echeance(date_debut, duree_ini_mois, duree_prorog_mois,
duree_preavis_mois, optional inclure_preavis)
'(c) FxM 2004/07/05 sur MPFE
Application.Volatile True

Dim deb As Date, ini As Double, pro As Double, prv As Double
Dim inc As Double, td As Double, nb As Double, n1 As Double, n2 As
Double


'date de début
deb = CDate(date_debut)
'durée initiale
ini = CDbl(duree_ini_mois)
'durée de prorogation
pro = CDbl(duree_prorog_mois)
'délai de préavis
prv = CDbl(duree_preavis_mois)
'le préavis est inclus -> inc = 1 sinon inc = 0
If IsMissing(inclure_preavis) Then inclure_preavis = 0
inc = 1 - Abs((inclure_preavis = 1) Or (inclure_preavis = True) * 1)
'td = maintenant
td = Int(Now)

'nombre de mois passés
nb = ((td - deb) / 365.25 * 12)

'vérif si > durée initiale
If nb > ini Then
'surplus de mois
n1 = (((td - deb) / 365.25 * 12) - ini)
'nb de mois pour la période suivante complète
n2 = Int((n1 / pro) + 1 - 0.0000000001)
nb = ini + pro * n2
End If

'échéance reprenant les critères
echeance = DateSerial(Year(deb), Month(deb) + nb - (inc * prv),
Day(deb))

'rattrapage dans le cas d'un dépassement de mois
Do Until Abs(Day(echeance) - Day(deb)) < 3
echeance = echeance - 1
Loop

End Function
======== fin de code ====== >
Usage :
| A | B |
----------------------------------
1 | Date début | 31/12/1998 | -> date de début du contrat
2 | Durée initiale | 24 | -> en mois
3 | Prorogation | 12 | -> en mois
4 | Préavis | 3 | -> en mois
5 | Inclure préavis | 0 | (ci-dessous)
En B5, entrer 0 ou FAUX ou rien pour ne pas inclure le préavis (date
maxi de dénonciation). Entrer 1 ou VRAI pour l'inclure (fin effective du
contrat).

Formule à utiliser : ìheance(B1;B2;B3;B4;B5)
validation simple par enter.

Exemples de résultats :
31/12/98 | 24 | 12 | 3 | 1 --> 31/12/04
31/12/98 | 24 | 12 | 3 | 0 --> 30/09/04

31/12/98 | 24 | 18 | 3 | 1 --> 30/06/05
31/12/98 | 24 | 18 | 3 | 0 --> 31/03/05



1 2