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
| 'Question 1
'Introduction de la fonction DateDecal qui nous permet de calculer le détachement des coupons pour la question 1
'Fonction permettant de calculer la nouvelle date de coupon
Function DateDecal(Annee As Integer, Mois As Integer, Jour As Integer, Moisoffset As Integer) As Double
Dim Dbldate As Double
Dbldate = DateSerial(Annee, Mois + Moisoffset, Jour)
DateDecal = Dbldate
End Function
'Question 1
'Dates des flux futurs d'une obligation
Public Function DateFlux(DateCalcul As Date, DateMaturite As Date, frequence As Integer) As Variant
'Detachement de coupon
Dim iperiodecoupon As Integer
Dim dernieredate As Date
iperiodecoupon = 12 / frequence
'Tableau (inversé) démarrant à la date de maturité
Dim tabdatefluxtemp() As Date
If DateCalcul < DateMaturite Then
ReDim Preserve tabdatefluxtemp(0)
tabdatefluxtemp(0) = DateMaturite
Else
Exit Function
End If
'Boucle While
dernieredate = DateDecal(Year(DateMaturite), Month(DateMaturite), Day(datemarutite), -iperiodecoupon)
While dernieredate > DateCalcul
ReDim Preserve tabdatefluxtemp(UBound(tabdatefluxtemp) + 1)
tabdatefluxtemp(UBound(tabdatefluxtemp)) = dernieredate
dernieredate = DateDecal(Year(dernieredate), Month(dernieredate), Day(datemarutite), -iperiodecoupon)
Wend
'inverse tableau
Dim i As Integer
Dim j As Integer
Dim tabdateflux() As Date
ReDim tabdateflux(UBound(tabdatefluxtemp))
i = UBound(tabdatefluxtemp)
j = 0
For i = UBound(tabdatefluxtemp) To 0 Step -1
tabdateflux(j) = tabdatefluxtemp(i)
j = j + 1
Next i
DateFlux = tabdateflux
End Function |
Partager