1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
| Option Compare Database
' date_calcul As Date, _
Sub Flux_décès( _
Taux_de_prime As Double, _
choix_scenario As String, _
choix_actu As Integer, _
choix_rachat As Integer, _
tx_choc_THTF As Double, _
tx_choc_cat As Double, _
tx_choc_rachat As Double, _
tx_choc_rachat_mass As Double, _
tx_frais_sin As Double, _
tx_choc_exp As Double, _
tx_choc_exp_infl As Double _
)
' Procédure de calcul des flux de PRC décès
' variable d'input de la procédure Flux_décès :
' date_calcul : date de calcul
' Taux_de_prime : taux de la prime d'assrance
' choix scenario : choix du scenario de choc, le choix est pris dans le formulaire
' choix_actu : choix d'actualiser (=1) ou pas (=0) les flux
' tx_choc_THTF : tx de choc des qx pour les chocs de mortalité et de longévité
' tx_choc_cat : tx de choc catastrophe
' tx_choc_rachat : tx du choc de rachat up ou down
' tx_choc_rachat_mass : tx de rachat de masse (appliqué sur la première année)
' tx_frais_sin : taux de frais de sinistres
' Déclaration des variables utilisées
Dim Montant_emprunté As Double ' capital initial
Dim Durée_du_prêt As Long ' duree de l'emprunt à l'origine du contrat (en mois)
Dim Ancienneté As Long ' anciennete dans le prêt (en mois)
Dim Taux_du_prêt As Double ' tx_int : tx d'intérêt du prêt (proportionnel)
Dim Taux_de_prime_m As Double ' tx de la prime d'assurance /12
Dim Date_souscription As String ' date de la souscription du contrat
Dim Id_pret As Long ' numéro d'identification du prêt
Dim Id_assure As Long ' numéro d'identification de l'assuré
Dim Nb_têtes As Long ' nb têtes sur le prêt (1 ou 2)
Dim date_naissance As String ' date de naissance
Dim Age_x As Long ' age de la tête x à la date de calcul en années
Dim Sexe_x As String ' sexe de la tête x
Dim Quotité_x As Double ' quotite de la tête x
Dim Age_y As Long ' age de la tête y à la date de calcul en années
Dim Sexe_y As String ' sexe de la tête y
Dim Quotité_y As Double ' quotite de la tête y
Dim f As Double ' variable utilisé pour cumulé les mois en année
Dim periode As Long ' periode : periode de détachement du flux
Dim i As Long ' opérateur d'incrémentation
' Chargements des tables d'inputs et création des tables de résultats
Call Chargements(choix_scenario, tx_choc_THTF, tx_choc_cat, tx_choc_rachat, choix_actu, choix_rachat)
If TableExist("R_L_" & choix_scenario & "_VAPr") = True Then DeleteTable ("R_L_" & choix_scenario & "_VAPr")
Call Creer_table("R_L_" & choix_scenario & "_VAPr")
If TableExist("R_L_" & choix_scenario & "_VAPé") = True Then DeleteTable ("R_L_" & choix_scenario & "_VAPé")
Call Creer_table("R_L_" & choix_scenario & "_VAPé")
If TableExist("R_L_" & choix_scenario & "_Frais") = True Then DeleteTable ("R_L_" & choix_scenario & "_Frais")
Call Creer_table("R_L_" & choix_scenario & "_Frais")
Dim db As dao.Database
Dim r As dao.Recordset
Dim é As dao.Recordset
Dim frais As dao.Recordset
Dim b_encours As dao.Recordset
Set db = CurrentDb
Set r = db.OpenRecordset("R_L_" & choix_scenario & "_VAPr")
Set é = db.OpenRecordset("R_L_" & choix_scenario & "_VAPé")
Set frais = db.OpenRecordset("R_L_" & choix_scenario & "_Frais")
Dim sql As String
sql = "SELECT * FROM [D_Base_en_cours] ORDER BY [D_Base_en_cours].[Id_prêt];"
Set b_encours = db.OpenRecordset(sql, dbOpenDynaset)
Taux_de_prime_m = Taux_de_prime / 12
' Enregistrement des flux assureur dans la table résultat (prestations et frais de gestion de sinistres)
b_encours.MoveFirst
Do
frais.AddNew
r.AddNew
Id_prêt = b_encours.Fields(0)
Date_souscription = b_encours.Fields(1)
Montant_emprunté = b_encours.Fields(2)
Durée_du_prêt = b_encours.Fields(3)
Ancienneté = b_encours.Fields(4)
Taux_du_prêt = b_encours.Fields(5)
Nb_têtes = b_encours.Fields(6)
Age_x = b_encours.Fields(7)
Sexe_x = b_encours.Fields(8)
Quotité_x = b_encours(9)
Age_y = b_encours.Fields(10)
Sexe_y = b_encours.Fields(11)
Quotité_y = b_encours(12)
Mensualite = Echeance(Montant_emprunté, Durée_du_prêt, Taux_du_prêt / 12)
' si scénario = choc catastrophe, les 3 lignes qui suivent recalculent les table de survie
If choix_scenario = "choc_cat" Then
Call table_survie_cat(Sexe_x, Age_x, tx_choc_cat)
If Nb_têtes = 2 Then Call table_survie_cat(Sexe_y, Age_y, tx_choc_cat)
End If
' si scénario = choc rachat mass, les 3 lignes qui suivent recalculent les table de loi de rachat
If choix_scenario = "choc_rachatmass" Then
Call loi_rachat_mass(Ancienneté, tx_choc_rachat_mass)
End If
r.Fields(0) = Id_prêt
r.Fields(1) = Year(Date_souscription)
r.Fields(2) = Montant_emprunté
r.Fields(3) = Durée_du_prêt
r.Fields(4) = Ancienneté
r.Fields(5) = Taux_du_prêt
r.Fields(6) = Mensualite
r.Fields(7) = Nb_têtes
r.Fields(8) = Age_x
r.Fields(9) = Sexe_x
r.Fields(10) = Quotité_x
r.Fields(11) = Age_y
r.Fields(12) = Sexe_y
r.Fields(13) = Quotité_y
r.Fields(14) = Taux_de_prime
r.Fields(15) = choix_scenario
If choix_actu = 1 Then r.Fields(16) = "oui" Else r.Fields(16) = "non"
If choix_rachat = 1 Then r.Fields(17) = "oui" Else r.Fields(17) = "non"
r.Fields(18) = Total_Flux_VAPr_dc(Montant_emprunté, Durée_du_prêt, Taux_du_prêt, Ancienneté, Nb_têtes, _
Age_x, Sexe_x, Quotité_x, Age_y, Sexe_y, Quotité_y)
frais.Fields(0) = Id_prêt
frais.Fields(1) = Year(Date_souscription)
frais.Fields(2) = Montant_emprunté
frais.Fields(3) = Durée_du_prêt
frais.Fields(4) = Ancienneté
frais.Fields(5) = Taux_du_prêt
frais.Fields(6) = Mensualite
frais.Fields(7) = Nb_têtes
frais.Fields(8) = Age_x
frais.Fields(9) = Sexe_x
frais.Fields(10) = Quotité_x
frais.Fields(11) = Age_y
frais.Fields(12) = Sexe_y
frais.Fields(13) = Quotité_y
frais.Fields(14) = Taux_de_prime
frais.Fields(15) = choix_scenario
If choix_actu = 1 Then frais.Fields(16) = "oui" Else frais.Fields(16) = "non"
If choix_rachat = 1 Then frais.Fields(17) = "oui" Else frais.Fields(17) = "non"
' Flux engagements assureur en années
k = 0
l = 1
f = 0
total_frais = 0
For i = 1 To Durée_du_prêt - Ancienneté + 12
If k = 12 Then
r.Fields(18 + l) = f
frais.Fields(18 + l) = f * tx_frais_sin * (1 + tx_choc_exp) * (1 + tx_choc_exp_infl) ^ l
total_frais = total_frais + f * tx_frais_sin * (1 + tx_choc_exp) * (1 + tx_choc_exp_infl) ^ l
f = 0
l = l + 1
k = 0
End If
f = f + Flux_VAPr_dc(Montant_emprunté, Durée_du_prêt, Taux_du_prêt, Ancienneté, Nb_têtes, _
Age_x, Sexe_x, Quotité_x, Age_y, Sexe_y, Quotité_y, i)
k = k + 1
Next i
frais.Fields(18) = total_frais
r.Update
frais.Update
b_encours.MoveNext
Loop Until b_encours.EOF
' Enregistrement des flux assurés dans la table résultat
b_encours.MoveFirst
Do
é.AddNew
Id_prêt = b_encours.Fields(0)
Date_souscription = b_encours.Fields(1)
Montant_emprunté = b_encours.Fields(2)
Durée_du_prêt = b_encours.Fields(3)
Ancienneté = b_encours.Fields(4)
Taux_du_prêt = b_encours.Fields(5)
Nb_têtes = b_encours.Fields(6)
Age_x = b_encours.Fields(7)
Sexe_x = b_encours.Fields(8)
Quotité_x = b_encours(9)
Age_y = b_encours.Fields(10)
Sexe_y = b_encours.Fields(11)
Quotité_y = b_encours(12)
' si le scénario est le choc catastrophe, les 3 lignes qui suivent recalculent les table de survie
If choix_scenario = "choc_cat" Then
Call table_survie_cat(Sexe_x, Age_x, tx_choc_cat)
End If
' si le scénario est le choc rachat mass, les 3 lignes qui suivent recalculent les table de loi de rachat
If choix_scenario = "choc_rachatmass" Then
Call loi_rachat_mass(Ancienneté, tx_choc_rachat_mass)
End If
é.Fields(0) = Id_prêt
é.Fields(1) = Year(Date_souscription)
é.Fields(2) = Montant_emprunté
é.Fields(3) = Durée_du_prêt
é.Fields(4) = Ancienneté
é.Fields(5) = Taux_du_prêt
é.Fields(6) = Mensualite
é.Fields(7) = Nb_têtes
é.Fields(8) = Age_x
é.Fields(9) = Sexe_x
é.Fields(10) = Quotité_x
é.Fields(11) = Age_y
é.Fields(12) = Sexe_y
é.Fields(13) = Quotité_y
é.Fields(14) = Taux_de_prime
é.Fields(15) = choix_scenario
If choix_actu = 1 Then é.Fields(16) = "oui" Else é.Fields(16) = "non"
If choix_rachat = 1 Then é.Fields(17) = "oui" Else é.Fields(17) = "non"
é.Fields(18) = Total_Flux_VAPé(Montant_emprunté, Durée_du_prêt, Ancienneté, Taux_de_prime_m, Nb_têtes, _
Age_x, Sexe_x, Age_y, Sexe_y)
' Flux engagements assurés en années
k = 0
l = 1
f = 0
For i = 1 To Durée_du_prêt - Ancienneté + 12
If k = 12 Then
é.Fields(18 + l) = f
f = 0
l = l + 1
k = 0
End If
f = f + Flux_VAPé(Montant_emprunté, Durée_du_prêt, Ancienneté, Taux_de_prime_m, Nb_têtes, _
Age_x, Sexe_x, Age_y, Sexe_y, i)
k = k + 1
Next i
é.Update
b_encours.MoveNext
Loop Until b_encours.EOF
Application.RefreshDatabaseWindow
End Sub |
Partager