Advertisement
Guest User

TP 4 vba

a guest
Nov 27th, 2014
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Option Explicit
  2. Function Mergeseries(a As Variant, b As Variant) As Variant
  3.  
  4. Dim dicoA As New Dictionary
  5. Dim dicoB As New Dictionary
  6. Dim VariantResult As Variant
  7. Dim i As Integer
  8. Dim comptage As Integer
  9.  
  10. For i = 0 To UBound(a)
  11.     dicoA.Add CStr(a(i, 0)), i
  12.     Next i
  13.  
  14. For i = 0 To UBound(b)
  15.     dicoB.Add CStr(b(i, 0)), i
  16.     Next i
  17.  
  18. For i = 0 To UBound(a) 'on parcourt le vecteur a pour savoir si les dates de dico B coincident avec celles de A
  19.    If dicoB.Exists(a(i, 0)) Then
  20.         comptage = comptage + 1 'on compte le nombre de dates égales
  21.    End If
  22. Next i
  23.  
  24. ReDim VariantResult(comptage, 3)
  25.  
  26. For i = 0 To comptage
  27.  
  28.     If dicoB.Exists(a(i, 0)) Then
  29.     VariantResult(i, 0) = a(i, 0)
  30.     VariantResult(i, 1) = a(i, 1)
  31.     VariantResult(i, 2) = b(i, 1)
  32.     End If
  33.     Next i
  34.  
  35. Mergeseries = VariantResult
  36.        
  37. End Function
  38.  
  39. 'Print Range(rgData, rgData.End(xlDown).End(xlToRight)).Rows.Count
  40. '20
  41. 'Print dicoA
  42.  
  43. '?dicoA.Item(cstr(variantresult(i,0))
  44.  
  45. 'Print dicoA.Item("25/06/2003")
  46. '0
  47. 'Print dicoB.Item("25/06/2003")
  48. '576
  49. '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
  50.  
  51.  
  52.  
  53.  
  54.  
  55. Option Explicit
  56.  
  57. Sub FedModel()
  58.  
  59. Dim vDataPE As Variant, vDataPrice As Variant, vDataYld As Variant
  60. Dim vDataAll As Variant
  61. Dim vPE As Variant, vPrice As Variant, vYld As Variant, vDate As Variant
  62. Dim vRP As Variant
  63. Dim rgData As Range
  64. Dim wsW As Worksheet
  65. Dim i As Integer, nb As Integer
  66.    
  67.     'Feuille de travail ("FED MODEL")
  68.    'set wsW =...
  69.    Set wsW = ThisWorkbook.Worksheets("FED MODEL")
  70.  
  71.     'remplir les vecteur (2 colonnes à chaque fois
  72.    'ne pas oubliez de traiter le problème des dimensions des vecteurs
  73.    'vDataPE --> les PE et leurs dates (Col. A et B)
  74.    
  75.     Dim rgDataPE As Range
  76.     Dim rgData1 As Range
  77.     Set rgData1 = wsW.Range("A1")
  78.    
  79.     Dim nbLignes1 As Integer, nbColonnes1 As Integer
  80.     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)
  81.    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
  82.    
  83.     Set rgData1 = Range(rgData1, rgData1.End(xlDown).End(xlToRight))
  84.  
  85.     Dim j As Integer
  86.  
  87.     ReDim vDataPE(nbLignes1, nbColonnes1)
  88.     For i = 0 To nbLignes1
  89.         For j = 0 To nbColonnes1
  90.             vDataPE(i, j) = rgData1(i + 2, j + 1).Value
  91.         Next j
  92.     Next i
  93.        
  94.     'vDataPrice --> les prix de l'indice et leurs dates (Col. D et E)
  95.    
  96.     Dim rgDataPrice As Range
  97.     Dim rgData2 As Range
  98.     Set rgData2 = wsW.Range("D1")
  99.    
  100.     Dim nbLignes2 As Integer, nbColonnes2 As Integer
  101.     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)
  102.    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
  103.    
  104.     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
  105.  
  106.     ReDim vDataPrice(nbLignes2, nbColonnes2)
  107.     For i = 0 To nbLignes2
  108.         For j = 0 To nbColonnes2
  109.             vDataPrice(i, j) = rgData2(i + 2, j + 1).Value
  110.         Next j
  111.     Next i
  112.    
  113.     'vDataYld --> les taux RFR 10 ans et leurs dates (Col. G et H)
  114.  
  115.     Dim rgDataYld As Range
  116.     Dim rgData3 As Range
  117.     Set rgData3 = wsW.Range("G1")
  118.    
  119.     Dim nbLignes3 As Integer, nbColonnes3 As Integer
  120.     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)
  121.    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
  122.    
  123.     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
  124.  
  125.     ReDim vDataYld(nbLignes3, nbColonnes3)
  126.     For i = 0 To nbLignes3
  127.         For j = 0 To nbColonnes3
  128.             vDataYld(i, j) = rgData3(i + 2, j + 1).Value
  129.         Next j
  130.     Next i
  131.    
  132.     'crée une matrice qui ne garde que les données dont les dates sont communes aux trois séries
  133.    'les données doivent être rangées dans l'ordre chrono
  134.    'le faire via une fonction
  135.    'vDataAll : Col. 1 --> les dates communes
  136.    'vDataAll : Col. 2 --> les PE
  137.    'vDataAll : Col. 3 --> les prix de l'indice
  138.    'vDataAll : Col. 4 --> les taux 10 ans
  139.    
  140.     vDataAll = Mergeseries(vDataPE, vDataPrice)
  141.    
  142.    
  143.     'extraire les données de la matrice( un vecteur par colonne)
  144.    'vDate, vPE, vPrice, vYld
  145.    'Pensez aux dimensions
  146.  
  147.    
  148.     'calcul de la prime de risque selon le modele. Stocker dans vRP
  149.  
  150.    
  151.     'affichage des valeurs
  152.    
  153. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement