Problème de synthaxe VBA avec l'utilisation de l'objet Dictionary

Vorens

XLDnaute Occasionnel
Bonjour tout le monde,




J'essais d'utiliser un dictionnaire dans mon programme excel mais cela me pose quelque petit problème. Je parvient très bien à le remplir mais je n'arrive pas à écrire la ligne qui me permet de récupérer les records d'une seul Key.

Je remplis mon dictionnaire via un tableau mais tout cela marche très bien. Mon problème est sur la 4 eme ligne ci-dessous.

Code:
Dim toto() As String
        Dim Titi() As String
        toto = Collection_Objet.Keys(0)
        Titi() = Collection_Objet.Item(toto)
Avec toto = Collection_Objet.Keys(0) je répuére le nom de ma première clef. J'aimerais avec la ligne suivante

Titi() = Collection_Objet.Item(toto) récupérer les enregistrements contenu dans ma première clef et les stocker dans le tableau Titi. Mais je n'y parviens pas.

Est ce que quelqu'un sait comment écrire cette ligne de code correctement ?


Par avance je vous remercie pour l’intérêt porté à mon problème.

Meilleures salutations


Vorens
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Problème de synthaxe VBA avec l'utilisation de l'objet Dictionary

Bonjour,

Objet dictionary


-L'objet Dictionary associe des valeurs à des Clés.
-Dictionary peut être vu comme un tableau à une dimension. On accède aux éléments par une clé et non pas par un indice.

Code:
Sub ListeDictionnaire()
  Set d = CreateObject("Scripting.Dictionary")
  '-- ajout de clés/items
  d.Item("aa") = 12     ' ou If Not d.Exists("aa") Then d.Add "aa", 15
  d.Item("bb") = 13
  d.Item("cc") = 11     ' ou d("cc")=11
  d.Item("dd") = 20
  '---- élément pour une clé
  clé = "cc"
  MsgBox clé & ":" & d.Item(clé)   ' ou MsgBox d(clé)
  '--- tous les éléments
  For Each c In d.keys
     MsgBox c & ":" & d.Item(c)     ' ou MsgBox c & ":" & d(c)
  Next c
  '---- 3eme élément
  a = d.keys             ' dans un tableau a(0 To d.Count-1)
  b = d.items            ' dans un tableau b(0 To d.Count-1)
  MsgBox a(2) & ":" & b(2)
End sub

JB
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Problème de synthaxe VBA avec l'utilisation de l'objet Dictionary

Bonsoir.

Dim toto() As String
Dim Titi() As String
toto = Collection_Objet.Keys(0)
Titi() = Collection_Objet.Item(toto)
Donc vous déclarez 2 tableaux dynamiques de String
Vous essayez d'affecter au tableau toto tout entier la première des clés seulement. Ça ne peut pas marcher.
Ensuite, en admettant que Toto soit une variable String et non un tableau ça pourrait marcher si vous avez bien associé un tableau de String à cette clé. Mais ça reviendrait au même que de faire :
VB:
Titi = Collection_Objet.Items(0)
Remarque : l'accès par ce genre de syntaxe à un seul élément des tableaux Keys ou Items doit rester sporadique. Pour traiter plus d'un élément prenez en préalablement des copies en les affectant à des variables tableaux. En effet il ne va hélas pas chercher le nième élément seulement, il fabrique chaque fois tout le tableau, et, du fait que c'est un tableau vous pouvez alors n'en demander que le nième élément. Mais la constitution de ce tableau est loin d'être instantanée.
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Problème de synthaxe VBA avec l'utilisation de l'objet Dictionary

En tout cas le demandeur s'inquiète d'une instruction qui marche en réalité, en gros.
Du moins si on excepte qu'il essaye d'affecter l'élément Keys(0) à tout un tableau, et qu'ensuite au contraire il spécifie tout ce tableau comme clé à consulter au lieu de n'en spécifier qu'un certain élément.
Mais je pense que c'est surtout ce qu'il peut y avoir avant qui n'est pas bon, car ça ça marche :
VB:
Sub test()
Dim Collection_Objet As Object
Dim Toto() As Variant ' () As String entraine une incompatibilité de type à l'affectation
Dim Titi() As String ' En revanche là ça va du moment que c'est bien ce qu'on range dans les Items
Set Collection_Objet = CreateObject("Scripting.Dictionary")
Collection_Objet.Add "Clé0", Split("Un-Deux-Trois", "-")
Collection_Objet.Add "Clé1", Split("Quatre-Cinq-Six", "-")

Toto = Collection_Objet.Keys
Titi = Collection_Objet.Item(Toto(0))

MsgBox "Toto(0) = """ & Toto(0) & """," & vbLf & "Titi = Array(""" & Join(Titi, """, """) & """)"
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 537
dernier inscrit
alisafred974