EXCEL_2016_VBA_EX_ZONE_LISTE_DEROULANTE_SANS_DOUBLONS
Problématique : je souhaite une liste déroulante sans doublon? Comment faire?
Solutions :
Pour commencer , une fonctionnalité moins connue, mais d’autant plus utile, de VBA est l’utilisation de la structure “Dictionnaire” pour stocker les données dans la mémoire de l’ordinateur, c’est ce que nous allons utiliser dans cet exemple.
Cette fonctionnalité permet de contenir de grandes quantités de données disponibles immédiatement à l’utilisation et cette utilisation est particulièrement rapide. En gros, vous n’avez pas besoin de stocker vos données dans les Feuilles – ils sont à votre disposition tant que votre macro tourne.
La structure “Dictionnaire” en question attribue une Valeur à une Clé. De cette manière, il est possible d’aller chercher la Valeur (chaîne de texte, nombre, array,…) en utilisant la Clé.
Deux méthodes sont possibles pour pouvoir utiliser cette structure. Le choix dépend de votre possibilité d’utiliser les Références car la méthode la plus simple requiert la présence de la référence “Microsoft Scripting Runtime
“. ALT +F11 / outils / référence :
Il s’agit d’une des références de base fournies dans chaque installation d’Excel mais qui n’est pas activée par défaut.
Pour pouvoir l’utiliser, vous devez avoir la possibilité de l’activer.
Si ce n’est pas possible, vous pouvez utiliser l’objet Collection
qui ne requiert aucune référence supplémentaire, nous verrons cela dans un autre tuto.
Sur MAC, Dictionary n’existe pas. Pour obtenir une liste sans doublons, utiliser Collection
Ensuite créer la combobox via mode création et insérer cette combobox dans active X la feuille en cliquant/déposant:
Méthode 1: Utilisation de Scripting.Dictionary
Pour pouvoir utiliser cette méthode, assurez vous que la référence “Microsoft Scripting Runtime
” est activée.
L’utilisation de Dictionnaire n’a de sens que quand elle est utilisée en combinaison avec une boucle qui vous permettra de remplir le Dictionnaire à partir des données (fichier texte, contenu d’un fichier Excel ,plage etc.).
Détail important des fonctionnalités MonDico :
MonDico.Count
– affiche le nombre de paires clé/valeur dans le DictionnaireMonDico.Exists(Cle)
– vérifie si la clé existe dans le Dictionnaire (retourneTrue
ouFalse
)MonDico.Remove(Cle)
– supprime la paire clé/valeur spécifié du Dictionnaire
Code source VBA :
Version Youtube :
Tuto :
SUPER CODE :
Pour les cas ou la référence n’est pas activée sur un poste j’ai trouvé ce petit bout de code de Alex qui active la bibliothèque en l’identifiant par son GUID c’est à dire son identifiant normalement unique et commun aux différentes versions d’office. J’ajoute son chargement au démarrage du classeur:
Private Sub Workbook_Open()
Ajoutreference
End Sub
'--------------------------
Public Sub Ajoutreference()
Dim resultat
On Error Resume Next
' Microsoft Scripting Runtime library pour utiliser la fonction dictionnaire "Scripting.dictionary"
resultat = ThisWorkbook.VBProject.References.AddFromGuid("{420B2830-E718-11CF-893D-00A0C9054228}", 1, 0)
On Error GoTo 0
End Sub
Code source VBA :