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