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
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.
bonjour
tjour plus fort
j'essais ce soir chez moi
a+ merci
herve
"FxM" <fxmanceaux@chello.fr> a écrit dans le message de
news:uITji6rYEHA.3596@tk2msftngp13.phx.gbl...
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.
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.