Dans ce tutoriel, je vais explorer avec vous les fonctionnalités avancées du Dictionnaire en VBA. Si vous découvrez tout juste cet outil puissant, je vous invite d'abord à lire mes deux précédents articles :
- La structure "Dictionnaire" dans VBA (tutoriel)
- Trier le Dictionnaire dans VBA (par clé et par valeur)
Ces tutoriels vous donneront une solide compréhension des bases, ce qui vous sera très utile pour aborder les techniques avancées que nous allons voir ensemble ici.
Le Dictionnaire est un outil formidable pour gérer des paires clé/valeur, et les techniques avancées que je vais partager avec vous vous permettront de l'exploiter au maximum. Nous allons apprendre à copier un Dictionnaire, à fusionner plusieurs Dictionnaires, et à découvrir d'autres astuces pour optimiser vos macros VBA.
Sommaire
Copier un Dictionnaire en VBA
Il peut être nécessaire de copier un Dictionnaire pour préserver son état initial avant de le modifier ou pour travailler sur une copie indépendante. Voici comment procéder.
Méthode pour copier un Dictionnaire
Le moyen le plus simple de copier un Dictionnaire est de parcourir ses éléments et de les ajouter à un nouveau Dictionnaire.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Sub CopierDictionnaire() 'par Excel-Malin.com ( https://excel-malin.com ) 'Assurez-vous que la référence "Microsoft Scripting Runtime" est activée Dim DicoOriginal As New Scripting.Dictionary Dim DicoCopie As New Scripting.Dictionary Dim Cle As Variant 'Remplissage du Dictionnaire original DicoOriginal.Add "Clé1", "Valeur1" DicoOriginal.Add "Clé2", "Valeur2" DicoOriginal.Add "Clé3", "Valeur3" 'Copie des éléments dans le nouveau Dictionnaire For Each Cle In DicoOriginal.Keys DicoCopie.Add Cle, DicoOriginal(Cle) Next Cle 'Vérification de la copie MsgBox "La valeur associée à 'Clé2' dans DicoCopie est : " & DicoCopie("Clé2") 'Nettoyage de la mémoire Set DicoOriginal = Nothing Set DicoCopie = Nothing End Sub |
Explications
- DicoOriginal : le Dictionnaire initial que nous souhaitons copier.
- DicoCopie : le nouveau Dictionnaire qui contiendra la copie.
- For Each : boucle pour parcourir chaque clé du Dictionnaire original et ajouter la paire clé/valeur au nouveau Dictionnaire.
Fusionner deux ou plusieurs Dictionnaires
La fusion de Dictionnaires est utile lorsque vous souhaitez combiner des données provenant de différentes sources.
Méthode pour fusionner des Dictionnaires
Voici comment fusionner deux Dictionnaires en gérant les clés dupliquées.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Sub FusionnerDictionnaires() 'par Excel-Malin.com (https://excel-malin.com) 'Assurez-vous que la référence "Microsoft Scripting Runtime" est activée Dim Dico1 As New Scripting.Dictionary Dim Dico2 As New Scripting.Dictionary Dim DicoFusion As New Scripting.Dictionary Dim Cle As Variant 'Remplissage du premier Dictionnaire Dico1.Add "Clé1", "Valeur1" Dico1.Add "Clé2", "Valeur2" 'Remplissage du second Dictionnaire Dico2.Add "Clé2", "NouvelleValeur2" Dico2.Add "Clé3", "Valeur3" 'Copie du premier Dictionnaire dans le Dictionnaire fusionné For Each Cle In Dico1.Keys DicoFusion.Add Cle, Dico1(Cle) Next Cle 'Ajout du second Dictionnaire en gérant les doublons For Each Cle In Dico2.Keys If Not DicoFusion.Exists(Cle) Then DicoFusion.Add Cle, Dico2(Cle) Else 'Gérer les clés dupliquées selon le besoin DicoFusion(Cle) = Dico2(Cle) 'Remplace la valeur existante End If Next Cle 'Affichage du résultat For Each Cle In DicoFusion.Keys MsgBox "Clé: " & Cle & " - Valeur: " & DicoFusion(Cle) Next Cle 'Nettoyage de la mémoire Set Dico1 = Nothing Set Dico2 = Nothing Set DicoFusion = Nothing End Sub |
Explications
- Gestion des doublons : lors de la fusion, si une clé existe déjà, vous pouvez choisir de remplacer la valeur, de l'ignorer ou de la combiner.
- DicoFusion : le Dictionnaire résultant de la fusion des deux autres.
Filtrer un Dictionnaire selon des critères
Il est parfois nécessaire de filtrer un Dictionnaire pour ne conserver que certaines paires clé/valeur répondant à un critère spécifique.
Méthode pour filtrer un Dictionnaire
Voici comment créer un nouveau Dictionnaire contenant uniquement les éléments qui répondent à un critère.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Sub FiltrerDictionnaire() 'par Excel-Malin.com (https://excel-malin.com) 'Assurez-vous que la référence "Microsoft Scripting Runtime" est activée Dim DicoOriginal As New Scripting.Dictionary Dim DicoFiltre As New Scripting.Dictionary Dim Cle As Variant 'Remplissage du Dictionnaire original DicoOriginal.Add "Produit1", 150 DicoOriginal.Add "Produit2", 80 DicoOriginal.Add "Produit3", 200 DicoOriginal.Add "Produit4", 50 'Filtrage des produits dont la valeur est supérieure à 100 For Each Cle In DicoOriginal.Keys If DicoOriginal(Cle) > 100 Then DicoFiltre.Add Cle, DicoOriginal(Cle) End If Next Cle 'Affichage du Dictionnaire filtré For Each Cle In DicoFiltre.Keys MsgBox "Produit: " & Cle & " - Prix: " & DicoFiltre(Cle) & "€" Next Cle 'Nettoyage de la mémoire Set DicoOriginal = Nothing Set DicoFiltre = Nothing End Sub |
Explications
- Critère de filtrage : dans cet exemple, nous conservons les produits dont le prix est supérieur à 100€.
- DicoFiltre : le nouveau Dictionnaire contenant les éléments filtrés.
Sauvegarder et charger un Dictionnaire
Pour préserver les données d'un Dictionnaire entre différentes sessions, il est utile de savoir comment le sauvegarder et le charger. Le plus simple / efficace, est de stocker le contenu dans une Feuille du Classeur Excel.
Sauvegarder un Dictionnaire dans une feuille Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Sub SauvegarderDictionnaire() 'par Excel-Malin.com (https://excel-malin.com) 'Assurez-vous que la référence "Microsoft Scripting Runtime" est activée Dim Dico As New Scripting.Dictionary Dim Cle As Variant Dim Ligne As Long 'Remplissage du Dictionnaire Dico.Add "Clé1", "Valeur1" Dico.Add "Clé2", "Valeur2" Dico.Add "Clé3", "Valeur3" 'Sauvegarde dans la feuille "Données" Ligne = 1 For Each Cle In Dico.Keys Sheets("Données").Cells(Ligne, 1).Value = Cle Sheets("Données").Cells(Ligne, 2).Value = Dico(Cle) Ligne = Ligne + 1 Next Cle 'Nettoyage de la mémoire Set Dico = Nothing End Sub |
Charger un Dictionnaire depuis une feuille Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub ChargerDictionnaire() 'par Excel-Malin.com (https://excel-malin.com) 'Assurez-vous que la référence "Microsoft Scripting Runtime" est activée Dim Dico As New Scripting.Dictionary Dim Cle As Variant Dim Ligne As Long Ligne = 1 Do While Sheets("Données").Cells(Ligne, 1).Value <> "" Cle = Sheets("Données").Cells(Ligne, 1).Value Dico.Add Cle, Sheets("Données").Cells(Ligne, 2).Value Ligne = Ligne + 1 Loop 'Affichage du Dictionnaire chargé For Each Cle In Dico.Keys MsgBox "Clé: " & Cle & " - Valeur: " & Dico(Cle) Next Cle 'Nettoyage de la mémoire Set Dico = Nothing End Sub |
Explications
- Sauvegarde : les paires clé/valeur sont écrites dans les colonnes A et B de la feuille "Données".
- Chargement : les données sont lues depuis la feuille "Données" pour reconstruire le Dictionnaire.
Conclusion
Et voilà, vous devriez maintenant pouvoir maitriser ces techniques avancées pour manipuler les Dictionnaires en VBA. Que ce soit pour copier, fusionner ou filtrer des Dictionnaires, ou encore pour les sauvegarder et les charger, vous êtes prêt à gérer des ensembles de données complexes avec aisance.
Les "Dictionnaires" sont une partie de VBA qui est malheureusement assez méconnue et sous-utilisée. Mais comme vous avez pu le voir dans ce tutoriel, leur utilisation est assez directe et rapide. Et ils rendent le travail avec les données bien plus agréable.
Si vous avez des questions ou si vous souhaitez partager vos propres découvertes, n'hésitez pas à laisser un commentaire. Je serai ravi d'échanger avec vous !
Pour aller plus loin en VBA
Voici quelques ressources supplémentaires pour approfondir vos connaissances en VBA :
- Liste de toutes les fonctions VBA
- Comment utiliser la fonction Excel RECHERCHEV en VBA directement
- VBA: MsgBox qui se ferme automatiquement
- Calculer la SOMME en VBA: différentes méthodes (tutoriel)
- Article intéressant sur les Dictionnaires VBA (en anglais)
Vous pouvez également explorer également la section de téléchargement d'Excel-Malin.com pour découvrir des outils Excel et VBA prêts à l'emploi.
Commentaire sur “Dictionnaire VBA: Utilisation avancée (copie, fusion,…)”
TOP!