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

Rechercher des sujets similaires à "erreur depassement capacite"