Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Option Explicit
- Function Mergeseries(a As Variant, b As Variant) As Variant
- Dim dicoA As New Dictionary
- Dim dicoB As New Dictionary
- Dim VariantResult As Variant
- Dim i As Integer
- Dim comptage As Integer
- For i = 0 To UBound(a)
- dicoA.Add CStr(a(i, 0)), i
- Next i
- For i = 0 To UBound(b)
- dicoB.Add CStr(b(i, 0)), i
- Next i
- For i = 0 To UBound(a) 'on parcourt le vecteur a pour savoir si les dates de dico B coincident avec celles de A
- If dicoB.Exists(a(i, 0)) Then
- comptage = comptage + 1 'on compte le nombre de dates égales
- End If
- Next i
- ReDim VariantResult(comptage, 3)
- For i = 0 To comptage
- If dicoB.Exists(a(i, 0)) Then
- VariantResult(i, 0) = a(i, 0)
- VariantResult(i, 1) = a(i, 1)
- VariantResult(i, 2) = b(i, 1)
- End If
- Next i
- Mergeseries = VariantResult
- End Function
- 'Print Range(rgData, rgData.End(xlDown).End(xlToRight)).Rows.Count
- '20
- 'Print dicoA
- '?dicoA.Item(cstr(variantresult(i,0))
- 'Print dicoA.Item("25/06/2003")
- '0
- 'Print dicoB.Item("25/06/2003")
- '576
- 'ca donne la ligne de la date 25/06/2003 dans les deux dico, il faut d'abord stocker les dates dans un variant, ensuite, faudra parcourir A et B pour prendre les éléments correspondants et les stocker dans un variant
- Option Explicit
- Sub FedModel()
- Dim vDataPE As Variant, vDataPrice As Variant, vDataYld As Variant
- Dim vDataAll As Variant
- Dim vPE As Variant, vPrice As Variant, vYld As Variant, vDate As Variant
- Dim vRP As Variant
- Dim rgData As Range
- Dim wsW As Worksheet
- Dim i As Integer, nb As Integer
- 'Feuille de travail ("FED MODEL")
- 'set wsW =...
- Set wsW = ThisWorkbook.Worksheets("FED MODEL")
- 'remplir les vecteur (2 colonnes à chaque fois
- 'ne pas oubliez de traiter le problème des dimensions des vecteurs
- 'vDataPE --> les PE et leurs dates (Col. A et B)
- Dim rgDataPE As Range
- Dim rgData1 As Range
- Set rgData1 = wsW.Range("A1")
- Dim nbLignes1 As Integer, nbColonnes1 As Integer
- nbLignes1 = Range(rgData1, rgData1.End(xlDown).End(xlToRight)).Rows.Count - 2 'compte le nombre de lignes du tableau de deux colonnes faits par A1 et B1 (en enlevant la ligne 0 et la 1ère ligne)
- nbColonnes1 = Range(rgData1, rgData1.End(xlDown).End(xlToRight)).Columns.Count - 1 'compte le nombre de colonnes du tableau de deux colonnes faits par A1 et B1 ie 2
- Set rgData1 = Range(rgData1, rgData1.End(xlDown).End(xlToRight))
- Dim j As Integer
- ReDim vDataPE(nbLignes1, nbColonnes1)
- For i = 0 To nbLignes1
- For j = 0 To nbColonnes1
- vDataPE(i, j) = rgData1(i + 2, j + 1).Value
- Next j
- Next i
- 'vDataPrice --> les prix de l'indice et leurs dates (Col. D et E)
- Dim rgDataPrice As Range
- Dim rgData2 As Range
- Set rgData2 = wsW.Range("D1")
- Dim nbLignes2 As Integer, nbColonnes2 As Integer
- nbLignes2 = Range(rgData2, rgData2.End(xlDown).End(xlToRight)).Rows.Count - 2 'compte le nombre de lignes du tableau de deux colonnes faits par A1 et B1 (en enlevant la ligne 0 et la 1ère ligne)
- nbColonnes2 = Range(rgData2, rgData2.End(xlDown).End(xlToRight)).Columns.Count - 1 'compte le nombre de colonnes du tableau de deux colonnes faits par A1 et B1 ie 2
- Set rgData2 = Range(rgData2, rgData2.End(xlDown).End(xlToRight)) 'quand on définit un tableau dans excel, on prend le coin supérieur gauche et le coin inférieur droit
- ReDim vDataPrice(nbLignes2, nbColonnes2)
- For i = 0 To nbLignes2
- For j = 0 To nbColonnes2
- vDataPrice(i, j) = rgData2(i + 2, j + 1).Value
- Next j
- Next i
- 'vDataYld --> les taux RFR 10 ans et leurs dates (Col. G et H)
- Dim rgDataYld As Range
- Dim rgData3 As Range
- Set rgData3 = wsW.Range("G1")
- Dim nbLignes3 As Integer, nbColonnes3 As Integer
- nbLignes3 = Range(rgData3, rgData3.End(xlDown).End(xlToRight)).Rows.Count - 2 'compte le nombre de lignes du tableau de deux colonnes faits par A1 et B1 (en enlevant la ligne 0 et la 1ère ligne)
- nbColonnes3 = Range(rgData3, rgData3.End(xlDown).End(xlToRight)).Columns.Count - 1 'compte le nombre de colonnes du tableau de deux colonnes faits par A1 et B1 ie 2
- Set rgData3 = Range(rgData3, rgData3.End(xlDown).End(xlToRight)) 'quand on définit un tableau dans excel, on prend le coin supérieur gauche et le coin inférieur droit
- ReDim vDataYld(nbLignes3, nbColonnes3)
- For i = 0 To nbLignes3
- For j = 0 To nbColonnes3
- vDataYld(i, j) = rgData3(i + 2, j + 1).Value
- Next j
- Next i
- 'crée une matrice qui ne garde que les données dont les dates sont communes aux trois séries
- 'les données doivent être rangées dans l'ordre chrono
- 'le faire via une fonction
- 'vDataAll : Col. 1 --> les dates communes
- 'vDataAll : Col. 2 --> les PE
- 'vDataAll : Col. 3 --> les prix de l'indice
- 'vDataAll : Col. 4 --> les taux 10 ans
- vDataAll = Mergeseries(vDataPE, vDataPrice)
- 'extraire les données de la matrice( un vecteur par colonne)
- 'vDate, vPE, vPrice, vYld
- 'Pensez aux dimensions
- 'calcul de la prime de risque selon le modele. Stocker dans vRP
- 'affichage des valeurs
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement