Question sur dictionnaire

Calvus

XLDnaute Barbatruc
Bonjour le forum,

Voici un code présent sur le site de Boisgontier, permettant d'avoir une Combobox avec les éléments sans doublon.
Page ici.

VB:
Private Sub UserForm_Initialize()
  Set f = Sheets("BD")
  Set mondico = CreateObject("Scripting.Dictionary")
  a = f.Range("A2:A" & f.[A65000].End(xlUp).Row)  ' tableau a(n,1) pour rapidité
  For i = LBound(a) To UBound(a)

   'EXPLICATION DE CETTE LIGNE SVP
If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
  Next i
  Me.ComboBox1.List = mondico.keys
End Sub

Pouvez vous m'expliquer la ligne de code que j'ai mis en évidence ?
Si a(i,1) est différent de vide, alors la clé est vide.....
Comment remplit on les clés alors ?
Et pourtant ça fonctionne.
Quelque chose m'échappe.

Merci et bonne journée.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
La Méthode par défaut d'un Dictionary c'est Item non Key. On lui précise en paramètre la clé, à créer si nécessaire, mais c'est l'item affecté qu'elle y associe.
Personnellement je procède complètement différemment pour établir des listes classées sans doublon. Sans utiliser de Dictionary.
Mais tant qu'à faire, quitte à utiliser un Dictionary, on pourrait toujours trouver quelque chose de plus intelligent qu'un texte vide comme item. i par exemple, au moins ça servirait à retrouver le numéro de ligne lors du choix dans la ComboBox.
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Bonjour Dranreb,

Merci, mais je ne vois toujours pas.
Que l'on fasse MsgBox mondico(Item) ou MsgBox mondico(Key), on obtient un message vide, ce qui est logique au vu du code.
Cependant, la Combobox affiche bien une liste sans doublon.
Pouvez vous me détailler pourquoi ?
 

Calvus

XLDnaute Barbatruc
Bonjour Dranreb, Youky,

Parce que ce n'est pas la liste Items qu'on affecte à la ComboBox mais la liste Keys

Ok, merci. Je crois avoir compris.
Mais alors, comment génère t'on les clés ?
Sont elles affectées automatiquement par la valeur de i ?

peut être aussi remplacée par
mondico(a(i, 1)) = ""

Est ce que cela voudrait dire : mondico.Item(a(i, 1)) ?

Merci
 

Calvus

XLDnaute Barbatruc
Re,

C'est donc bien généré automatiquement par Excel, et on peut décider de ne pas s'en préoccuper, c'est ça ?
A partir du moment où on crée un dictionnaire, Excel génère forcément une clé, même si on ne l'a pas spécifié.
Je suis sur la bonne voie ?
 

Calvus

XLDnaute Barbatruc
Ok, ça se précise.
Mais dans l'exemple cité ici, à quel moment fait on référence à la clé ? Je ne le vois pas.
Pardon si je parais bête, mais là ce n'est pas évident.

Si je ne dis pas de bêtise, pour avoir un dictionnaire, on doit avoir :
Dictionnaire.Item
Dictionnaire.Key
 

Paf

XLDnaute Barbatruc
Bonjour à tous

Un dico c'est un peu comme un tableau à 2 colonnes.
La première contient la clé (key) et la seconde la valeur associée (item)

pour écrire dans un dico:
mondico("machin") = "truc" on écrit la clé :"machin" et l' item:"truc"
mondico(a(i, 1)) = "" on écrit la clé : valeur de a(i,1) et un item vide

pour retrouver la valeur de l'item :( msgbox ) mondico(clé)
mondico("machin") renvoie "truc"

une autre écriture pour retrouver la valeur de l'item associé à une clé : mondico.Item(clé)
mondico.item("machin") renvoie "truc"

A+
 

Calvus

XLDnaute Barbatruc
Bonsoir,

Merci de vos réponses.

2 colonnes.
La première contient la clé (key) et la seconde la valeur associée (item)

organisé un dictionnaire (1er dessin):

J'avais saisi les Keys et Items je crois bien.
Mais dans ton tableau que j'ai pris en exemple JB, il n'y a qu'une seule colonne. C'est là que je me perds un peu.

Mais le message de Paf met bien en évidence la problématique.
C'est beaucoup plus clair.

Merci :)
 

gosselien

XLDnaute Barbatruc
Bonsoir,
Merci de vos réponses.
J'avais saisi les Keys et Items je crois bien.
Mais dans ton tableau que j'ai pris en exemple JB, il n'y a qu'une seule colonne. C'est là que je me perds un peu.
Mais le message de Paf met bien en évidence la problématique.
C'est beaucoup plus clair.
Merci :)
Rassuré que ne pas être le seul à patauger avec les dictionnaires que j'apprécie pourtant beaucoup ;)
Malgré tous les exemples, je cherche souvent pour moi, pour ma compagne ou pour aider ici ...
Sans formation informatique, on fait ce qu'on peut :)
P.
 

Discussions similaires

Réponses
12
Affichages
245

Statistiques des forums

Discussions
312 185
Messages
2 086 010
Membres
103 090
dernier inscrit
Createlier