Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.
 

dg62

XLDnaute Barbatruc
Bonsoir Hervé, Pascal


ta key est bien l'index

macollection(1) key = 1

for i = 1 to macollection.count

range('a' & i)= macollection(i)
range('b' & i)= i 'key

next i

je ne vois pas autrement.
 

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
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re

Oups excuse Hervé. Comme ton clone avait posté sur le dictionnary j'ai pensé que les 2 questions parlaient du même sujet sans voir qu'ici tu parlais de collection.

Bonne journée à toi
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…