Dictionnaire

Bonjour à tous !

Je vous expose mon problème. Je souhaite avoir un dictionnaire avec comme clé une action (bourse) et comme valeur un autre dictionnaire qui lui même a comme clé une date et comme valeur un tableau(prix et prix max de l'action).

Seulement quand je souhaite récupérer le prix à une date d'une action il m'indique "Incompatibilité de type".

Voici mon code pour vous aider. Il est lié à une api "Bloomberg", il est de ce fait intestable. J'espère juste avoir fait une grosse erreur que quelqu'un remarquera à vue d'oeil.

'Dictionnaire

Function CreationDico(dateD As Date, dateF As Date, listeparam() As String) As Dictionary

Dim i As Integer

'Récupère les donnees de Bloomberg

Dim data As Variant

data = GoToBloom(dateD, dateF, listeparam()) // cette fonction va récupérer des valeurs de marchés (par exemple les prix) d'une date à une autre. pour récupérer un prix : il faudra faire data(nom de l'action, nb de jours)(prix de cloture)

Dim taille As Integer

taille = Sheets("Stocks").Range("C55555").End(xlUp).Row

'''Création des dicos

'Dico(produits, dico(date,param))

Dim DicoProduit As Dictionary

Set DicoProduit = New Dictionary

'Dico(date,param)

Dim size_tab As Integer

size_tab = UBound(listeparam)

Dim tablo() As Variant

ReDim tablo(0 To size_tab)

Dim DicoPerso As Dictionary

Set DicoPerso = New Dictionary

For i = 2 To taille

For j = 1 To dateF - dateD

For k = 0 To size_tab

tablo(k) = data(i - 2, j - 1)(k)

Next k

DicoPerso.Add dateD - 1 + j, tablo

Next j

DicoProduit.Add Sheets("Stocks").Cells(i, 3).Value, DicoPerso

DicoPerso.RemoveAll

Next i

Print DicoProduit.Keys(1)

Set CreationDico = DicoProduit

End Function

et voici la procédure qui teste la fonction :

Sub test()

Dim z(1) As String

z(0) = "PX_LAST" 'prix de cloture

z(1) = "PX_LOW" 'prix le plus bas

Dim a As Dictionary

Set a = New Dictionary

Set a = CreationDico("21/08/2010", "21/11/2018", z)

MsgBox (a("AAPL US Equity")("11/11/2018")(1))

End Sub

Ca sera surement impossible à comprendre mais si quelqu'un voit ...

Le problème vient je pense du fait qu'il y ait un tableau dans un dictionnaire lui même compris dans un dictionnaire et que je ne vois pas comment y accéder.

Merci bcp par avance !! je joins le code en plus au cas ou.

Bonsoir,

ici une idée de correction de code :

vous avez ceci :

Dim taille As Integer

taille = Sheets("Stocks").Range("C55555").End(xlUp).Row

Mais la dernière ligne est à quel "numéro de ligne Excel" ?

Car une variable Integer ne peut pas allez au dessus de environ 32000 !

Mettez : Dim taille As Long

déjà ce sera mieux car les lignes sous Excel vont à plus d'1 000 000 !

Pour le reste je ne sais pas et qui sait peut-être que cela suffira

@ bientôt

LouReeD

Merci beaucoup

Mais mon problème ne réside pas dans la récupération des données bloomberg mais plutôt dans la construction d'un dictionnaire de dictionnaire dont les valeurs sont des tableaux.

Merci.

Bonjour,

voici un test qui montre comment accéder au tableau d'un dictionnaire dans un dictionnaire.

Sub aargh()
    Set a = CreateObject("scripting.dictionary")
    Set b = CreateObject("scripting.dictionary")
    Dim tablo(1 To 2)
    tablo(1) = 58.8
    tablo(2) = 58.9
    b.Add "21/11/2018", tablo
    a.Add "Total", b
    MsgBox (a("Total")("21/11/2018")(1))
End Sub
Rechercher des sujets similaires à "dictionnaire"