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 - 3 avril 2013 à 09:04
spluiss Messages postés 27 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 4 avril 2013 - 4 avril 2013 à 12:53
Bonjour à tous,

Je dois réaliser un programme en VB6 afin de récupérer des données d'un fichier ASCII pour en consulter les informations.

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.
Merci également à ceux qui m'ont déjà aidé sur un précédent forum et en désolé pour mon erreur de fonctionnement du forum.

Bonne continuation à tous.

Spluiss

16 réponses

Bonjour Spluiss.
Je n'arrive pas à croire que vous ayez pu exécuter le code suivant :
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 

En effet
1) Aux lignes 4 et 5, vous avez probablement voulu mettre cDictData et non pas cDictDatas.
2) Vb6 aurait mal digéré un next sans i.
3) Vb6 aurait mis des majuscules et des espaces là où il veut qu'il y en ait.

En conséquence, je vous prie de nous redonner votre code par un copier-coller, après l'avoir testé.

Cordialement.




Étant illettré, je signe d'une croix : ×
0
Rejoignez-nous