Bonjour,
J'ai une collection. Je voudrais changer des valeur et les remplacer au même endroit; comment faut-il faire?
Merci d'avance.
Version imprimable
Bonjour,
J'ai une collection. Je voudrais changer des valeur et les remplacer au même endroit; comment faut-il faire?
Merci d'avance.
Bonjour,
Le concept de collection en Visual basic [6] est un mix entre la stack (LIFO) et la liste chaînée que nous connaissons tous.
La collection gère chaque élément par défaut avec un index numérique, depuis 0 jusqu'à ubound(collection), tandis que tu peux également lui spécifier un index alphanumérique.
Cela permet notamment d'accéder aux éléments de la façon suivante :
Ceci retournant une erreur si l'index demandé n'existe pas.Code:
1
2 mavaleur = collection(cléalpha) mavaleur = collection.item(cléalpha)
De même, il est possible d'éliminer ou d'ajouter les éléments par leur clé :
Tu vois donc qu'il est aisé de simuler un ordre dans une collection tel que tu l'envisages, même si elle n'est pas du tout faite pour cela. En effet, lorsqu'on utilise les tableaux, il est aisé de s'imaginer le même type de fonctionnement lorsqu'on passe aux collections alors qu'elles sont fondamentalement différentes.Code:
1
2 collection.remove(cléalpha) collection.item(cléalpha) = mavaleur
peut-on avoir la clé pour une valeur donnée
je voudrais changer une valeur d'une collection avec une nouvelle valeur mais à la même place.
Comment faire svp
Il y a index, remove....je suis perdu....
si dans ta collection, tu as un élément x tel que maCol.item(i) = x
et que tu souhaites le remplacer par y, alors il faut faire maCol.item(i) = y.
Si tu n'as pas i, tu ne peux pas et ne pourras pas le faire (impossible de reverser les clés d'une collection à ma connaissance)
Salut vld44
Je ne connais pas <<object Dictionary>>.
Peux tu me donner quelques pistes où je pourrais trouver de l'info la dessus ?
Bonjour Delbeke,
Je me suis mal exprimé, je parlais de la classe Dictionary.
On la trouve en activant la référence à "Microsoft Scripting Runtime" [scrrun.dll] puis en instanciant la classe Dictionary.
On a alors, en contrepartie de l'impossibilité de boucler avec for each, moyen d'obtenir le tableau des valeur (dictionary.items(index)) ou le tableau des clés (dictionary.keys(index))
A ton/votre service pour plus d'infos.
Je viens de regarder, très interressant. merci pour l'info.
Alors que faire avec une collection pour remplacer une valeur à un indice i: impossible avec?
Il faut passser par les dictionnary
Merci d'avance.
collection(i) = nouvelle valeur
Il gère indifféremment les clés alpha et les index numériques dans les parenthèses.
i peut être aussi bien une clé (hash) ou un index numérique (0 => n)
9a ne marche pas:
erreur: "objet reccquis"
J'abandonne.
Je veux changer une valeur:
ne pas la rajouter à la fin de la liste, juste au même endroit que l'ancienne valeur
Je suis sur le problème depuis 14h
J'ai relu completement le post. Tout ce qui a été repondu devrait résouldre le problème, sauf si nous sommes en quiproco.
Montres nous un peu de ton code.
La partie qui declare la collection et la partie permettant l'ajout de donnes dans ta collection serait un bon début.
De façon générale, un exemple du code déjà écrit est comme un bon dessin, ca vaut mieux qu'un long discours
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Dim MyCollection As Collection Dim MyCollection_temp As Collection Private Sub Command1_Click() v = "tata" Set MyCollection = New Collection 'Suppression et instanciation de la collection MyCollection MyCollection.Add "tata" MyCollection.Add "titi" MyCollection.Add "toto" Text1 = MyCollection.Item(1) End Sub Private Sub Command2_Click() MyCollection.Remove (2) MyCollection.Add Item:="ex", Key:=CStr(2) End Sub
"ex" devrait être à la place 2 donc de titi mais il est à la fin
ok, pour info il vaut mieux développer avec "option explicit" en haut de chacun de tes modules, form, classes ... Ca évite les étourderies. Tu as une option dans vb qui l'ajoute pour toi systématiquement dans les nouveaux modules.
Par rapport à ton souci, je pense que tu n'es pas obligé de supprimer l'élément avant de l'affecter.
D'autre part, si tu lui passes un CSTR() c'est une string donc une clé hash, ce qui est différent d'un index numérique (il me semble)
Essaye avec à la place de
ça :Code:
1
2 MyCollection.Remove (2) MyCollection.Add Item:="ex", Key:=CStr(2)
PS : par quoi est remplit Text1 dans ton code ?Code:MyCollection.Add "ex", 2
ça ne marche pas tout ce code:(
Code:
1
2
3
4
5 MyCollection.Remove (2) MyCollection.Add Item:="ex", Key:=CStr(2) MyCollection.Add "ex", 2