EasyCompte, Le logiciel gratuit de gestion de finances familiales multi comptes Le logiciel gratuit de gestion de finances familiales
Accueil   |  Inscription   |  Démo   |  Téléchargement   |  FAQ   |  Forum   |  Contact
Simulation de remboursement d'emprunt avec EasyCompte
 
Voir le résultat       Télécharger le script

Ce script présente, sous forme de tableau, le montant de remboursement mensuel d'un emprunt, en fonction de la durée de remboursement et du taux d'intérêt.
 
Principe
 
Chaque case du tableau a pour valeur, le montant du remboursement mensuel de l'emprunt, en fonction du taux d'intérêt exprimé en tête de colonne, de la durée du remboursement, exprimée en nombre d'années, en tête de ligne, et du montant (saisi) de l'emprunt à rembourser.
 
La formule théorique, permettant de calculer la mensualité (MntRbtPer), en fonction du taux d'intérêt (Taux), du nombre de périodes (NbPer) et du montant emprunté (MntEmprunt) est la suivante :
 
MntRbtPer  =  MntEmprunt  xTaux

1 - (1 + Taux)  - NbPer
 
Quel montant aurai-je à rembourser, chaque mois pendant 4 ans, si j'emprunte la somme de 10 000 euros, au taux annuel de 6 % ?   Dans cet exemple :
  • MntEmprunt est le montant emprunté, soit 10 000 euros,
  • Taux est le taux d'intérêt sur une période et est donc égal à 0,06 / 12, soit 0,005 pour un mois,
  • NbPer est le nombre d'échéances, soit 48 mois sur 4 ans.
 
Le résultat est donc :
MntRbtPer  =  10 000  x0,005   = 234.85

1    -    1,005 - 48
 
Programmation
 
La fonction pow()
 
La fonction pow(a,b), qui permet de calculer a à la puissance b, n'accepte plus, depuis les versions ultérieures à la version 4.0.6 de PHP, que des nombres a et b entiers. Dans notre exemple, a est égal à 1,005 et la fonction pow() retourne dans ce cas, une anomalie.
Pour y remédier, la fonction pow(a,b) est remplacée par l'expression équivalente exp(log(a) x b).
 
La fonction number_format()
 
La fonction number_format(a,b,c,d) formate le nombre a, en vue de son affichage.
  • a, de type float, représente le nombre à formater,
  • b, de type int, représente le nombre de décimales à afficher,
  • c, de type string, représente le caractère utilisé comme séparateur décimal,
  • d, de type string, représente le caractère utilisé comme séparateur des milliers.
La fonction retourne le résultat, sous forme de chaîne de caractères (string).
Pour le nombre $nombre=1234567.8, l'instruction <? echo number_format($nombre,2,'.',' '); ?> affiche 1 234 567.80
 
Script
 
Initialisation des bornes inférieures et supérieures du taux de l'emprunt et de la durée de remboursement.
Le taux variera entre 4 et 15 % et la durée, entre 2 et 20 ans.
<?
$TauxMin=4;$TauxMax=15;
$nbAnneesMin=2;$nbAnneesMax=20;
?>
 
<HTML>
<HEAD>
<title>Simulation de remboursement d'emprunt avec EasyCompte</title>
<META name="description" content="Ce script présente, sous forme de tableau, le montant de remboursement mensuel d'un emprunt, en fonction de la durée de remboursement et du taux d'intérêt.">
 
Les styles ci-dessous ne sont pas tous utilisés dans ce script. Ils sont bien sûr personnalisables et n'influent que sur la présentation des résultats.
<style>
BODY {background-color:#FFFFD2; color:#000000;font-family:Arial, Helvetica, sans-serif;font-size:12}
A:link {color:#993300}
A:visited {color:#cc6633}
A:hover,A:active {background:#008080;color:#FFFFFF}
.tdleft,.tdright,.tdcenter,.thcenter,.thleft,.thright {padding-left: 5pt;padding-right:5pt;padding-top:0;padding-bottom:0;vertical-align:middle}
.tdleft,thleft {text-align:left;font-size:12}
.tdright,.thright {text-align:right;font-size:12}
.tdcenter,.thcenter {text-align:center;font-size:12}
.thcenter,.thleft,.thright {color:white;background-color:#008080;font-weight:bold}
</style>
 
La fonction javascript "control_saisie" est chargée de contrôler le montant de l'emprunt saisi, à chaque clic sur le bouton "Go".
<script language="javascript">
/* ---------------------------------------------------------------------------------------- */
/* Contrôle des valeurs des champs du formulaire */
/* ---------------------------------------------------------------------------------------- */
function control_saisie(form) {
if (saisie.MntEmprunt.value=="") {
alert("Le montant de l'emprunt est une information à saisir obligatoirement");
form.MntEmprunt.focus();
return false;
}
if (isNaN(saisie.MntEmprunt.value)) {
alert("Le montant de l'emprunt doit être une information numérique")
form.MntEmprunt.focus();
return false;
}
}
</script>
</HEAD>
 
<BODY onLoad="window.defaultStatus=top.document.title">
 
Définition du formulaire comprenant la zone de saisie du montant emprunté et le bouton "Go" chargé de lancer l'exécution.

Les paramètres method="post", action="<? echo $PHP_SELF; ?>" et onSubmit="return control_saisie(this)", ont pour effet qu'à chaque clic sur le bouton "Go", le script s'appelle lui-même, en passant la valeur du montant emprunté, à condition que celle-ci soit renseignée et numérique.

La variable $MntEmprunt, contenant la valeur du montant de l'emprunt, est récupérée par le script appelé et réaffichée dans la zone de texte MntEmprunt à l'aide de la propriété value="<? echo $MntEmprunt; ?>".
Lors du premier accès au script, la variable $MntEmprunt n'existe pas et la zone de texte reste vide.


<form name="saisie" method="post" action="<? echo $PHP_SELF; ?>" onSubmit="return control_saisie(this)">
<table width=778 align="center">
<tr><td><font color="#004080" size="4"><b>Simulation d'emprunt</b></font></td></tr>
<tr><td> </td></tr>
<tr><td>
<table bgcolor="aqua">
<tr><td class=tdleft>Calculez votre remboursement mensuel</td></tr>
<tr><td class=tdleft>pour un emprunt de
<INPUT TYPE="TEXT" name="MntEmprunt" SIZE="11" maxlength="11"  value="<? echo $MntEmprunt; ?>"
onMouseOver="javascript:window.status='Montant emprunté'">  
<INPUT type="submit" value="Go"
onMouseOver="window.status='Calcul du montant des remboursements périodiques'"></td></tr>
</table>
</td></tr>
</table>
</form><!-- Fin du formulaire ------------------------------------------------------------------->
 
Affichage sous forme de tableau, des mensualités de remboursement.
La première ligne sert d'entête de colonne et contient les différents taux d'intérêt.
La première colonne sert d'entête de ligne et contient les différentes durées de remboursement.
<table border=0 cellspacing=1 cellpadding=0 width="778" align="center">
Affichage de la première ligne.
<td> </td> sert à réserver la première colonne pour les durées de remboursement.
<? echo $col; ?> % permet d'afficher dans chaque cellule, la valeur des taux d'intérêt de 4 à 15 %
<tr><td> </td><?
for ($col=$TauxMin;$col<=$TauxMax;$col++) { ?>
<th class=thcenter><? echo $col; ?> %</th><?
} ?>
</tr>
Affichage des lignes suivantes.

La variable $bgcolor sert à alterner la couleur des lignes du tableau, avec <tr bgcolor="<? echo $bgcolor; ?>">.

<? echo $row; ?> ans sert à afficher dans la première cellule de chaque ligne, la durée de remboursement.

Les autres cellules de la ligne contiennent le résultat du calcul du montant de la mensualité, formaté à l'aide de la fonction number_format().

<? $bgcolor="";
for ($row=$nbAnneesMin;$row<=$nbAnneesMax;$row++) {
$bgcolor == "#99CCFF" ? $bgcolor="#CCFFFF" : $bgcolor="#99CCFF"; ?>
<tr bgcolor="<? echo $bgcolor; ?>">
<th class=thright width="1%" nowrap><? echo $row; ?> ans</th><?
for ($col=$TauxMin;$col<=$TauxMax;$col++) {
$x=1+$col/1200;
$MntRbtPer=number_format($MntEmprunt/(1-1/exp(log($x)*$row*12))*($x-1),'2','.',' '); ?>
<td class=tdright nowrap><? echo $MntRbtPer; ?></td><?
}
echo "</tr>";
} ?>
</table>
</BODY>
</HTML>
 
Optimisation
 
Pour les plus courageux, il est possible d'optimiser les performances de ce script :
  • La formule de calcul $MntRbtPer=number_format($MntEmprunt/(1-1/exp(log($x)*$row*12))*($x-1),'2','.',' '); recalcule systématiquement, le nombre de mensualités. Or celui-ci est identique pour toutes les cellules de la même ligne. Il est donc envisageable de n'effectuer ce calcul qu'une fois en début de ligne et utiliser le résultat, dans la formule, pour toutes les cellules de la ligne.

  • De la même manière, le taux d'intérêt mensuel, calculé dans l'expression $x=1+$col/1200 est identique pour toutes les cellules de la même colonne. Il est par conséquent envisageable de ne calculer qu'une seule fois les différents taux d'intérêt mensuels et les enregistrer dans un tableau.
Contact   |  Ajouter aux favoris   |  Recommander le site   |  Faire un lien vers EasyCompte   |  Déclarer un dysfonctionnement   |  Le site