Accès à un élément d'une valeur de dictionnaire

Bonjour tout le monde,

en faite j'ai un dictionnaire qui contient tout les données nécessaires pour le calcul de la CVA sachant que le CVA = a * b * c * d * e

le dictionnaire associe chaque clé à une valeur, la clé est considérée comme le nom d'une entreprise et la valeur c'est un tableau qui contient a, b , c, d,e avec a est un scalaire et b, c, d, e sont des vecteurs colonnes.

1) première question est ce que cette structure est correcte c'est à dire on peut stocker un vecteur colonne dans un élément de tableau?

2) si oui, commet accéder à la un élément du vecteur colonne sachant qu'il est dans un vecteur colonne qui est contenu dans une case du tableau?

Bonjour,

Je dirais oui a-priori, sous réserve de voir ce qui est réellement fait...

Extraction normale : sortie de l'élément, appel de l'élément de l'élément, avec conversions nécessaires le cas échéant...

Cordialement.

extraction normale c'est à dire ??

moi pour accéder à la valeur d'une clé je tape DicoData(clé) qui donne le tableau, ce qui m’intéresse de plus c'est l’accès a un élément du vecteur colonne?

Oui, tout à fait ! Mais j'ai ajouté : avec les conversions nécessaires le cas échéant... Je ne pourrai rien dire de plus sans voir tes données, leur type, et ton code.

Bonjour,

Un item de dictionnaire peut contenir un Array à 1 ou 2 dimensions.

Sub Essai()
  Set d = CreateObject("Scripting.Dictionary")
  a = [A2:D4]                          ' Array 2D
  d.Item("xx") = a
  Z = d("xx")(2, 1)                    ' a(2,1)
  MsgBox Z
  x = Application.Index(d("xx"), 2)    ' 2e ligne
  MsgBox x(2)
  x = Application.Index(d("xx"), , 3)  ' 3e colonne
  MsgBox x(2, 1)
End Sub

Ceuzin

merci ceuzin pour ta réponse qui m’éclaircisse un peur les choses, j'aurais bien aimé poster le code mais il est trop long 100 pages de code du coup pour faire le tri ça demande trop de temps.

le voilà mon code si ca ourrait une idée ce que je fais. ma question est fouiller dans le dictionnaire pour accéder aux éléments du vecteur colonne.

Sub Extraction_Data()

'Récupérer les paramètres pour extraction des données csv

chemin = ActiveWorkbook.Path + "\projet\"

Jour = Format(Range("DateJour"), "dd")

Mois = Format(Range("DateJour"), "mm")

Annee = Format(Range("DateJour"), "yyyy")

Jour_1 = Format(Range("DateJour_1"), "dd")

Mois_1 = Format(Range("DateJour_1"), "mm")

Annee_1 = Format(Range("DateJour_1"), "yyyy")

CheminVecteurDateJour = "Fichier_1 & Annee » & Mois & Jour& ".csv"

CheminVecteurDateJour_1 = "Fichier_2" & Annee_1 & Mois_1 & Jour_1 & ".csv"

CheminScalaireDateJour = "Fichier_3" & AnneePnL & MoisPnL & JourPnL & ".csv"

CheminScalaireDateJour_1 = "Fichier_4" & AnneePnL_1 & MoisPnL_1 & JourPnL_1 & ".csv"

'Stockage de la data dans le dictionnaire DicoData

Dim DicoData

Set DicoData = CreateObject("Scripting.dictionary")

ReDim vector(100)

' Vecteur de modification

ReDim bVector(51)

ReDim eVector(51)

ReDim CCtpVector(51)

ReDim dVector(51)

ReDim dVector_1(51)

ReDim bVector_1(51)

ReDim CCtpVector_1(51)

ReDim cNatVector_1(51)

ReDim eVector_1(51)

ReDim eVector(51)

'Récupérer les données scalaire DateJour - 1

filenameScalar = chemin & CheminScalaireDateJour_1

Open filenameScalar For Input As #1

rowNumber = 1

Do Until EOF(1)

Line Input #1, LineFromFile

LineItems = Split(LineFromFile, ";")

If rowNumber <> 1 Then

ctp = LineItems(2)

lgd_1 = Replace(LineItems(13), ".", ",")

vector(8) = lgd_1

DicoData.Add ctp, vector

End If

rowNumber = rowNumber + 1

Loop

Close #1

'Récupérer les données scalar DateJour

filenameScalar = chemin & CheminScalaireDateJour

Open filenameScalar For Input As #2

rowNumber = 1

Do Until EOF(2)

Line Input #2, LineFromFile

LineItems = Split(LineFromFile, ";")

If rowNumber <> 1 Then

ctp = LineItems(2)

lgd = Replace(LineItems(13), ".", ",")

If DicoData.exists(ctp) Then

vector = DicoData(ctp)

DicoData.Remove (ctp)

End If

vector(9) = lgd

DicoData.Add ctp, vector

End If

rowNumber = rowNumber + 1

Loop

Close #2

'Récupérer les données Vector DateJour - 1

filenameVector = chemin & CheminVecteurDateJour_1

Open filenameVector For Input As #3

rowNumber = 1

vectorIndex = 0

Do Until EOF(3)

Line Input #3, LineFromFile

LineItems = Split(LineFromFile, ";")

If rowNumber <> 1 Then

ctp = LineItems(2)

b_1 = Replace(LineItems(5), ".", ","

c_1 = Replace(LineItems(7), ".", ",")

d_1 = Replace(LineItems(11), ".", ",")

e_1 = Replace(LineItems(17), ".", ",")

bVector_1(vectorIndex,1) = b_1

cVector_1(vectorIndex,1) = c_1

dVector_1(vectorIndex,1) = d_1

eVector_1(vectorIndex,1) = e_1

End If

rowNumber = rowNumber + 1

vectorIndex = vectorIndex + 1

If vectorIndex = 52 Then

vector = DicoData(ctp)

DicoData.Remove (ctp)

vector(11) = bVector_1

vector(15)=cVector_1

vector(29) = dVector_1

vector(21) = eVector_1

DicoData.Add ctp, vector

vectorIndex = 1

End If

Loop

Close #3

'Récupérer les données Vector PnL

filenameVector = chemin & CheminVecteurDateJour

Open filenameVector For Input As #4

rowNumber = 1

vectorIndex = 0

Do Until EOF(4)

Line Input #4, LineFromFile

LineItems = Split(LineFromFile, ";")

If rowNumber <> 1 Then

ctp = LineItems(2)

b = Replace(LineItems(5), ".", ",")

c = Replace(LineItems(7), ".", ",")

d = Replace(LineItems(11), ".", ",")

e = Replace(LineItems(17), ".", ",")

bVector(vectorIndex,1) = b

cVector(vectorIndex,1) = c

dVector(vectorIndex,1) = d

eVector(vectorIndex,1) = e

End If

rowNumber = rowNumber + 1

vectorIndex = vectorIndex + 1

If vectorIndex = 52 Then

vector = DicoData(ctp)

DicoData.Remove (ctp)

vector(12) = bVector

vector(18) = cVector

vector(30) = dVector

vector(22) = eVector

DicoData.Add ctp, vector

vectorIndex = 1

End If

Loop

Close #4

Illisible !

Bon ! Tu indiques l'extraction qui te pose problèmes, et tu décris en même temps le contenu exact de l'Item concerné, en précisant les types de données introduits.

Cela ne devrait prendre que quelques lignes, et c'est une question à laquelle on devrait pouvoir répondre.

en faite je t'explique ce que je veux faire:

1) importer les paramètres de calcul de la CVA des différents fichiers .csv

2) les stocker dans l'item du dictionnaire qui est un tableau de scalaires et de vecteurs colonnes.

3) faire le calcul de la CVA en appelant ces différentes paramétres du dictionnaire.

4) les écrire sur une feuille excel.

Ça tu l'as déjà dis. Je ne sais ce qu'est la CVA...

Ton Item est un tableau, tu extrais l'élément d'indice qui convient. Si cet élément est également un tableau, tu appelles l'élément de ce tableau avec son indice.

Soit à viser le 2e élément du 2e élément de l'item : d(xx)(1)(1)

si ton vecteur colonne est à une dimension...

Mais à ce stade, si tu dois faire un calcul, c'est qu'il s'agit de nombre, qu'il faut donc convertir en nombre !

MaintenantJ'ai bien compris ta réponse par rapports a l'accès des élément merci beaucoup , par contre j'ai pas compris pourquoi la conversion tu peux stp m'expliquer je suis pas un expert e. Vba il y même pas 1 mois que j'ai commencé a apprendre le vba sachant que projet contien beaucoup de détails .


La j'ai compris l'accès au elements des éléments je ten remercie.par contre j'ai pas compris la notion de conversion il y a juste un mois que j'ai commencé a apprendre le vba tu peux meclaircir stp.

Parce que les éléments d'un dico sont de type String.

Seules les clés qui sont string les items sont des tableau de doubledans le cas scalaire ou des doubles dans le vecteur colonne contenu dans le tableau

Tu essaies ! Si ça marche, très bien. Sinon tu convertiras...

Merci beaucoup de m'avoir accordé ce temps précieux

Rechercher des sujets similaires à "acces element valeur dictionnaire"