Pb: VBA-Calcul emprunt, crédit, annuités....

Fermé
Elo97133 - 18 mai 2008 à 14:43
 lucile - 2 janv. 2009 à 14:09
Bonjour,

Je suis novice en VBA et j'ai un petit souci sur ma programmation.
Je souhaite en effet que l'utilisateur entre le montant du capital emprunté, son taux d'intérêt, le nombre d'années de l'emprunt ainsi que le coût de son assurance pour pouvoir calculé le coût total de son emprunt.

Je pense que l'algorithme est bon mais en fait j'ai un problème de déclaration de variables je crois pour a(), i(), c()...
Il ne voit pas ce que c'est....

Comment dois-je faire?
Je vous envoie toute ma programmation car je ne suis pas non plus certaine que l'erreur vienne de ça:


Voici la programmation:

Sub CommandButton1_Click()


'Aquisition des informations
Dim ca As Integer, n As Integer, tx As Integer

ca = Val(TextBox1) 'Capital emprunté (Euros)
n = Val(TextBox2) 'Nombre de périodes (en mois)
tx = Val(TextBox3) 'Taux fixe d'emprunt (%)
If tx = 0 Then tx = 0.0000001
txm = tx / 100 / 12


'Amortissement le 1er mois
a(1) = ca * txm / ((1 + txm) ^ n - 1)

'Intérêt 1er mois
i(1) = ca * txm

'somme prélevée mensuelle
pr = i(1) + a(1)

'Début de la boucle du tableau d'amortissement
'Le tableaux c() contiendra le capital restant dû période après période (mois après mois) en euros.
'Le tableaux i() contiendra les intérets filés à la banque sur chaque période, en euros
'Le tableaux a() contiendra le capital remboursé sur chaque période, en euros.
c(1) = ca
totalint = 0

For xx = 2 To n
c(xx) = c(xx - 1) - a(xx - 1)
i(xx) = c(xx) * txm
a(xx) = pr - i(xx)
totalint = totalint + i(xx)
Next xx

derr = a(n) - c(n)
a(n) = c(n)
i(n) = i(n) + derr

If tx = 0.000001 Then
i(1) = 0
For xx = 2 To n
a(xx) = c(1) / n
i(xx) = 0
c(xx) = c(xx - 1) - a(xx)
Next xx
totalint = 0
derr = 0
a(n) = c(n)
End If

totalint = totalint + i(1) + derr


'Affichage du résultat
Label6 = Int(totalint * 100 + 0.5) / 100 'Total des intérets



'Création de deux OptionBox : Option1 et Option2
'On ne testera que Option1 qui cochée permet d'indiquer au programme
'le prix de l'assurance par période (Euros/mois) si l'on coche Option1
'le prix de l'assurance en % du capital si l'on coche l'Option2

If OptionButton1.Value = True Then
TextBox5 = Int((Val(TextBox4) * 100 / Val(TextBox1)) * 100) / 100
'On a donné le prix de l'assurance par période
'Affichage pour information en % du capital
Else
TextBox4 = Int((Val(TextBox5) / 100 * Val(TextBox1)) * 100) / 100
'On a donné le prix de l'assurance en % du capital
'Affichage pour informationpar de ce prix par période
End If

'Affichage des résultats
Label10 = Val(TextBox4) * Val(TextBox2) 'Assurance totale à payer
Label13 = Int((pr + Val(TextBox4)) * 100 + 0.5) / 100 'Echéance mensuelle

Label15 = Val(Label10) + Val(Label6) 'Cout total du crédit, assurance et intérets compris.




End Sub







Je sais qu'il y'a des personnes supers balaises sur ce forum donc..... à vos ordis!! Merci bcp d'avance!

A très bientôt ;-)

Elo

4 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
18 mai 2008 à 16:09
Bonjour,

Ton texte:
"Je sais qu'il y'a des personnes supers balaises sur ce forum donc..... à vos ordis"

est complètement débile et a l'air de dire: si je n'y arrive pas , c'est qu'il faut être super balaise

d'autre part, on n'est absolument forcé d'être sensible aux fayots.


Bon petit topo sur les variables (pour les détails, c'est dans l'aide microsoft)

Tx est décimal donc le type est single et non integer
Ca ton capital est limité à 32767 si veux aller plus loin :type long
n esst déclaré byte donc limité à 256 soit >=21 ans, si tu veux aller au delà prend un intéger

ta transformation de textbox par la fonction val est sure mais très lourde, fais des essais avec les fonctions de conversion (voir l'aide)

Voilà, utiliser VBA pour un calcul d'emprunt est luxueux les formules suffiraient mais on t'a peut être demandé de le faire par VBA

Michel
1
Bonjour Michel,

Ton poste m'a fait sourrire.... Loin de moi cette idée!
C'est juste que je me suis rendue compte que sur ce site.... l'exemple est du coup vérifié.... de nombreuses personnes sont très réactives à toutes les demandes d'aide et répondent dans des temps reccords.
Je n'ai donc pas du tout voulu dire que "si je n'y arrive pas , c'est qu'il faut être super balaise" car comme je l'ai dit je suis novice et n'ai pas du tout peur de dire que je suis un boulet en VBA et que si ça se trouve l'erreur sera ridicule pour la personne qui m'aidera.

"d'autre part, on n'est absolument forcé d'être sensible aux fayots." ... un peu d'humour!!... il ne faut pas voir le mal partout! Quand je vois à la vitesse où je vais, en restant bloquée plusieurs heures sur un problème qu'une personne arrive à résoudre en 10 min... je ne peux alors que dire que je la trouve balaise! loool

En effet, je n'ai pas le choix... on doit rendre ce projet dans le cadre d'un cours....
Merci pour les liens... j'y vais sur le champ!

Merci pour ton aide !
0
Je reviens juste pour mettre l'accent sur quelque-chose.... je pense que le souci vient de c(), a() et i() qui ne sont pas déclarées car lorsque je fais le deboggage il s'arrête dessus.

Que dois-je rajouter pour que le programme soit fonctionnel?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
18 mai 2008 à 17:01
Le mieux est que tu éxécutes ton prog en pas à pas par la touche F8

tu peux voir la valeur de tes variables en passant la souris (en amont du surlignage jaune) ou en installant l'espion (debogage-ajouter un esion), tu verras ainsi les erreurs
D'autre part, évite au maximum les variables à 1 lettre car on est obligé de se remémorer leur signification lors d'une recherche d'erreur ou une maintenance pourquoi pas ("interet_verse" plutot que "i"?). Un bon prog est d'abord un code prévu pour la maintenance facile.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
18 mai 2008 à 17:05
Le mieux est que tu éxécutes ton prog en pas à pas par la touche F8

tu peux voir la valeur de tes variables en passant la souris (en amont du surlignage jaune) ou en installant l'espion (debogage-ajouter un esion), tu verras ainsi les erreurs
D'autre part, évite au maximum les variables à 1 lettre car on est obligé de se remémorer leur signification lors d'une recherche d'erreur ou une maintenance pourquoi pas ("interet_verse" plutot que "i"?). Un bon prog est d'abord un code prévu pour la maintenance facile.
0
C'est bon...

Problème résolu...
C'était bien ça, je devais déclarer mes variables a(), c() et i() en tableau.

Dim ca As Long, n As Integer, tx As Single
Dim a(1000) As Single, i(1000) As Single, c(1000) As Single

Parfait ça marche très bien

Merci!
0
je cherche a faire la même chose que toi mais sans tableau tu crois que c'est possible


ca serais pour géré mes emprunts
0