La fonction INDIRECT Excel : utilisation avancée et pièges
INDIRECT est l'une des fonctions Excel les plus puissantes et les plus mal comprises. Elle permet de construire dynamiquement des références de cellules à partir de texte, ouvrant des possibilités qu'aucune autre fonction native n'offre. Mais cette flexibilité a un prix : performance dégradée, erreurs cryptiques et fragilité des modèles. Après dix ans à déboguer des fichiers industriels où INDIRECT était utilisé à tort et à travers, voici ce qu'il faut vraiment savoir.
Syntaxe et comportement de base
La syntaxe est simple : =INDIRECT(référence_texte; [a1])
Le premier argument est une chaîne de caractères représentant une référence de cellule. Le second (optionnel) indique le style de référence : VRAI ou omis pour A1, FAUX pour L1C1.
Exemple basique : =INDIRECT("A" & LIGNE()) retourne la valeur de la cellule de la colonne A sur la même ligne. Utile, mais le vrai potentiel apparaît avec des références construites dynamiquement.
Point critique : INDIRECT est volatile. Elle recalcule à chaque modification de la feuille, même si ses arguments n'ont pas changé. Sur des fichiers avec des centaines d'INDIRECT, l'impact performance est mesurable et pénible pour l'utilisateur final.
Cas d'usage légitime : références dynamiques aux feuilles
Le cas le plus défendable d'INDIRECT concerne les références croisées entre feuilles dont le nom varie.
=INDIRECT("'" & A1 & "'!B5")
Si A1 contient "Janvier", cette formule récupère la valeur de B5 dans la feuille "Janvier". Pratique pour des tableaux de bord consolidant plusieurs feuilles mensuelles identiques en structure.
Alternative sans INDIRECT : utiliser des tableaux structurés et FILTRE (Microsoft 365) ou des plages nommées dynamiques. Mais honnêtement, dans ce cas précis, INDIRECT reste la solution la plus lisible.
Attention : Si la feuille référencée n'existe pas, INDIRECT retourne #REF! sans autre explication. Prévoir une vérification avec ESTERREUR ou SIERREUR selon le contexte.
Piège n°1 : INDIRECT ne fonctionne pas avec les fichiers fermés
C'est LA limitation qui piège 90% des utilisateurs. Une formule comme =INDIRECT("[Autre.xlsx]Feuil1!A1") fonctionne tant que le fichier source est ouvert. Dès qu'il se ferme, #REF!
Pourquoi ? Excel ne maintient pas les liens dynamiques vers des fichiers fermés pour les fonctions volatiles. Les références directes classiques (sans INDIRECT) fonctionnent car Excel stocke les valeurs en cache.
Solution : Abandonner INDIRECT et utiliser des références directes standard, ou passer par une solution VBA avec ouverture programmatique du fichier source.
Piège n°2 : INDIRECT casse la traçabilité des dépendances
Les outils natifs d'audit de formule (Repérer les antécédents/dépendants) ne traversent pas INDIRECT. Pour Excel, la formule dépend uniquement de la cellule contenant le texte, pas de la cellule référencée par ce texte.
Conséquence concrète : impossible de suivre proprement les flux de données dans un modèle complexe. Les outils de documentation automatique ne fonctionnent plus. La maintenance devient un cauchemar.
Je l'ai vécu sur un fichier de planification industrielle avec 300+ INDIRECT imbriquées. Identifier l'origine d'une erreur prenait des heures. Après refactoring complet en éliminant 90% des INDIRECT au profit de plages nommées et INDIRECT/INDEX, les analyses d'impact qui prenaient une demi-journée se faisaient en 10 minutes.
Alternative performante : INDEX avec EQUIV
Dans 80% des cas, INDIRECT est utilisé pour des recherches qui seraient mieux servies par INDEX/EQUIV ou RECHERCHEX (Microsoft 365).
Au lieu de : =INDIRECT("B" & EQUIV(A1; A:A; 0))
Préférer : =INDEX(B:B; EQUIV(A1; A:A; 0))
La seconde version n'est pas volatile, maintient les dépendances traçables et s'exécute plus rapidement. Le gain de performance devient significatif au-delà de quelques dizaines d'instances.
Quand INDIRECT est réellement indispensable
Trois situations où je valide INDIRECT sans discuter :
1. Références de feuilles variables : Consolidation multi-feuilles comme expliqué plus haut.
2. Construction de plages pour validation de données dynamique : =INDIRECT("Plage_" & A1) où A1 détermine quelle plage nommée utiliser pour une liste déroulante contextuelle.
3. Contournement des limites de liaison dans les formules matricielles complexes : Cas très spécifiques de modèles financiers avancés.
Partout ailleurs, cherchez d'abord une alternative. Votre fichier sera plus robuste, plus rapide et maintenable.
Conclusion
INDIRECT est un outil de dernier recours, pas de première intention. Sa volatilité et son opacité en font un facteur de dette technique dans les fichiers Excel industriels. Utilisez-la uniquement quand les bénéfices en flexibilité dépassent clairement les coûts en performance et maintenabilité. Et documentez systématiquement chaque usage pour les pauvres collègues qui hériteront du fichier.