Dictionnaires imbriqués et affichage de valeurs sous forme array
Bonjour à tous,
Je cherche à imbriquer 2 dictionnaires sous la forme <ticker;<date,datas>> .
Les valeurs datas sont sous la forme d'un tableau de 2 valeurs.
Mon objectif est de pouvoir accéder à la plage de donnée 'datas' à une date précise, pour un ticker donné.
Avec le code ci-dessous, je pense réussir à boucler sur la création du 1er dico (dicoticker ici) ou j'ai bien le listing des ticker ;date.
En revanche, lors de mon debug.print, les deux valeurs 'datas' ne se modifient pas.
Du moins les valeurs sorties ne s'adaptent pas au couple ticker-date. Les valeurs datas affichés correspondent toujours à celles du même ticker alors qu'elles s'adaptent à la date.
Auriez-vous une idée pour corriger cela?
Est-ce une erreur dans la construction de mes dictionnaires imbriqués ou dans la rédaction du débug.print?
Code:
Sub test_dico3b()
Application.ScreenUpdating = False
Dim wb As Workbook
Dim wsA, wsD, wsSP, ws As Worksheet
Dim i, j, LC, LRD, LRT As Long
Dim ceml As Range
Dim keyticker, keydate, datas As Variant
Dim dicoticker As New Dictionary
Dim dicodate As Dictionary
Set wb = ThisWorkbook
Set ws = wb.Sheets("Feuil1")
With ws
LC = ws.Cells(Rows.Count, 1).End(xlUp).Row
For j = 2 To LC
keyticker = Cells(j, 1).Value
keydate = Cells(j, 2).Value
If dicoticker.Exists(keyticker) Then
Set dicodate = dicoticker(keyticker)
If dicodate.Exists(keydate) Then
datas = Array(Cells(j, 3), Cells(j, 4))
dicodate.Add keydate, datas
Else
Set datas = New Collection
datas = Array(Cells(j, 3), Cells(j, 4))
dicodate.Add keydate, datas
End If
Else
Set dicodate = New Dictionary
Set datas = New Collection
datas = Array(Cells(j, 3), Cells(j, 4))
Call dicodate.Add(keydate, datas)
Call dicoticker.Add(keyticker, dicodate)
End If
Next j
End With
For Each t In dicoticker.Keys
For Each d In dicodate.Keys
Debug.Print t, d, dicodate(d)(0), dicodate(d)(1)
Next d
Next t
End SubSortie du debug.print
Je joint le fichier ci dessous:
J'avoue avoir tenté pas mal de possibilités, sans résultats..
Merci beaucoup par avance
Je suis désolé j'ai pas repris ton code, c'était plus rapide de recommencer de zéro pour moi. Donc voici ma solution avec le débug.print qui pour moi affiche le bon résultat.
Mon code se trouve dans Module1 avec le Nom "NewDico"
Pas de soucis,
En tout cas celui-ci fonctionne et affiche ce quez je souhaite.
Donc nickel
Merci beaucoup de ton aide !
Pour ce qui est de ton cm si date existe déjà pour un ticker donnée, pas d'action à faire car cela n'arrivera qu'une seul fois pour sur .