2025-10-20 · DELGERY Sébastien

Tableaux, Collections et Dictionnaires VBA - le trio qu'il faut enfin comprendre

Comprendre enfin les différences entre Tableaux, Collections et Dictionnaires en VBA — quand utiliser chacun, leurs avantages et exemples concrets.

Quand on code en VBA, on finit toujours par croiser ces trois structures : le tableau, la collection et le dictionnaire.
Elles paraissent interchangeables… jusqu’à ce qu’on s’y perde entre indices, clés et typages.
Voici un rappel clair pour choisir la bonne, au bon moment.


🧩 1. Le tableau — rapide, mais rigide

Le tableau est la base : un espace mémoire fixe (ou redimensionnable) indexé par nombre.

Dim arr() As Variant
ReDim arr(1 To 3)
arr(1) = "Excel"
arr(2) = "VBA"
arr(3) = "SQL"

Debug.Print arr(2)    ' → VBA

Avantages :

⚠️ Limites :

💡 Astuce : pour traiter un tableau Excel entier d’un coup, c’est imbattable :

arr = Range("A1:C1000").Value

📦 2. La collection — souple, simple, sans clé explicite

Une Collection est un conteneur dynamique natif VBA, parfait pour empiler des objets ou valeurs sans se soucier des tailles.

Dim oCol As New Collection
oCol.Add "Excel"
oCol.Add "VBA"
oCol.Add "SQL"

Debug.Print oCol(2)          ' → VBA
Debug.Print oCol.Count       ' → 3

Avantages :

⚠️ Limites :

💡 Exemple avec clé facultative :

oCol.Add "Sébastien", "Auteur"
Debug.Print oCol("Auteur")

🧠 3. Le dictionnaire — rapide, structuré, clé → valeur

Le Scripting.Dictionary (librairie Microsoft Scripting Runtime) est l’équivalent VBA d’un Map : on associe une clé unique à une valeur.

Dim oDic As Object
Set oDic = CreateObject("Scripting.Dictionary")

oDic("Langage") = "VBA"
oDic("Année") = 1995
oDic("Auteur") = "Microsoft"

Debug.Print oDic("Auteur")     ' → Microsoft

Avantages :

⚠️ Limites :

💡 Exemples utiles :

If Not oDic.Exists("Langage") Then oDic("Langage") = "VBA"
For Each k In oDic.Keys
    Debug.Print k, oDic(k)
Next

⚙️ 4. Tableau vs Collection vs Dictionnaire — le comparatif

CaractéristiqueTableauCollectionDictionary
Type d’indexNumériqueNumérique / Texte (optionnel)Texte / Numérique
Taille dynamiqueRedimOuiOui
Accès directarr(i)col(i) / col("clé")d("clé")
Test d’existenceNonNon (sauf erreur).Exists("clé")
ItérationFor i=LBound..UBoundFor EachFor Each
Performance⭐⭐⭐⭐⭐⭐⭐⭐
Multi-dimensionOuiNonNon
Parfait pourDonnées tabulairesListes souples / objetsLookup, mapping, caches

🧩 5. Combo gagnant : les hybrides

On peut (et souvent on doit) combiner les structures :

Dictionnaire de tableaux

oDic("Ligne1") = Array("A", "B", "C")
Debug.Print oDic("Ligne1")(2)    ' → B

Collection de dictionnaires

Dim oCol As New Collection, oDic2 As Object
Set oDic2 = CreateObject("Scripting.Dictionary")
oDic2("Nom") = "Delgery"
oDic2("Role") = "Consultant"
oCol.Add oDic2, "Profil"

Debug.Print oCol("Profil")("Nom")

🪄 En résumé

🔹 Tableau → performance brute
🔹 Collection → souplesse sans prise de tête
🔹 Dictionnaire → structure clé/valeur, parfaite pour anonymisation, mapping, caches, agrégations

Et comme toujours en VBA : commence simple, optimise plus tard.
Le bon conteneur est celui qui éclaire ton code, pas celui qui impressionne ton compilateur 😉


Article rédigé par DELGERY Sébastien – Consultant PPM & BI / Développeur VBA & .NET
© Overview Software · Automatisation, fiabilité, clarté.