Scripting.dictionary : les dictionnaires dans excel | www.excelabo.net

Transcription

Scripting.dictionary : les dictionnaires dans excel | www.excelabo.net
Scripting.dictionary : les dictionnaires dans excel | www.excelabo.net
http://www.excelabo.net/excel/scripting_dictionary
Scripting.dictionary : les dictionnaires dans excel
Page modifiée le 07/03/2013
Scripting.dictionary : un outil pratique et très rapide pour gérer des paires associant un élément à une clé
et pour créer une liste d'éléments uniques.
Présentation
Scripting.dictionary est un outil VBA qui stocke en mémoire vive une liste de paires d'éléments (clé,élément).
key1, item1
key2, item2
key3, item3
...
Chaque clé (key) est unique. En revanche on peut avoir des doublons dans les éléments (items) si on le souhaite.
Dans un dictionnaire on pourrait par exemple associer un numéro de téléphone (la clé) à un abonné (la valeur)
Attention chaque numéro de téléphone devra être unique, en revanche un abonné peut être associé à plusieurs
numéros de téléphone.
Si on essaie de rentrer dans le dictionnaire deux fois le même numéro de téléphone cela générera un erreur.
On peut attribuer à la clé la même valeur qu'à celle de l'élément,
Jean, Jean
Valérie, Valérie
Bernard, Bernard
Ce type d'écriture est très pratique pour créer une liste d'éléments uniques (vois plus bas).
On crée un dictionnaire en VBA en utilisant l'outil Scripting.dictionary. C'est une forme particulière d'array qui a
toujours deux dimensions. Rappelons que les arrays sont des tables qui au lieu d'être écrites dans la feuille sont
en mémoire vive dans excel, ce qui permet de les manipuler de façon très rapide (voir les pas à pas sur les
arrays).
L'objet dictionnaire fait partie de la bibliothèque Microsoft Scripting Runtime. Il faut donc que cette bibliothèque
soit référencée dans votre projet. Dans VBA, allez dans le menu Outils/références et cochez Microsoft Scripting
Runtime.
Propriétés associés à un dictionnaire
Dico.ITEM(KEY) renvoie l'item associé à une clé.
ITEM étant la propriété par défaut d'un dictionnaire, on peut aussi écrire Dico(KEY)
Dico.ITEM(KEY) = NouvelleValeur remplace l'ancienne valeur de l'item par une nouvelle
Dico.COUNT : nombre de paires clé/item dans le dictionnaire.
Dico.COMPAREMODE : précise la méthode de comparaison pour comparer entre elles les clés d'un dictionnaire :
1 sur 4
30/07/2014 17:38
Scripting.dictionary : les dictionnaires dans excel | www.excelabo.net
http://www.excelabo.net/excel/scripting_dictionary
vbUseCompareOption : Effectue une comparaison à l'aide de la valeur de l'instruction Option Compare
vbBinaryCompare : Effectue une comparaison binaire
vbTextCompare : Effectue une comparaison de texte
NB : remplacez Dico par le nom de votre dictionnaire !
Méthodes associées à un dictionnaire
Dico.ADD (Clé, Item) : ajoute une paire d'éléments au dictionnaire
Dico.REMOVE(clé) : supprime une clé du dictionnaire
Dico.REMOVEALL : supprime toutes les clés
Dico.KEYS : renvoie un tableau contenant toutes les clés
Dico.ITEMS : renvoie un tableau contenant tous les éléments
Dico.EXISTS (clé) : vérifie si une clé est présente dans le dictionnaire.
Création d'un dictionnaire
Déclaration
Un dictionnaire peut contenir des éléments de tous types : textes, nombres, monnaie, date... sauf des tableaux
(arrays). Il se déclare en variant.
De même, les éléments du dictionnaire sont obligatoirement déclarés en variant
Remplissage "manuel"
On peut remplir le dictionnaire clé- item par clé-item :
La clé est entrée en premier (ici les nombres en français), l'item correspondant ensuite (anglais).
Remplissage à partir de la feuille
s en colonne B
Si une clé est en double, cela génère une erreur et l'affichage du message suivant :
"cette clé est déjà associée à un élément de cette collection".
Il est donc prudent de tester si la clé est nouvelle :
Accéder aux éléments du dictionnaire
2 sur 4
30/07/2014 17:38
Scripting.dictionary : les dictionnaires dans excel | www.excelabo.net
http://www.excelabo.net/excel/scripting_dictionary
Pour afficher toutes les paires d'éléments :
afficher un élément en particulier en le cherchant par sa clé :
Item est la méthode par défaut d'un dictionnaire. Par conséquent l'écriture msgbox Dico("un") est équivalente à
Dico.item("un") .
On peut boucler sur les différents éléments d'un dictionnaire pour les afficher dans un msgbox ou pour les écrire
dans la feuille, éventuellement après leur avoir appliqué un autre traitement (calcul, tri...).
Utiliser un dictionnaire pour créer une liste d'éléments sans
doublons
On peut utiliser le fait que chaque clé dans un dictionnaire doit être unique pour extraire facilement d'une série
quelconque contenant des doublons une liste d'éléments uniques.
On affecte dans ce cas la même valeur à la clé et à l'item:
A et commence en
cellule B2
Cette utilisation est très pratique et extrêmement rapide, même sur un très grand nombre d'élements.
On peut trier le dictionnaire lors de sa création en utilisant une fonction de tri. On utlise de préférence la méthode
"quick sort" qui est très rapide. Le principe est de choisir un élément "pivot", généralement une valeur médiane.
On classe ensuite d'un coté les éléments plus petits que ce pivot et de l'autre ceux qui lui sont supérieurs. Sur
chacun des deux sous groupes ainsi constitués, on recommence. Puis on recommence sur la 4 sous groupes... Et
ainsi de suite de façon récursive jusqu'à ce que chaque sous-sous-sous... ensemble soit constitué d'un seul
élément.
Pourquoi utiliser un dictionnaire plutôt qu'une collection ou un
array classique ?
Un objet Collection est un jeu d'éléments indexés auxquels il peut être fait référence comme s'ils constituaient
un ensemble unique.
Commele dictionnaire, la collection possède des propriétés et méthodes proches de celles du dictionnaire (add,
remove, item...) Consultez l'aide de VBA pour en apprendre davantage sur cet outil. Les collections présentent un
inconvénient majeur : leur utilisation est très lente ce qui limite considérablement leur intérêt. Il est grandement
3 sur 4
30/07/2014 17:38
Scripting.dictionary : les dictionnaires dans excel | www.excelabo.net
http://www.excelabo.net/excel/scripting_dictionary
préférable d'utiliser un dictionnaire.
Les dictionnaires ne sont qu'une forme particulière d'array. Ils présentent l'avantage de ne pas avoir besoin d'être
dimensionnés à l'avance (si on connait le nombre d'éléments) ou au fur et à mesure de leur remplissage en
utilisant les instructions redim preserve.
Cependant dans un array offre des possibilités plus étendues, par exemple si on souhaite gérer des données
comportant des doublons.
En terme de rapidité il n'y a pas de différence entre un array et un dictionnaire
Auteur(s) : Flo Cabon
4 sur 4
30/07/2014 17:38