c'est mon premier prog! indulgence
ce petit prog permet de calculer l'amortissement constant ou variable d'un prêt et prend en compte le delai de differé ou pas.
le fichier "TECHEANCE_CREDIT" du dossier interets est le fichier de DB;
creer un alias "interet" pour la connexion.
encore une fois de plus votre indulgence quant à la qualité du prog
Source / Exemple :
unit Calcul_Interet;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, Menus, DB, DBTables, Buttons, StdCtrls, Mask,
ExtCtrls, Math, IniFiles;
type
TF_Calcul_Interet = class(TForm)
Label24: TLabel;
Label20: TLabel;
Label58: TLabel;
Label25: TLabel;
Bevel5: TBevel;
Label1: TLabel;
SpeedButton1: TSpeedButton;
RadioGroupTypeAmort: TRadioGroup;
RadioGroup2: TRadioGroup;
EditMontant: TEdit;
MaskEditDateDde: TMaskEdit;
EditDureeDiffere: TEdit;
EditDuree: TEdit;
MaskEditTaux: TMaskEdit;
ButtonSaisies: TButton;
BitBtnCalcul: TBitBtn;
DataSource2: TDataSource;
Table1: TTable;
Table1PECHEANCE: TIntegerField;
Table1DATEECHEANCE: TDateField;
Table1MENSUALITE: TFloatField;
Table1CAPITALE_REST: TFloatField;
Table1INTERETS: TFloatField;
Table1AMORTISSEMENT: TFloatField;
Table1MONTANTTVA: TFloatField;
Table1MENSUALITE_TOTALE: TFloatField;
Database1: TDatabase;
DBGrid4: TDBGrid;
procedure BitBtnCalculClick(Sender: TObject);
procedure ButtonSaisiesClick(Sender: TObject);
procedure EditMontantKeyPress(Sender: TObject; var Key: Char);
procedure EditDureeKeyPress(Sender: TObject; var Key: Char);
procedure EditDureeDiffereKeyPress(Sender: TObject; var Key: Char);
procedure MaskEditDateDdeKeyPress(Sender: TObject; var Key: Char);
procedure SpeedButton1Click(Sender: TObject);
procedure RadioGroupTypeAmortClick(Sender: TObject);
procedure RadioGroup2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure CreationAlias(NomAlias,DataDir:String);
private
{ Private declarations }
public
{ Public declarations }
end;
var
F_Calcul_Interet: TF_Calcul_Interet;
MontantLigne, Pduree, Amortissement,duree, MontantInterets, MontantP, TVA, Annuite :double;
TauxP, TauxTVA, DelaiP, differe :double;
Year, Month, Day: Word;
periode,Temps, temps1, Lemois, Annees, Lejour, an, mois, jour, i:integer;
TypeAmort, etat, Interet_Alias :string;
debut, fin, DPEcheance :Tdate;
implementation
uses Apropos;
{$R *.dfm}
procedure TF_Calcul_Interet.BitBtnCalculClick(Sender: TObject);
Var cumul :double;
begin
RadioGroup2Click(Sender);
RadioGroupTypeAmortClick(Sender);
if RadioGroup2.ItemIndex <> -1 then
begin
if RadioGroupTypeAmort.ItemIndex <> -1 then
begin
if EditMontant.Text <>'' then
begin
if EditDuree.Text <>'' then
begin
if MaskEditDateDde.Text <>' / / ' then
begin
if MaskEditTaux.Text <>' , ' then
begin
TauxTVA :=18.25;
if RadioGroupTypeAmort.ItemIndex =0 then
begin
//Cas amortissement constant
Table1.Close;
Table1.EmptyTable;
Table1.Open;
If RadioGroup2.ItemIndex =1 then
begin
//Cas amortisssement constant sans differé
DecodeDate(strtodate(MaskEditDateDde.Text), Year, Month, Day);
Annees := Year;
Lemois := Month;
Lejour := Day;
MontantP:=strtofloat(Editmontant.Text);
Tauxp:= strtofloat(MaskEditTaux.Text);
temps:=round(strtofloat(editduree.Text));
mois:=Lemois;
an:=annees;
jour:=Lejour;
periode:=1;
CUMUL :=0;
while (periode<=temps) do
begin
Amortissement:=round(MontantP/temps);
MontantInterets:=round((MontantP-CUMUL)* tauxp/100);
Annuite:=Amortissement+MontantInterets;
TVA:=round(MontantInterets*tauxtva/100);
Table1.Append;
Table1PECHEANCE.Value :=periode;
Table1DATEECHEANCE.Value :=Encodedate(an, mois, jour);
Table1MENSUALITE.Value :=Annuite;
Table1CAPITALE_REST.Value :=MontantP-CUMUL;
Table1AMORTISSEMENT.Value :=Amortissement;
Table1INTERETS.Value :=MontantInterets;
Table1MONTANTTVA.Value :=TVA;
Table1MENSUALITE_TOTALE.VALUE :=Annuite+tva;
Table1.Post;
if mois=12 then
begin
inc(an);
mois:=1;
end
else
begin
inc(mois);
end;
if mois=2 then
begin
If jour=29 then
begin
if IsLeapYear(an) then Jour:=jour else Jour := 28;
end
else if jour=30 then
begin
if IsLeapYear(an) then Jour:=29 else Jour := 28;
end
else if jour=31 then
begin
if IsLeapYear(an) then Jour:=29 else Jour := 28;
end
else jour:=Lejour;
end
else if ((mois=4) or (mois=6) or (mois=9) or (mois=11)) and (jour=31) then
begin
jour:=30;
end
else jour:=lejour;
periode:=periode+1;
cumul:=cumul+Amortissement;
end;
end
else
begin
//Cas amortissement constant avec differé
DecodeDate(strtodate(MaskEditDateDde.Text), Year, Month, Day);
Annees := Year;
Lemois := Month;
Lejour := Day;
MontantP:=strtofloat(Editmontant.Text);
tauxp :=strtofloat(MaskEditTaux.Text);
differe :=round(strtofloat(EditDureeDiffere.Text));
temps :=round(strtofloat(editduree.Text)+differe);
mois :=Lemois;
jour :=lejour;
an :=annees;
periode:=1;
CUMUL :=0;
while periode<=temps do
begin
if periode<=differe then
begin
//Amortissement:=round(MontantP/strtofloat(editduree.Text));
MontantInterets:=round((MontantP* tauxp)/100);
//Annuite:=Amortissement+interet;
TVA:=round(MontantInterets*tauxtva/100);
Table1.Append;
Table1PECHEANCE.Value :=periode;
Table1DATEECHEANCE.Value :=Encodedate(an, mois, jour);
Table1MENSUALITE.Value :=MontantInterets;
Table1CAPITALE_REST.Value :=MontantP;
Table1AMORTISSEMENT.Value :=Amortissement;
Table1INTERETS.Value :=MontantInterets;
Table1MONTANTTVA.Value :=TVA;
Table1MENSUALITE_TOTALE.VALUE :=Annuite+tva;
Table1.Post;
end
Else
begin
Amortissement:=round(MontantP/strtofloat(editduree.Text));
MontantInterets:=round((MontantP-CUMUL)* tauxp/100);
Annuite:=Amortissement+MontantInterets;
TVA:=round(MontantInterets*TauxTVA/100);
Table1.Append;
Table1PECHEANCE.Value :=periode;
Table1DATEECHEANCE.Value :=Encodedate(an, mois, jour);
Table1MENSUALITE.Value :=Annuite;
Table1CAPITALE_REST.Value :=MontantP-CUMUL;
Table1AMORTISSEMENT.Value :=Amortissement;
Table1INTERETS.Value :=MontantInterets;
Table1MONTANTTVA.Value :=TVA;
Table1MENSUALITE_TOTALE.VALUE :=Annuite+tva;
Table1.Post;
end;
if mois=12 then
begin
inc(an);
mois:=1;
// Lejour:=lejour;
end
else
begin
inc(mois);
end;
if mois=2 then
begin
If jour=29 then
begin
if IsLeapYear(an) then Jour:=jour else Jour := 28;
end
else if jour=30 then
begin
if IsLeapYear(an) then Jour:=29 else Jour := 28;
end
else if jour=31 then
begin
if IsLeapYear(an) then Jour:=29 else Jour := 28;
end
else jour:=Lejour;
end
else if ((mois=4) or (mois=6) or (mois=9) or (mois=11)) and (jour=31) then
begin
jour:=30;
end
else jour:=lejour;
periode:=periode+1;
cumul:=cumul+Amortissement;
end;
end;
end
else
begin
//CAs amortissement variable
Table1.Close;
Table1.EmptyTable;
Table1.Open;
If RadioGroup2.ItemIndex =1 then
begin
//CAs amortissement variable sans differé
DecodeDate(strtodate(MaskEditDateDde.Text), Year, Month, Day);
Annees := Year;
Lemois := Month;
Lejour := Day;
MontantP:=strtofloat(Editmontant.Text);
tauxP:=strtofloat(MaskEditTaux.Text);
temps:=round(strtofloat(editduree.Text));
mois:=Lemois;
an:=annees;
jour:=lejour;
periode:=1;
CUMUL :=0;
while (periode<=temps) do
begin
Annuite:=round((MontantP*tauxp/100)/(1-power((1+tauxp/100),-temps)));
MontantInterets:=round((MontantP-CUMUL)* TAUXP/100);
Amortissement:=Annuite-MontantInterets;
TVA:=round(MontantInterets*TauxTVA/100);
Table1.Append;
Table1PECHEANCE.Value :=periode;
Table1DATEECHEANCE.Value :=Encodedate(an, mois, jour);
Table1MENSUALITE.Value :=Annuite;
Table1CAPITALE_REST.Value :=MontantP-CUMUL;
Table1AMORTISSEMENT.Value :=Amortissement;
Table1INTERETS.Value :=MontantInterets;
Table1MONTANTTVA.Value :=TVA;
Table1MENSUALITE_TOTALE.VALUE :=Annuite+tva;
Table1.Post;
if mois=12 then
begin
inc(an);
mois:=1;
// Lejour:=lejour;
end
else
begin
inc(mois);
end;
if mois=2 then
begin
If jour=29 then
begin
if IsLeapYear(an) then Jour:=jour else Jour := 28;
end
else if jour=30 then
begin
if IsLeapYear(an) then Jour:=29 else Jour := 28;
end
else if jour=31 then
begin
if IsLeapYear(an) then Jour:=29 else Jour := 28;
end
else jour:=Lejour;
end
else if ((mois=4) or (mois=6) or (mois=9) or (mois=11)) and (jour=31) then
begin
jour:=30;
end
else jour:=lejour;
periode:=periode+1;
cumul:=cumul+Amortissement;
end;
end
else
begin
//Cas amortissement variable avec differé
DecodeDate(strtodate(MaskEditDateDde.Text), Year, Month, Day);
Annees := Year;
Lemois := Month;
Lejour := Day;
MontantP:=strtofloat(Editmontant.Text);
tauxP:=strtofloat(MaskEditTaux.Text);
differe:=round(strtofloat(EditDureeDiffere.Text));
temps:=round(strtofloat(editduree.Text));
temps1:=round(strtofloat(editduree.Text)+differe);
mois:=Lemois;
an:=annees;
jour:=Lejour;
periode:=1;
CUMUL :=0;
while (periode<=temps1) do
begin
if periode<=differe then
begin
//Amortissement:=round(MontantP/strtofloat(editduree.Text));
MontantInterets:=round((MontantP)* TAUXP/100);
//Annuite:=Amortissement+interet;
TVA:=round(MontantInterets*TauxTVA/100);
Table1.Append;
Table1PECHEANCE.Value :=periode;
Table1DATEECHEANCE.Value :=Encodedate(an, mois, jour);
Table1MENSUALITE.Value :=Annuite;
Table1CAPITALE_REST.Value :=MontantP-CUMUL;
Table1AMORTISSEMENT.Value :=Amortissement;
Table1INTERETS.Value :=MontantInterets;
Table1MONTANTTVA.Value :=TVA;
Table1MENSUALITE_TOTALE.VALUE :=Annuite+tva;
Table1.Post;
end
Else
begin
Annuite:=round((MontantP*tauxp/100)/(1-power((1+tauxp/100),-temps)));
MontantInterets:=round((MontantP-CUMUL)* TAUXP/100);
Amortissement:=Annuite-MontantInterets;
TVA:=round(MontantInterets*TauxTVA/100);
Table1.Append;
Table1PECHEANCE.Value :=periode;
Table1DATEECHEANCE.Value :=Encodedate(an, mois, jour);
Table1MENSUALITE.Value :=Annuite;
Table1CAPITALE_REST.Value :=MontantP-CUMUL;
Table1AMORTISSEMENT.Value :=Amortissement;
Table1INTERETS.Value :=MontantInterets;
Table1MONTANTTVA.Value :=TVA;
Table1MENSUALITE_TOTALE.VALUE :=Annuite+tva;
Table1.Post;
end;
if mois=12 then
begin
inc(an);
mois:=1;
// Lejour:=lejour;
end
else
begin
inc(mois);
end;
if mois=2 then
begin
If jour=29 then
begin
if IsLeapYear(an) then Jour:=jour else Jour := 28;
end
else if jour=30 then
begin
if IsLeapYear(an) then Jour:=29 else Jour := 28;
end
else if jour=31 then
begin
if IsLeapYear(an) then Jour:=29 else Jour := 28;
end
else jour:=Lejour;
end
else if ((mois=4) or (mois=6) or (mois=9) or (mois=11)) and (jour=31) then
begin
jour:=30;
end
else jour:=lejour;
periode:=periode+1;
cumul:=cumul+Amortissement;
end;
end;
ButtonSaisies.SetFocus;
end;
end
else
begin
showmessage('Préciser le taux d''intérêt SVP.');
MaskEditTaux.SetFocus;
end;
end
else
begin
showmessage('Préciser la date de la première écheance SVP.');
MaskEditDateDde.SetFocus;
end;
end
else
begin
showmessage('Préciser la durée du crédit SVP.');
EditDuree.SetFocus;
end;
end
else
begin
showmessage('Préciser le capital du crédit SVP.');
EditMontant.SetFocus;
end;
end
else
begin
showmessage('Préciser le type d''amortissement SVP.');
end;
end
else
begin
showmessage('Préciser s''il y a différé ou non.');
end;
BitBtnCalcul.Enabled :=false;
ButtonSaisies.Enabled :=true;
ButtonSaisies.SetFocus;
end;
procedure TF_Calcul_Interet.ButtonSaisiesClick(Sender: TObject);
begin
RadioGroupTypeAmort.ItemIndex :=-1;
RadioGroup2.ItemIndex :=-1;
EditMontant.SetFocus;
EditMontant.Clear;
EditDuree.Clear;
EditDureeDiffere.Clear;
MaskEditDateDde.Text :='';
MaskEditTaux.Text :='';
BitBtnCalcul.Enabled :=true;
ButtonSaisies.Enabled :=false;
//Vider la table
Table1.Close;
Table1.EmptyTable;
Table1.Open;
end;
procedure TF_Calcul_Interet.EditMontantKeyPress(Sender: TObject;
var Key: Char);
begin
if not (Key in ['0'..'9', DecimalSeparator, Chr(VK_BACK), Chr(VK_DELETE), Chr(VK_RETURN)])then
Key := #0;
if Key = DecimalSeparator then
if Pos(DecimalSeparator, EditMontant.Text) <> 0 then
Key := #0;
if key=#13 then MaskEditDateDde.SetFocus;
end;
procedure TF_Calcul_Interet.EditDureeKeyPress(Sender: TObject;
var Key: Char);
begin
if not (Key in ['0'..'9', DecimalSeparator, Chr(VK_BACK), Chr(VK_DELETE), Chr(VK_RETURN)])then
Key := #0;
if Key = DecimalSeparator then
if Pos(DecimalSeparator, EditDuree.Text) <> 0 then
Key := #0;
if key=#13 then MaskEditTaux.SetFocus;
end;
procedure TF_Calcul_Interet.EditDureeDiffereKeyPress(Sender: TObject;
var Key: Char);
begin
if not (Key in ['0'..'9', DecimalSeparator, Chr(VK_BACK), Chr(VK_DELETE), Chr(VK_RETURN)])then
Key := #0;
if Key = DecimalSeparator then
if Pos(DecimalSeparator, EditDureeDiffere.Text) <> 0 then
Key := #0;
if key=#13 then BitBtnCalcul.SetFocus;
end;
procedure TF_Calcul_Interet.MaskEditDateDdeKeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then EditDuree.SetFocus;
end;
procedure TF_Calcul_Interet.SpeedButton1Click(Sender: TObject);
begin
F_APropos.Show;
end;
procedure TF_Calcul_Interet.RadioGroupTypeAmortClick(Sender: TObject);
begin
if RadioGroupTypeAmort.ItemIndex =0 then typeamort:='C'
else typeamort:='V';
end;
procedure TF_Calcul_Interet.RadioGroup2Click(Sender: TObject);
begin
If RadioGroup2.ItemIndex =1 then
begin
EditDureeDiffere.Enabled :=false;
EditDureeDiffere.Clear;
end
else
begin
EditDureeDiffere.Enabled :=true;
EditDureeDiffere.SetFocus;
end;
end;
//MISE A JOUR
procedure TF_Calcul_Interet.FormShow(Sender: TObject);
Var DataDir,NomAlias:string;
I:Integer;
begin
Top := 90;
Left := 168;
// appel de la procedure creation alias
dataDir:='C:\Interets';
CreateDir(DataDir);
NomAlias:='Interet_Alias';
CreationAlias(NomAlias,datadir);
database1.Close;
database1.DatabaseName :='Gestion';
database1.AliasName := NomAlias;
database1.Open;
database1.Connected :=true;
Table1.Close;
Table1.DatabaseName :='Gestion';
Table1.TableName :='TECHEANCE_CREDIT';
Table1.TableType :=ttParadox;
Table1.EmptyTable;
Table1.Open;
end;
procedure TF_Calcul_Interet.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #27 then Close;
end;
//MISE A JOUR POUR LA Création de l''alias AUTOMATIQUE
// Ici la procedur creation alias paradox
procedure TF_Calcul_Interet.CreationAlias(NomAlias,DataDir:String);
begin
if not Session.IsAlias(NomAlias) then
session.AddStandardAlias(NomAlias,DataDir,'PARADOX');
end;
end.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.