Calcul interets : amortissement constant et variable avec differe ou non

Description

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.

Codes Sources

A voir également

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.