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 :
- très rapide (stocké en mémoire contiguë)
- parfait pour parcourir des lignes/colonnes
- compatible avec les
Range.Value
⚠️ Limites :
- index numérique uniquement (pas de clé texte)
- redimensionnement coûteux
- pas de suppression d’élément “au milieu”
💡 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 :
- ajout/suppression ultra simple (
.Add,.Remove) - accepte n’importe quel type (objets, chaînes, tableaux…)
- possible de donner une clé texte (facultative)
⚠️ Limites :
- pas de vérification d’existence (
On Error Resume Nextobligatoire) - plus lent qu’un tableau sur gros volumes
- pas d’accès direct aux clés (
For Eachuniquement)
💡 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 :
- accès direct par clé (texte, numérique…)
.Existspour tester avant d’ajouter- très rapide en lookup (table de hachage)
.Keyset.Itemspour parcourir
⚠️ Limites :
- nécessite
CreateObject(non natif VBA) - pas trié
- pas de doublons de clé
💡 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éristique | Tableau | Collection | Dictionary |
|---|---|---|---|
| Type d’index | Numérique | Numérique / Texte (optionnel) | Texte / Numérique |
| Taille dynamique | Redim | Oui | Oui |
| Accès direct | arr(i) | col(i) / col("clé") | d("clé") |
| Test d’existence | Non | Non (sauf erreur) | .Exists("clé") |
| Itération | For i=LBound..UBound | For Each | For Each |
| Performance | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
| Multi-dimension | Oui | Non | Non |
| Parfait pour | Données tabulaires | Listes souples / objets | Lookup, 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é.