Utilisation de Collection ou Dictionnaire

spluiss Messages postés 27 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 4 avril 2013 - 2 avril 2013 à 15:40
spluiss Messages postés 27 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 4 avril 2013 - 3 avril 2013 à 09:06
Bonjour à tous,

Je cherche à ranger convenablement des données en provenance d'un fichier. Ce fichier se présentent sous forme de colonne. La première ligne me donne le nom des grandeurs, la deuxième les unités suivi des données. La première colonne étant la base de temps ou frequence, les suivantes les mesures.

Je parviens à récupérer toutes ces données et je souhaite les ranger pour les retrouver aisemment. Le but? l'utilisateur souhaite visualiser une listbox avec le nom des mesures et sélectionner celle dont il veut consulter les infos.

Je souhaite utiliser un dictionnaire ou une collection à deux niveaux (excusez mon faible vocabulaire informatique). Au premier niveau, les clés sont les noms des mesures, identiques aux noms de la listbox (j'atteind ainsi la bonne donnée). Au second niveau les clés "Name", "Xunit", "Xdata", "Yunit", "Ydata".

Voici les codes que j'ai tenté, qui interviennent pour ranger les éléments issus du fichier :

dim dDictDatas
set dDictDatas = CreateObject(Scripting.Dictionary)
for i=0 to iNbVal
dim dDictData
set dDictData = CreateObject(Scripting.Dictionary)
dDictData.Add "Name", sName
dDictData.Add "Xunit" = Xunit
dDictData.Add "Xdata", Xdata
dDictData.Add "Yunit" = Yunit
dDictData.Add "Ydata", Ydata
dDictDatas.Add sName, dDictData
next


dim cDictDatas as collection
set cDictDatas = new collection
for i=0 to iNbVal
dim cDictDatas as collection
set cDictDatas = new collection
cDictData.Add Item:= sName, Key "Name"
cDictData.Add Item:= Xunit, Key "Xunit"
cDictData.Add Item:= Xdata, Key "Xdata"
cDictData.Add Item:= Yunit, Key "Yunit"
cDictData.Add Item:= Ydata, Key "Ydata"
cDictDatas.Add Item:=cDictData, Key:=sName
next

Dans les deux cas, les dictionnaires ou collections sont créées, j'arrive à les visualiser avec l'espion de variable
J'arrive aussi à afficher les valeurs de cDictData avec des msgbox
ex : msgbox(dDictData("Name")) renvoi le bon nom.

Le problème vient quand je veux récupérer les données. Au cliquage d'une ligne dans la liste je veux récupérer les bonnes données :
sName = listbox.text
dim DictData
set DictData = CreateObject(Scripting.Dictionary)
ou
dim DictData as collection
set DictData = new collection

à la ligne
dDictData = dDictDatas(sName)

J'ai le message d'erreur :
erreur d'execution 450
nombre d'argument incorrect ou affectation de propriété incorrecte.

Désolé, j'ai pensé trop simplement que le contenu de l'un allait facilement se transférer au second et à présent je ne trouve pas de solution.

Pourriez vous me dire si ce double rangement est autorisé? quel objet est le mieux à utiliser (collection ou dictionnaire)? et comment récupérer les données de la bonne variable?

D'avance merci à tous et merci à ceux qui ont lu toute cette tartine et me répondront.
Bonne continuation à tous.

Spluiss

4 réponses

Bonjour spluiss.

La ligne de code
set cDictDatas = new collection

me donne à penser que vous travaillez en vb6, et non pas en vb net, section du forum dans laquelle vous avez posté votre demande. Attendez-vous donc à être déplacé.
Par ailleurs, il vous est demandé de mettre votre code en coloration syntaxique (troisième icône à partir de la droite).


Cordialement.



Étant illettré, je signe d'une croix : ×
0
Utilisateur anonyme
2 avril 2013 à 20:58
Bonjour,

Si tu es vraiment en VB.net fait disparaître à tout jamais ton Scripting.dictionary et tout ce qui peut ressembler à FSO. Le Framework contient tout ce dont tu as besoin sans devoir recourir à ces antiquités.

Et puis, tu pourrais utiliser avec profit un DataSet et une (des) table(s) de données. Nul besoin de les "brancher" à une source de données externes pour en tirer profit. De plus cela facilitera l'évolution du programme quand le prochain patron, ou le patron actuel en voudra plus.

Si tu es en VB6, c'est une autre histoire. Quoi qu'il en soit, il serait préférable que tu confirmes la version de VB avant toute chose.
0
spluiss Messages postés 27 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 4 avril 2013
3 avril 2013 à 08:53
Bonjour à tous,

En effet, je n'ai pas bien fait attention, je n'ai pas précisé la bonne version c'est en VB6. Je vous prie de bien vouloir m'excuser pour cette grossière erreur.

Je vais arranger ça...

Merci

Spluiss
0
spluiss Messages postés 27 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 4 avril 2013
3 avril 2013 à 09:06
Bonjour,

J'ai reposté la question avec la bonne version et les colorations syntaxiques.
Merci pour vos conseils.
Bonne continuation

Spluiss
0
Rejoignez-nous