VBA récupérer les key d'une collection

Hervé

XLDnaute Barbatruc
Bonjour tout le monde

a moi un peu de poser une série de question. :)

la premiere ici :

une collection est composé d'un item et d'une clé(key) unique

macollection.add monitem, makey

ce code alimente une collection avec un élément (monitem) et ayant pour clé(key)


range('a1')=macollection.item(1)

se code me renvoi en A1 le premier élément de la collection.

je voudrais non pas l'item en a1, mais la clé.

j'ai essayé : range('a1').key(1) BOUM retour dans les cordes.

auriez vous une syntaxe à me proposer ?

d'avance je vous remercie.

salut

ps : la deuxieme question suit.
 

Ti_

Nous a quitté
Repose en paix
Salut

Je suis également un grand utilisateur de collections, et j'ai été confronté plus d'une fois à ces problèmes de clés que j'aurais aimé pouvoir récupérer. Hélas, ce n'est pas possible, sauf à créer deux collections croisées, la deuxième indexée sur la première et renvoyant la même valeur item/index. Solution un peu lourde mais qui, il est vrai, m'a économisé une fois ou deux un peu de temps et quelques lignes de code.

Tiens, pendant que j'y suis, une petite astuce, n'utilisez pas de boucle du genre :
For i = 1 to Col.Count
Next i

il est bien plus rapide de procéder comme suit :
Dim Elt
For Each Elt in Col
'...
Next Elt

Et allez tiens, je vous en rajoute une autre. Cette syntaxe fonctionne également avec un Array, qui fonctionne alors comme une collection. Ainsi on peut très bien écrire :

Dim Elt
For Each Elt in Array(ListBox1, ListBox2, ListBox3)
'...
Next Elt

On a là au passage un exemple qu'une variable de type Variant (ce qu'est la variable Elt) peut conduire à une boucle bien plus rapide que si on avait utilisé un index de type Integer ou Long. Comme quoi il ne faut pas toujours mépriser ces Variant.

Message édité par: Ti_, à: 19/04/2006 18:44

Message édité par: Ti_, à: 19/04/2006 18:46
 

Hervé

XLDnaute Barbatruc
bonjour tout le monde

pascal :) attention, ne confondons pas une collection et un dictionnary.

dans un dictionnary, on peut récupérer les clés :


'nécessite la référence : Microsoft scripting runtime
Dim data As New Dictionary
Dim element

data.Add 'cle', 'toto'

'on récupère la clé
For Each element In data.Keys
        MsgBox element
Next element


chose que l'on ne peut pas faire avec une collection :


Dim data As New Collection

data.Add 'item', 'cle'

'on récupère que l'item
MsgBox data(1)

didier, non, la clé n'est pas l'index de la collection, c'est un string.

ti, j'ai bien peur que tu ai raison (comme d'hab), je retiens l'idée de la double collection croisé, ca fera déjà moins usine à gaz que ma méthode (utilisation d'une variable tableau en parrallèle de la collection).

merci à vous trois pour vos etes penché sur mon souci.

salut
 

Discussions similaires

Statistiques des forums

Discussions
312 345
Messages
2 087 477
Membres
103 553
dernier inscrit
jhnm