' ============================================================
' SIMULATEUR ASSURANCE-VIE - Macro principale
' Fiscalité : contrat > 8 ans, célibataire
' - Abattement 4 600 €/an sur intérêts
' - IR 7.5% sur intérêts au-delà de l'abattement
' - Prélèvements sociaux 17.2% sur tous les intérêts
' ============================================================
Function SimulerRetrait() As Double
' Lecture des paramètres depuis la feuille
Dim capital As Double, taux As Double, duree As Integer
With ThisWorkbook.Sheets("Simulation")
capital = .Range("B4").Value
taux = .Range("B5").Value ' ex: 0.025
duree = CInt(.Range("B6").Value)
End With
' Recherche du retrait optimal par dichotomie
Dim lo As Double, hi As Double, mid As Double
lo = 1 : hi = capital * 2
Dim i As Integer
For i = 1 To 80
mid = (lo + hi) / 2
If CapitalFinal(..., mid) > 0 Then lo = mid Else hi = mid
Next i
SimulerRetrait = (lo + hi) / 2
End Function
Function CapitalFinal(..., withdrawal As Double) As Double
' Simule l'évolution du capital année par année
Dim cap As Double : cap = capital
For y = 1 To duree
' 1. Intérêts
interest = cap * taux
cap = cap + interest
' 2. Fraction de gains dans le retrait
gainsFraction = totalGains / cap
' 3. Calcul de l'impôt
taxableAfterAbat = Max(0, interestPart - abattement)
ir = taxableAfterAbat * tauxIR ' 7.5%
ps = interestPart * tauxPS ' 17.2%
' 4. Déduction du retrait
cap = cap - withdrawal
Next y
CapitalFinal = cap
End Function
Sub LancerSimulation()
' Point d'entrée : appelée par le BOUTON sur la feuille
withdrawal = SimulerRetrait()
' Remplissage du tableau ligne par ligne
For y = 1 To duree
ws.Cells(r, 1) = "An " & y
ws.Cells(r, 2) = retrait_brut
ws.Cells(r, 3) = part_interets
ws.Cells(r, 4) = part_capital
ws.Cells(r, 5) = impot_du
ws.Cells(r, 6) = retrait_net
ws.Cells(r, 7) = capital_restant
Next y
MsgBox "Retrait annuel brut : " & Format(withdrawal, "#,##0") & " €"
End Sub