Erreur 6 "dépassement de capacité"
Bonsoir, je débute en VBA et je ne comprends pourquoi j'obtiens cette erreur dans mon code. J'ai essayé de changer mon type de variables mais sans grand succès. Le resultat se situe entre 100 et 500 dans les simulations que j'ai tenté et c'est pourquoi je ne comprends pas qu'Excel m'affiche ce code erreur.
Le code erreur s'affiche pour le calcul des échéances
Sub tableau_amortissement()
Dim montant_pret As Currency
Dim duree As Long
Dim taux_amenagement As Single
Dim taux_creation As Single
Dim taux_retenu As Single
Dim echeance As Currency
Dim annuite As Single
Dim interet_1er_mois As Double
Dim interet_mois_suivant As Double
Dim capital_restant_du_1er_mois As Double
Dim capital_restant_du_mois_suivant As Double
Dim coup_pret As Double
montant_pret = InputBox("quel est le montant du pret ?")
Worksheets("Tableau amortissement").Cells(1, 2).Value = montant_pret
duree = InputBox("quel est la durée annuelle du pret ?")
Worksheets("Tableau amortissement").Cells(2, 2).Value = duree
If MsgBox("Est ce un aménagement ?", vbYesNo) = vbYes And duree <= 2 Then
Worksheets("Tableau amortissement").Cells(3, 2).Value = "Oui"
Worksheets("Tableau amortissement").Cells(3, 4).Value = "Non"
Worksheets("Tableau amortissement").Cells(4, 2).Value = 0.0244
Worksheets("Tableau amortissement").Cells(4, 4).Value = "/"
taux_retenu = taux_amortissement
ElseIf MsgBox("Est ce un aménagement ?", vbYesNo) = vbYes And 2 < duree <= 5 Then
Worksheets("Tableau amortissement").Cells(3, 2).Value = "Oui"
Worksheets("Tableau amortissement").Cells(3, 4).Value = "Non"
Worksheets("Tableau amortissement").Cells(4, 2).Value = 0.0345
Worksheets("Tableau amortissement").Cells(4, 4).Value = "/"
taux_retenu = taux_amortissement
ElseIf MsgBox("Est ce un aménagement ?", vbYesNo) = vbYes And 0 < duree <= 10 Then
Worksheets("Tableau amortissement").Cells(3, 2).Value = "Oui"
Worksheets("Tableau amortissement").Cells(3, 4).Value = "Non"
Worksheets("Tableau amortissement").Cells(4, 2).Value = 0.0415
Worksheets("Tableau amortissement").Cells(4, 4).Value = "/"
taux_retenu = taux_amortissement
ElseIf MsgBox("Est ce un aménagement ?", vbYesNo) = vbYes And 10 < duree <= 15 Then
Worksheets("Tableau amortissement").Cells(3, 2).Value = "Oui"
Worksheets("Tableau amortissement").Cells(3, 4).Value = "Non"
Worksheets("Tableau amortissement").Cells(4, 2).Value = 0.0525
Worksheets("Tableau amortissement").Cells(4, 4).Value = "/"
taux_retenu = taux_amortissement
ElseIf MsgBox("Est ce un aménagement ?", vbYesNo) = vbNo And duree <= 2 Then
Worksheets("Tableau amortissement").Cells(3, 2).Value = "Non"
Worksheets("Tableau amortissement").Cells(3, 4).Value = "Oui"
Worksheets("Tableau amortissement").Cells(4, 2).Value = "/"
Worksheets("Tableau amortissement").Cells(4, 4).Value = 0.02196
taux_retenu = taux_creation
ElseIf MsgBox("Est ce un aménagement ?", vbYesNo) = vbNo And 2 < duree <= 5 Then
Worksheets("Tableau amortissement").Cells(3, 2).Value = "Non"
Worksheets("Tableau amortissement").Cells(3, 4).Value = "Oui"
Worksheets("Tableau amortissement").Cells(4, 2).Value = "/"
Worksheets("Tableau amortissement").Cells(4, 4).Value = 0.03105
taux_retenu = taux_creation
ElseIf MsgBox("Est ce un aménagement ?", vbYesNo) = vbNo And 5 < duree <= 10 Then
Worksheets("Tableau amortissement").Cells(3, 2).Value = "Non"
Worksheets("Tableau amortissement").Cells(3, 4).Value = "Oui"
Worksheets("Tableau amortissement").Cells(4, 2).Value = "/"
Worksheets("Tableau amortissement").Cells(4, 4).Value = 0.03735
taux_retenu = taux_creation
ElseIf MsgBox("Est ce un aménagement ?", vbYesNo) = vbNo And 10 < duree <= 15 Then
Worksheets("Tableau amortissement").Cells(3, 2).Value = "Non"
Worksheets("Tableau amortissement").Cells(3, 4).Value = "Oui"
Worksheets("Tableau amortissement").Cells(4, 2).Value = "/"
Worksheets("Tableau amortissement").Cells(4, 4).Value = 0.04725
taux_retenu = taux_creation
End If
echeance = montant_pret * ((taux_retenu / 100 / 12) / (1 - (1 + taux_retenu / 100 / 12) ^ -(duree * 12)))
annuité = echeance * 12
cout_pret = echeance * duree * 12
'initialisation tableau ligne 11'
Worksheets("Tableau amortissement").Cells(11, 2).Value = 1
Worksheets("Tableau amortissement").Cells(11, 3).Value = montant_pret * (taux_retenu / 100 / 12)
Worksheets("Tableau amortissement").Cells(11, 4).Value = echeance * 0.0311
Worksheets("Tableau amortissement").Cells(11, 5).Value = echeance - Cells(11, 3)
Worksheets("Tableau amortissement").Cells(11, 6).Value = montant_pret - Cells(11, 4)
End Sub
Merci d'avance pour vos réponses
Salut yann et
le problème vient des taux_amortissement et taux_creation qui sont vides, et donc le taux_retenu = 0 ==> donc 0 diviser par quelque chose renvoie une erreur.
il faut donc definir les taux_amortissement et taux_creation !!
et peut être reduire le code comme ca?
Sub tableau_amortissement()
Dim montant_pret, echeance As Currency
Dim duree As Long
Dim taux_amenagement, taux_creation, taux_retenu, annuite As Single
Dim interet_1er_mois, interet_mois_suivant, capital_restant_du_1er_mois As Double
Dim coup_pret, capital_restant_du_mois_suivant As Double
Dim Rep As Integer
With Worksheets("Tableau amortissement")
montant_pret = InputBox("quel est le montant du pret ?")
.Cells(1, 2).Value = montant_pret
duree = InputBox("quel est la durée annuelle du pret ?")
.Cells(2, 2) = duree
Rep = MsgBox("Est ce un aménagement ?", vbYesNo)
If Rep = vbYes Then
.Cells(3, 2) = "Oui"
.Cells(3, 4) = "Non"
.Cells(4, 4) = "/"
taux_retenu = taux_amortissement
If duree <= 2 Then
.Cells(4, 2) = 0.0244
ElseIf 2 < duree <= 5 Then
.Cells(4, 2) = 0.0345
ElseIf 0 < duree <= 10 Then
.Cells(4, 2) = 0.0415
ElseIf 10 < duree <= 15 Then
.Cells(4, 2) = 0.0525
End If
ElseIf Rep = vbNo Then
.Cells(3, 2) = "Non"
.Cells(3, 4) = "Oui"
.Cells(4, 2) = "/"
taux_retenu = taux_creation
If duree <= 2 Then
.Cells(4, 4) = 0.02196
ElseIf 2 < duree <= 5 Then
.Cells(4, 4) = 0.03105
ElseIf 5 < duree <= 10 Then
.Cells(4, 4) = 0.03735
ElseIf 10 < duree <= 15 Then
.Cells(4, 4) = 0.04725
End If
End If
echeance = montant_pret * ((taux_retenu / 1200) / (1 - (1 + taux_retenu / 1200) ^ -(duree * 12)))
annuité = echeance * 12
cout_pret = echeance * duree * 12
'initialisation tableau ligne 11'
.Cells(11, 2) = 1
.Cells(11, 3) = montant_pret * (taux_retenu / 100 / 12)
.Cells(11, 4) = echeance * 0.0311
.Cells(11, 5) = echeance - Cells(11, 3)
.Cells(11, 6) = montant_pret - Cells(11, 4)
End With
End Sub
Bonne nuit
Bonjour
Bonjour à tous
donc 0 diviser par quelque chose renvoie une erreur.
Je crois que c'est l'inverse : zéro divisé par quelque chose donne zéro et ne donne pas une erreur.
En revanche, quelque chose divisé par zéro donne bien une erreur.
Et, comme l'a noté m3ellem1, salut à lui, c'est bien ce qui se passe quand un taux est nul. Exemple dans la formule :
echeance = montant_pret * ((taux_retenu / 1200) / (1 - (1 + taux_retenu / 1200) ^ -(duree * 12)))
Bye !
Bonjour à vous deux,
Oui merci pour vos 2 réponses, je ne m'étais pas rendu compte que je n'avais pas défini taux_amortissement et taux_création. Je vais pouvoir continuer la suite de mon code