Dans une collection vb, je souhaiterais récupérer la clé des items. Exemple
:
dim col as Collection
col("k1")="a"
col("k2")="b"
....
for each k in col
'ici k vaut "a", "b", ......
'et je souhaiterais récupérer "k1", "k2", ....
next
Le for each donne l'élément lui-même et non pas sa clé (en vbscript on
récupère la clé).
Comment faire pour avoir la clé à partir de l'élément ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gloops
Salut,
Je n'ai pas connaissance que ça soit prévu, donc à moins de créer une deuxième collection qui inverse les rôles entre clef et valeur (et faire attention de bien synchroniser les modifications), tu ne couperas pas à une boucle du style :
Function Renverse(Refer As String) As String For Each Item in col If Item.value = refer Then Renverse = Item.Key Exit Function End If Next End Function
A moins que quelqu'un sache créer un index sur une collection ? _____________________________________ Pierre a écrit, le 24/10/2005 09:32 :
Bonjour,
Dans une collection vb, je souhaiterais récupérer la clé des items. Exemple :
dim col as Collection col("k1")="a" col("k2")="b" .... for each k in col 'ici k vaut "a", "b", ...... 'et je souhaiterais récupérer "k1", "k2", .... next
Le for each donne l'élément lui-même et non pas sa clé (en vbscript on récupère la clé).
Comment faire pour avoir la clé à partir de l'élément ?
Merci. Cordialement.
Pierre.
Salut,
Je n'ai pas connaissance que ça soit prévu, donc à moins de créer une
deuxième collection qui inverse les rôles entre clef et valeur (et faire
attention de bien synchroniser les modifications), tu ne couperas pas à
une boucle du style :
Function Renverse(Refer As String) As String
For Each Item in col
If Item.value = refer Then
Renverse = Item.Key
Exit Function
End If
Next
End Function
A moins que quelqu'un sache créer un index sur une collection ?
_____________________________________
Pierre a écrit, le 24/10/2005 09:32 :
Bonjour,
Dans une collection vb, je souhaiterais récupérer la clé des items. Exemple
:
dim col as Collection
col("k1")="a"
col("k2")="b"
....
for each k in col
'ici k vaut "a", "b", ......
'et je souhaiterais récupérer "k1", "k2", ....
next
Le for each donne l'élément lui-même et non pas sa clé (en vbscript on
récupère la clé).
Comment faire pour avoir la clé à partir de l'élément ?
Je n'ai pas connaissance que ça soit prévu, donc à moins de créer une deuxième collection qui inverse les rôles entre clef et valeur (et faire attention de bien synchroniser les modifications), tu ne couperas pas à une boucle du style :
Function Renverse(Refer As String) As String For Each Item in col If Item.value = refer Then Renverse = Item.Key Exit Function End If Next End Function
A moins que quelqu'un sache créer un index sur une collection ? _____________________________________ Pierre a écrit, le 24/10/2005 09:32 :
Bonjour,
Dans une collection vb, je souhaiterais récupérer la clé des items. Exemple :
dim col as Collection col("k1")="a" col("k2")="b" .... for each k in col 'ici k vaut "a", "b", ...... 'et je souhaiterais récupérer "k1", "k2", .... next
Le for each donne l'élément lui-même et non pas sa clé (en vbscript on récupère la clé).
Comment faire pour avoir la clé à partir de l'élément ?
Merci. Cordialement.
Pierre.
Patrice Henrio
Je vais peut-être dire une bêtise mais pourquoi ne pas faire cela
Dim TKey() as string, Tvalue() as string, V as object, Index as long
Index=1 Redim TKey(1 to Col.count) Redim Tvalue(1 to Col.Count) For each V in Col Tkey(Index)=V.key TValue(Index)=V.value Next
"Gloops" a écrit dans le message de news: 435cca37$0$27421$
Salut,
Je n'ai pas connaissance que ça soit prévu, donc à moins de créer une deuxième collection qui inverse les rôles entre clef et valeur (et faire attention de bien synchroniser les modifications), tu ne couperas pas à une boucle du style :
Function Renverse(Refer As String) As String For Each Item in col If Item.value = refer Then Renverse = Item.Key Exit Function End If Next End Function
A moins que quelqu'un sache créer un index sur une collection ? _____________________________________ Pierre a écrit, le 24/10/2005 09:32 :
Bonjour,
Dans une collection vb, je souhaiterais récupérer la clé des items. Exemple :
dim col as Collection col("k1")="a" col("k2")="b" .... for each k in col 'ici k vaut "a", "b", ...... 'et je souhaiterais récupérer "k1", "k2", .... next
Le for each donne l'élément lui-même et non pas sa clé (en vbscript on récupère la clé).
Comment faire pour avoir la clé à partir de l'élément ?
Merci. Cordialement.
Pierre.
Je vais peut-être dire une bêtise mais pourquoi ne pas faire cela
Dim TKey() as string, Tvalue() as string, V as object, Index as long
Index=1
Redim TKey(1 to Col.count)
Redim Tvalue(1 to Col.Count)
For each V in Col
Tkey(Index)=V.key
TValue(Index)=V.value
Next
"Gloops" <gloops@niark.fr> a écrit dans le message de news:
435cca37$0$27421$8fcfb975@news.wanadoo.fr...
Salut,
Je n'ai pas connaissance que ça soit prévu, donc à moins de créer une
deuxième collection qui inverse les rôles entre clef et valeur (et faire
attention de bien synchroniser les modifications), tu ne couperas pas à
une boucle du style :
Function Renverse(Refer As String) As String
For Each Item in col
If Item.value = refer Then
Renverse = Item.Key
Exit Function
End If
Next
End Function
A moins que quelqu'un sache créer un index sur une collection ?
_____________________________________
Pierre a écrit, le 24/10/2005 09:32 :
Bonjour,
Dans une collection vb, je souhaiterais récupérer la clé des items.
Exemple :
dim col as Collection
col("k1")="a"
col("k2")="b"
....
for each k in col
'ici k vaut "a", "b", ......
'et je souhaiterais récupérer "k1", "k2", ....
next
Le for each donne l'élément lui-même et non pas sa clé (en vbscript on
récupère la clé).
Comment faire pour avoir la clé à partir de l'élément ?
Je vais peut-être dire une bêtise mais pourquoi ne pas faire cela
Dim TKey() as string, Tvalue() as string, V as object, Index as long
Index=1 Redim TKey(1 to Col.count) Redim Tvalue(1 to Col.Count) For each V in Col Tkey(Index)=V.key TValue(Index)=V.value Next
"Gloops" a écrit dans le message de news: 435cca37$0$27421$
Salut,
Je n'ai pas connaissance que ça soit prévu, donc à moins de créer une deuxième collection qui inverse les rôles entre clef et valeur (et faire attention de bien synchroniser les modifications), tu ne couperas pas à une boucle du style :
Function Renverse(Refer As String) As String For Each Item in col If Item.value = refer Then Renverse = Item.Key Exit Function End If Next End Function
A moins que quelqu'un sache créer un index sur une collection ? _____________________________________ Pierre a écrit, le 24/10/2005 09:32 :
Bonjour,
Dans une collection vb, je souhaiterais récupérer la clé des items. Exemple :
dim col as Collection col("k1")="a" col("k2")="b" .... for each k in col 'ici k vaut "a", "b", ...... 'et je souhaiterais récupérer "k1", "k2", .... next
Le for each donne l'élément lui-même et non pas sa clé (en vbscript on récupère la clé).
Comment faire pour avoir la clé à partir de l'élément ?
Merci. Cordialement.
Pierre.
Gloops
Patrice Henrio a écrit, le 24/10/2005 15:22 :
Index=1 Redim TKey(1 to Col.count) Redim Tvalue(1 to Col.Count) For each V in Col Tkey(Index)=V.key TValue(Index)=V.value Next
Oh, j'étais parti sur une deuxième collection ... Tu veux dire deux tableaux, simplement ?
D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à part le parcourir dans une boucle, bien entendu, mais alors autant en revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500 réponses.
Patrice Henrio a écrit, le 24/10/2005 15:22 :
Index=1
Redim TKey(1 to Col.count)
Redim Tvalue(1 to Col.Count)
For each V in Col
Tkey(Index)=V.key
TValue(Index)=V.value
Next
Oh, j'étais parti sur une deuxième collection ...
Tu veux dire deux tableaux, simplement ?
D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à
part le parcourir dans une boucle, bien entendu, mais alors autant en
revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait
FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500
réponses.
Index=1 Redim TKey(1 to Col.count) Redim Tvalue(1 to Col.Count) For each V in Col Tkey(Index)=V.key TValue(Index)=V.value Next
Oh, j'étais parti sur une deuxième collection ... Tu veux dire deux tableaux, simplement ?
D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à part le parcourir dans une boucle, bien entendu, mais alors autant en revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500 réponses.
Patrice Henrio
Oui effectivement car c'est vrai que le problème de départ c'est retrouvé la clé connaissant la valeur donc une collection dans l'autre sens value/key au lieu de key/value. Un problème existera si plusieurs clés ont la même valeur ...
"Gloops" a écrit dans le message de news: 435ce86b$0$27430$
Patrice Henrio a écrit, le 24/10/2005 15:22 :
Index=1 Redim TKey(1 to Col.count) Redim Tvalue(1 to Col.Count) For each V in Col Tkey(Index)=V.key TValue(Index)=V.value Next
Oh, j'étais parti sur une deuxième collection ... Tu veux dire deux tableaux, simplement ?
D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à part le parcourir dans une boucle, bien entendu, mais alors autant en revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500 réponses.
Oui effectivement car c'est vrai que le problème de départ c'est retrouvé
la clé connaissant la valeur donc une collection dans l'autre sens value/key
au lieu de key/value. Un problème existera si plusieurs clés ont la même
valeur ...
"Gloops" <gloops@niark.fr> a écrit dans le message de news:
435ce86b$0$27430$8fcfb975@news.wanadoo.fr...
Patrice Henrio a écrit, le 24/10/2005 15:22 :
Index=1
Redim TKey(1 to Col.count)
Redim Tvalue(1 to Col.Count)
For each V in Col
Tkey(Index)=V.key
TValue(Index)=V.value
Next
Oh, j'étais parti sur une deuxième collection ...
Tu veux dire deux tableaux, simplement ?
D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à
part le parcourir dans une boucle, bien entendu, mais alors autant en
revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait
FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500
réponses.
Oui effectivement car c'est vrai que le problème de départ c'est retrouvé la clé connaissant la valeur donc une collection dans l'autre sens value/key au lieu de key/value. Un problème existera si plusieurs clés ont la même valeur ...
"Gloops" a écrit dans le message de news: 435ce86b$0$27430$
Patrice Henrio a écrit, le 24/10/2005 15:22 :
Index=1 Redim TKey(1 to Col.count) Redim Tvalue(1 to Col.Count) For each V in Col Tkey(Index)=V.key TValue(Index)=V.value Next
Oh, j'étais parti sur une deuxième collection ... Tu veux dire deux tableaux, simplement ?
D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à part le parcourir dans une boucle, bien entendu, mais alors autant en revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500 réponses.
Gloops
Effectivement. Là il reste la solution d'un tableau avec une dimension de plus, qu'on va parcourir avec une boucle. C'est plus lourd à mettre en oeuvre qu'une requête SQL dans une base, mais probablement plus rapide, sauf si la base passe par un cache efficace.
Si on fait un tableau avec plusieurs dimensions, je suppose que la dimension d'indice doit être dimensionnée au plus grand nombre de valeurs par clef, plus une qui indique le nombre de valeurs renseignées. A moins de parcourir toutes les valeurs et de ne retenir celles qui ne sont pas Null, reste à voir ce qui est le plus rapide. _____________________________________________ Patrice Henrio a écrit, le 24/10/2005 23:02 :
Oui effectivement car c'est vrai que le problème de départ c'est retrouvé la clé connaissant la valeur donc une collection dans l'autre sens value/key au lieu de key/value. Un problème existera si plusieurs clés ont la même valeur ...
"Gloops" a écrit dans le message de news: 435ce86b$0$27430$
Oh, j'étais parti sur une deuxième collection ... Tu veux dire deux tableaux, simplement ?
D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à part le parcourir dans une boucle, bien entendu, mais alors autant en revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500 réponses.
Effectivement. Là il reste la solution d'un tableau avec une dimension
de plus, qu'on va parcourir avec une boucle. C'est plus lourd à mettre
en oeuvre qu'une requête SQL dans une base, mais probablement plus
rapide, sauf si la base passe par un cache efficace.
Si on fait un tableau avec plusieurs dimensions, je suppose que la
dimension d'indice doit être dimensionnée au plus grand nombre de
valeurs par clef, plus une qui indique le nombre de valeurs renseignées.
A moins de parcourir toutes les valeurs et de ne retenir celles qui ne
sont pas Null, reste à voir ce qui est le plus rapide.
_____________________________________________
Patrice Henrio a écrit, le 24/10/2005 23:02 :
Oui effectivement car c'est vrai que le problème de départ c'est retrouvé
la clé connaissant la valeur donc une collection dans l'autre sens value/key
au lieu de key/value. Un problème existera si plusieurs clés ont la même
valeur ...
"Gloops" <gloops@niark.fr> a écrit dans le message de news:
435ce86b$0$27430$8fcfb975@news.wanadoo.fr...
Oh, j'étais parti sur une deuxième collection ...
Tu veux dire deux tableaux, simplement ?
D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à
part le parcourir dans une boucle, bien entendu, mais alors autant en
revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait
FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500
réponses.
Effectivement. Là il reste la solution d'un tableau avec une dimension de plus, qu'on va parcourir avec une boucle. C'est plus lourd à mettre en oeuvre qu'une requête SQL dans une base, mais probablement plus rapide, sauf si la base passe par un cache efficace.
Si on fait un tableau avec plusieurs dimensions, je suppose que la dimension d'indice doit être dimensionnée au plus grand nombre de valeurs par clef, plus une qui indique le nombre de valeurs renseignées. A moins de parcourir toutes les valeurs et de ne retenir celles qui ne sont pas Null, reste à voir ce qui est le plus rapide. _____________________________________________ Patrice Henrio a écrit, le 24/10/2005 23:02 :
Oui effectivement car c'est vrai que le problème de départ c'est retrouvé la clé connaissant la valeur donc une collection dans l'autre sens value/key au lieu de key/value. Un problème existera si plusieurs clés ont la même valeur ...
"Gloops" a écrit dans le message de news: 435ce86b$0$27430$
Oh, j'étais parti sur une deuxième collection ... Tu veux dire deux tableaux, simplement ?
D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à part le parcourir dans une boucle, bien entendu, mais alors autant en revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500 réponses.
Jean-Marc
Hello,
si la mémoire n'est pas un problème, alors il est simple de gérer ça avec 2 hash tables pour les paires "clefs/valeurs" et un tableau de valeurs (+ un second pour la gestion des collisions). Ca demanderait 30 minutes de réflexion, ensuite le codage devrait être assez aisé.
Points faibles -------------- - Duplication (partielle) des données - Nécessité de synchroniser les 2 tables en cas d'ajout, suppression, etc. - Place en mémoire
Points forts ------------ - Performances imbattables (plus rapide, tu meurs :-) ) - Extensible pour faire plein de choses amusantes - Très réutilisable
Hop, au boulot !
-- Jean-marc Tester mon serveur (VB6) => http://myjmnhome.dyndns.org "There are only 10 kind of people those who understand binary and those who don't." mailto: remove '_no_spam_' ;
"Gloops" a écrit dans le message de news:435ecf87$0$5405$
Effectivement. Là il reste la solution d'un tableau avec une dimension de plus, qu'on va parcourir avec une boucle. C'est plus lourd à mettre en oeuvre qu'une requête SQL dans une base, mais probablement plus rapide, sauf si la base passe par un cache efficace.
Si on fait un tableau avec plusieurs dimensions, je suppose que la dimension d'indice doit être dimensionnée au plus grand nombre de valeurs par clef, plus une qui indique le nombre de valeurs renseignées. A moins de parcourir toutes les valeurs et de ne retenir celles qui ne sont pas Null, reste à voir ce qui est le plus rapide. _____________________________________________ Patrice Henrio a écrit, le 24/10/2005 23:02 :
> Oui effectivement car c'est vrai que le problème de départ c'est
retrouvé
> la clé connaissant la valeur donc une collection dans l'autre sens
value/key
> au lieu de key/value. Un problème existera si plusieurs clés ont la même > valeur ... > > > "Gloops" a écrit dans le message de news: > 435ce86b$0$27430$ > >>Oh, j'étais parti sur une deuxième collection ... >>Tu veux dire deux tableaux, simplement ? >> >>D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à >>part le parcourir dans une boucle, bien entendu, mais alors autant en >>revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait >>FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500 >>réponses. >> > > >
Hello,
si la mémoire n'est pas un problème, alors il est simple
de gérer ça avec 2 hash tables pour les paires "clefs/valeurs"
et un tableau de valeurs (+ un second pour la gestion des collisions).
Ca demanderait 30 minutes de réflexion, ensuite le codage devrait
être assez aisé.
Points faibles
--------------
- Duplication (partielle) des données
- Nécessité de synchroniser les 2 tables en cas d'ajout, suppression, etc.
- Place en mémoire
Points forts
------------
- Performances imbattables (plus rapide, tu meurs :-) )
- Extensible pour faire plein de choses amusantes
- Très réutilisable
Hop, au boulot !
--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
"Gloops" <gloops@niark.fr> a écrit dans le message de
news:435ecf87$0$5405$8fcfb975@news.wanadoo.fr...
Effectivement. Là il reste la solution d'un tableau avec une dimension
de plus, qu'on va parcourir avec une boucle. C'est plus lourd à mettre
en oeuvre qu'une requête SQL dans une base, mais probablement plus
rapide, sauf si la base passe par un cache efficace.
Si on fait un tableau avec plusieurs dimensions, je suppose que la
dimension d'indice doit être dimensionnée au plus grand nombre de
valeurs par clef, plus une qui indique le nombre de valeurs renseignées.
A moins de parcourir toutes les valeurs et de ne retenir celles qui ne
sont pas Null, reste à voir ce qui est le plus rapide.
_____________________________________________
Patrice Henrio a écrit, le 24/10/2005 23:02 :
> Oui effectivement car c'est vrai que le problème de départ c'est
retrouvé
> la clé connaissant la valeur donc une collection dans l'autre sens
value/key
> au lieu de key/value. Un problème existera si plusieurs clés ont la même
> valeur ...
>
>
> "Gloops" <gloops@niark.fr> a écrit dans le message de news:
> 435ce86b$0$27430$8fcfb975@news.wanadoo.fr...
>
>>Oh, j'étais parti sur une deuxième collection ...
>>Tu veux dire deux tableaux, simplement ?
>>
>>D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à
>>part le parcourir dans une boucle, bien entendu, mais alors autant en
>>revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait
>>FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500
>>réponses.
>>
>
>
>
si la mémoire n'est pas un problème, alors il est simple de gérer ça avec 2 hash tables pour les paires "clefs/valeurs" et un tableau de valeurs (+ un second pour la gestion des collisions). Ca demanderait 30 minutes de réflexion, ensuite le codage devrait être assez aisé.
Points faibles -------------- - Duplication (partielle) des données - Nécessité de synchroniser les 2 tables en cas d'ajout, suppression, etc. - Place en mémoire
Points forts ------------ - Performances imbattables (plus rapide, tu meurs :-) ) - Extensible pour faire plein de choses amusantes - Très réutilisable
Hop, au boulot !
-- Jean-marc Tester mon serveur (VB6) => http://myjmnhome.dyndns.org "There are only 10 kind of people those who understand binary and those who don't." mailto: remove '_no_spam_' ;
"Gloops" a écrit dans le message de news:435ecf87$0$5405$
Effectivement. Là il reste la solution d'un tableau avec une dimension de plus, qu'on va parcourir avec une boucle. C'est plus lourd à mettre en oeuvre qu'une requête SQL dans une base, mais probablement plus rapide, sauf si la base passe par un cache efficace.
Si on fait un tableau avec plusieurs dimensions, je suppose que la dimension d'indice doit être dimensionnée au plus grand nombre de valeurs par clef, plus une qui indique le nombre de valeurs renseignées. A moins de parcourir toutes les valeurs et de ne retenir celles qui ne sont pas Null, reste à voir ce qui est le plus rapide. _____________________________________________ Patrice Henrio a écrit, le 24/10/2005 23:02 :
> Oui effectivement car c'est vrai que le problème de départ c'est
retrouvé
> la clé connaissant la valeur donc une collection dans l'autre sens
value/key
> au lieu de key/value. Un problème existera si plusieurs clés ont la même > valeur ... > > > "Gloops" a écrit dans le message de news: > 435ce86b$0$27430$ > >>Oh, j'étais parti sur une deuxième collection ... >>Tu veux dire deux tableaux, simplement ? >> >>D'ailleurs, je sèche sur comment faire une recherche dans un tableau (à >>part le parcourir dans une boucle, bien entendu, mais alors autant en >>revenir à ma première réponse). Ce que j'ai trouvé dans MSDN concernait >>FoxPro, mais c'est vrai que je n'ai pas intégralement épluché les 500 >>réponses. >> > > >
Pierre
Hello
En fait, j'ai trouvé deux solutions :
1°) en restant dans les collections vba : faire une collection de collection chaque sous collection contenant l'élément et la clé ainsi :
for each E in COL 'E est la sous collection key = E("KEY") element = E("ELEMENT") next
2°) En utilisant comme en vbscript l'objet scripting.dictionnary qui est très pratique puisque le for each renvoie la clé et non l'élément for each K in DIC key = K element = DIC(K) next
J'ai mis en oeuvre la première solution pour rester dans le vba de base car le scripting dictionnary nécessite wsh.
Pierre.
ajouter un élément "key" "Pierre" a écrit dans le message de news:
Bonjour,
Dans une collection vb, je souhaiterais récupérer la clé des items. Exemple :
dim col as Collection col("k1")="a" col("k2")="b" .... for each k in col 'ici k vaut "a", "b", ...... 'et je souhaiterais récupérer "k1", "k2", .... next
Le for each donne l'élément lui-même et non pas sa clé (en vbscript on récupère la clé).
Comment faire pour avoir la clé à partir de l'élément ?
Merci. Cordialement.
Pierre.
Hello
En fait, j'ai trouvé deux solutions :
1°) en restant dans les collections vba :
faire une collection de collection
chaque sous collection contenant l'élément et la clé
ainsi :
for each E in COL
'E est la sous collection
key = E("KEY")
element = E("ELEMENT")
next
2°) En utilisant comme en vbscript l'objet scripting.dictionnary qui est
très pratique
puisque le for each renvoie la clé et non l'élément
for each K in DIC
key = K
element = DIC(K)
next
J'ai mis en oeuvre la première solution pour rester dans le vba de base car
le scripting dictionnary nécessite wsh.
Pierre.
ajouter un élément "key"
"Pierre" <pierroozz@freesurf.fr> a écrit dans le message de news:
u8WJfzG2FHA.2792@tk2msftngp13.phx.gbl...
Bonjour,
Dans une collection vb, je souhaiterais récupérer la clé des items.
Exemple :
dim col as Collection
col("k1")="a"
col("k2")="b"
....
for each k in col
'ici k vaut "a", "b", ......
'et je souhaiterais récupérer "k1", "k2", ....
next
Le for each donne l'élément lui-même et non pas sa clé (en vbscript on
récupère la clé).
Comment faire pour avoir la clé à partir de l'élément ?
1°) en restant dans les collections vba : faire une collection de collection chaque sous collection contenant l'élément et la clé ainsi :
for each E in COL 'E est la sous collection key = E("KEY") element = E("ELEMENT") next
2°) En utilisant comme en vbscript l'objet scripting.dictionnary qui est très pratique puisque le for each renvoie la clé et non l'élément for each K in DIC key = K element = DIC(K) next
J'ai mis en oeuvre la première solution pour rester dans le vba de base car le scripting dictionnary nécessite wsh.
Pierre.
ajouter un élément "key" "Pierre" a écrit dans le message de news:
Bonjour,
Dans une collection vb, je souhaiterais récupérer la clé des items. Exemple :
dim col as Collection col("k1")="a" col("k2")="b" .... for each k in col 'ici k vaut "a", "b", ...... 'et je souhaiterais récupérer "k1", "k2", .... next
Le for each donne l'élément lui-même et non pas sa clé (en vbscript on récupère la clé).
Comment faire pour avoir la clé à partir de l'élément ?
Merci. Cordialement.
Pierre.
Gloops
Pierre a écrit, le 27/10/2005 08:48 :
for each E in COL 'E est la sous collection key = E("KEY") element = E("ELEMENT") next
Bonjour,
J'avoue que je n'ai pas bien compris.
Pierre a écrit, le 27/10/2005 08:48 :
for each E in COL
'E est la sous collection
key = E("KEY")
element = E("ELEMENT")
next
for each E in COL 'E est la sous collection key = E("KEY") element = E("ELEMENT") next
Bonjour,
J'avoue que je n'ai pas bien compris.
Pierre
En fait, COL est un collection de collections, ie les éléments de COL sont des collections. Et dans ces collections, on met deux éléments : le premier élément est la clé indexé sur "KEY" et le deuxième est le contenu indexé sur "ELEMENT". COL(E)("KEY")= la clé (qui en fait est un élément comme un autre) COL(E)("ELEMENT")=l'élément
Quand on crée COL, au lieu de faire simplement :
COL.add "mon texte","ma clé"
on fait :
set E = new Collection E.add "mon texte","ELEMENT" E.add "ma clé","KEY" COL.add E
voilà.
"Gloops" a écrit dans le message de news: 43607c9f$0$17243$
Pierre a écrit, le 27/10/2005 08:48 :
for each E in COL 'E est la sous collection key = E("KEY") element = E("ELEMENT") next
Bonjour,
J'avoue que je n'ai pas bien compris.
En fait, COL est un collection de collections, ie les éléments de COL sont
des collections.
Et dans ces collections, on met deux éléments : le premier élément est la
clé indexé sur "KEY" et le deuxième est le contenu indexé sur "ELEMENT".
COL(E)("KEY")= la clé (qui en fait est un élément comme un autre)
COL(E)("ELEMENT")=l'élément
Quand on crée COL, au lieu de faire simplement :
COL.add "mon texte","ma clé"
on fait :
set E = new Collection
E.add "mon texte","ELEMENT"
E.add "ma clé","KEY"
COL.add E
voilà.
"Gloops" <gloops@niark.fr> a écrit dans le message de news:
43607c9f$0$17243$8fcfb975@news.wanadoo.fr...
Pierre a écrit, le 27/10/2005 08:48 :
for each E in COL
'E est la sous collection
key = E("KEY")
element = E("ELEMENT")
next
En fait, COL est un collection de collections, ie les éléments de COL sont des collections. Et dans ces collections, on met deux éléments : le premier élément est la clé indexé sur "KEY" et le deuxième est le contenu indexé sur "ELEMENT". COL(E)("KEY")= la clé (qui en fait est un élément comme un autre) COL(E)("ELEMENT")=l'élément
Quand on crée COL, au lieu de faire simplement :
COL.add "mon texte","ma clé"
on fait :
set E = new Collection E.add "mon texte","ELEMENT" E.add "ma clé","KEY" COL.add E
voilà.
"Gloops" a écrit dans le message de news: 43607c9f$0$17243$
Pierre a écrit, le 27/10/2005 08:48 :
for each E in COL 'E est la sous collection key = E("KEY") element = E("ELEMENT") next
Bonjour,
J'avoue que je n'ai pas bien compris.
Gloops
Oui, en fait ça j'avais compris, merci, mais pour la recherche, on fait comment ? J'imagine que le but de la manoeuvre est de faciliter la recherche ? Enfin si j'ai bien compris le sujet du fil ... _____________________________________ Pierre a écrit, le 27/10/2005 10:37 :
En fait, COL est un collection de collections, ie les éléments de COL sont des collections. Et dans ces collections, on met deux éléments : le premier élément est la clé indexé sur "KEY" et le deuxième est le contenu indexé sur "ELEMENT". COL(E)("KEY")= la clé (qui en fait est un élément comme un autre) COL(E)("ELEMENT")=l'élément
Quand on crée COL, au lieu de faire simplement :
COL.add "mon texte","ma clé"
on fait :
set E = new Collection E.add "mon texte","ELEMENT" E.add "ma clé","KEY" COL.add E
voilà.
"Gloops" a écrit dans le message de news: 43607c9f$0$17243$
Pierre a écrit, le 27/10/2005 08:48 :
for each E in COL 'E est la sous collection key = E("KEY") element = E("ELEMENT") next
Bonjour,
J'avoue que je n'ai pas bien compris.
Oui, en fait ça j'avais compris, merci, mais pour la recherche, on fait
comment ? J'imagine que le but de la manoeuvre est de faciliter la
recherche ? Enfin si j'ai bien compris le sujet du fil ...
_____________________________________
Pierre a écrit, le 27/10/2005 10:37 :
En fait, COL est un collection de collections, ie les éléments de COL sont
des collections.
Et dans ces collections, on met deux éléments : le premier élément est la
clé indexé sur "KEY" et le deuxième est le contenu indexé sur "ELEMENT".
COL(E)("KEY")= la clé (qui en fait est un élément comme un autre)
COL(E)("ELEMENT")=l'élément
Quand on crée COL, au lieu de faire simplement :
COL.add "mon texte","ma clé"
on fait :
set E = new Collection
E.add "mon texte","ELEMENT"
E.add "ma clé","KEY"
COL.add E
voilà.
"Gloops" <gloops@niark.fr> a écrit dans le message de news:
43607c9f$0$17243$8fcfb975@news.wanadoo.fr...
Pierre a écrit, le 27/10/2005 08:48 :
for each E in COL
'E est la sous collection
key = E("KEY")
element = E("ELEMENT")
next
Oui, en fait ça j'avais compris, merci, mais pour la recherche, on fait comment ? J'imagine que le but de la manoeuvre est de faciliter la recherche ? Enfin si j'ai bien compris le sujet du fil ... _____________________________________ Pierre a écrit, le 27/10/2005 10:37 :
En fait, COL est un collection de collections, ie les éléments de COL sont des collections. Et dans ces collections, on met deux éléments : le premier élément est la clé indexé sur "KEY" et le deuxième est le contenu indexé sur "ELEMENT". COL(E)("KEY")= la clé (qui en fait est un élément comme un autre) COL(E)("ELEMENT")=l'élément
Quand on crée COL, au lieu de faire simplement :
COL.add "mon texte","ma clé"
on fait :
set E = new Collection E.add "mon texte","ELEMENT" E.add "ma clé","KEY" COL.add E
voilà.
"Gloops" a écrit dans le message de news: 43607c9f$0$17243$
Pierre a écrit, le 27/10/2005 08:48 :
for each E in COL 'E est la sous collection key = E("KEY") element = E("ELEMENT") next