Bonjour à tous,

Cette question concerne un travail s'effectuant sur VBA

Je suis actuellement en train de travailler sur un projet finance dans lequel je dois créer une bibliothèque de fonctions financières

Je bloque cependant sur une des questions qui concerne la création d'un tableau a deux dimensions qui renseigne les dates et les montants des flux futurs de l’obligation

Pour faire simple, il faut que je rentre les arguments suivants obligatoire
Function Dates_Et_Flux (DateCalcul As Date, DateMaturite As Date, FrequenceCoupon As Integer, Nominal As Double, tauxCoupon As Double) As Variant

J'ai déjà réussi à créer un tableau à 1 dimension qui renseigne les dates en créant une fonction matricielle dont voici le code (l'idée serait donc peut être de réutiliser ce code et donc de pouvoir insérer seulement une deuxième ligne dans ma fonction matricielle qui renseigne les coupons futurs et le remboursement du nominal à la fin):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Si quelqu'un d'entre vous a une idée ou une suggestion pour m'aider ca serait super!

Merci beaucoup

Guillaume