Qu'est-ce que la fonction INDIRECT ?
INDIRECT (même nom en anglais) te sert dès que la cellule ou la feuille à lire doit changer selon un choix de l'utilisateur plutôt que rester fixée dans le code de la formule. C'est la fonction à sortir quand une référence doit se construire à la volée depuis un texte, plutôt que d'écrire une formule différente pour chaque cas possible.
Imagine pouvoir référencer la feuille « Janvier », « Février » ou « Mars » sans jamais réécrire ta formule, juste en modifiant un menu déroulant. Ou créer des listes déroulantes en cascade sans une ligne de VBA. INDIRECT rend tout ça possible : navigation entre feuilles, sélecteurs de KPI par département, formulaires de saisie avec listes dépendantes.

Comprendre chaque paramètre de la fonction INDIRECT
Tu te demandes pourquoi écrire =INDIRECT(A2&"!B5") plutôt qu'un simple =A2 ? Tout part du premier argument, réf_texte : INDIRECT n'attend pas une cellule mais une chaîne de texte, celle que tu fabriques par concaténation (A2&"!B5") pour pointer ailleurs sans jamais retoucher la formule. Le second, a1, tu peux l'oublier (tu restes alors en style A1 classique) et ne le passer à FAUX que le jour où tu veux travailler ligne ET colonne en numérique avec le style L1C1.
réf_texte
: une chaîne de texte représentant une référence Excel valideÇa peut être "A1", "Feuil2!B5", une plage nommée "Ventes_Q1", ou une référence construite dynamiquement comme A1&"!C5" si A1 contient le nom d'une feuille.
C'est ce paramètre qui fait toute la magie d'INDIRECT : tu construis le texte de la référence avec des concaténations (&), et INDIRECT la résout en temps réel. Si la référence n'existe pas ou est mal formatée, tu obtiens #REF!.
Tu peux également utiliser des noms de plages nommées : =INDIRECT("Ventes") renvoie les valeurs de la plage nommée Ventes. C'est particulièrement utile pour des tableaux de bord où la plage à afficher change selon la sélection de l'utilisateur.
a1
: détermine le style de référence utilisé(facultatif)VRAI (ou omis) utilise le style A1 classique (lettres pour les colonnes, chiffres pour les lignes). FAUX utilise le style L1C1 (Ligne 1 Colonne 1).
Le style L1C1 est utile quand tu calcules des positions numériques pour les lignes ET les colonnes : =INDIRECT("L5C3";FAUX) pointe vers la ligne 5, colonne 3 (soit la cellule C5).
Dans 99 % des cas, tu utiliseras le style A1 par défaut.

Exemples pratiques pas à pas
Comment lire la valeur d'une adresse écrite en texte avec la fonction INDIRECT
Ton catalogue produits range les prix dans une colonne, et un import t'a livré, pour chaque référence, l'adresse de la cellule où son prix est stocké. Le problème, c'est que ces adresses sont arrivées sous forme de texte (D2, D3, D4...) : Excel les affiche telles quelles au lieu d'aller chercher le prix, et le catalogue part chez le client demain matin. La fonction INDIRECT prend ce texte au sérieux, le traite comme une vraie adresse de cellule et te renvoie la valeur qui s'y trouve.
- 1Dans une cellule, écris
=INDIRECT(. - 2En 1er argument : clique sur la cellule qui contient l'adresse écrite en texte,
B2. Tu ne lui donnes pas le prix mais l'endroit où il est rangé, et c'est là toute la différence. La cellule afficheD2, qui reste un simple texte tant qu'aucune fonction ne le lit comme une adresse. - 3Ferme la parenthèse et appuie sur Entrée, puis recopie la formule vers le bas pour que chaque ligne lise l'adresse inscrite en face d'elle.
=INDIRECT(B2)B2 comme une valeur, mais comme une adresse : elle y trouve le texte D2, va voir ce qui se trouve réellement en D2 et renvoie le prix de PRD-100. Recopiée vers le bas, chaque ligne suit l'adresse inscrite dans sa propre cellule de la colonne Adresse prix, sans que tu retouches la formule.Comment récupérer une valeur dans une autre feuille avec la fonction INDIRECT
Tu tiens une feuille par mois dans ton classeur, et chacune affiche son chiffre d'affaires total toujours à la même case. Ton chef veut la synthèse des quatre derniers mois sur une seule feuille avant le comité de lundi, et tu n'as ni le temps d'aller chercher chaque total à la main ni l'envie d'écrire une formule différente par ligne. La fonction INDIRECT fabrique l'adresse à partir du nom de mois déjà écrit dans ta colonne et ramène le total de la bonne feuille.
- 1Dans une cellule, écris
=INDIRECT(. - 2En 1er argument : clique sur la cellule qui porte le nom de la feuille à lire,
A2, puis complète par&"!B10". Le point d'exclamation sépare le nom de la feuille de sa cellule, et l'ensemble forme le texteJanvier!B10que la fonction n'a plus qu'à résoudre. - 3Ferme la parenthèse et appuie sur Entrée, puis recopie la formule vers le bas pour couvrir les mois suivants.
=INDIRECT(A2&"!B10")A2 au suffixe !B10 pour fabriquer le texte Janvier!B10, puis INDIRECT le traite comme une vraie adresse et ramène le total de la feuille Janvier. Recopiée vers le bas, la même formule change de feuille toute seule à chaque ligne, à condition que tes onglets portent exactement ces noms (la casse compte).Comment additionner une plage nommée avec les fonctions INDIRECT et SOMME
Tu as nommé une plage par équipe commerciale (Nord, Sud, Est, Ouest) pour que chacune retrouve ses ventes sans se perdre dans le classeur. À la revue du vendredi, on te demande le total de chaque équipe, et tu veux une formule unique que tu recopies plutôt que quatre additions pointant chacune sur une plage différente. La fonction INDIRECT reconnaît le nom écrit dans ta colonne comme une vraie plage, et la fonction SOMME n'a plus qu'à en additionner le contenu.
- 1Dans une cellule, écris
=SOMME(. - 2En 1er argument : écris la plage à additionner et referme-la,
INDIRECT(A2). C'est INDIRECT qui transforme le motNordlu en A2 en la plage nommée du même nom, de sorte que SOMME additionne de vraies ventes plutôt qu'un simple libellé. - 3Ferme la parenthèse de la fonction SOMME et appuie sur Entrée. Celle d'INDIRECT a déjà été refermée dans l'étape précédente, et il ne reste plus qu'à recopier la formule vers le bas pour chaque équipe.
=SOMME(INDIRECT(A2))Nord, et elle le reconnaît comme la plage nommée qui porte ce nom (celle que tu as créée dans le gestionnaire de noms). SOMME récupère donc une vraie plage et en additionne les ventes. Une seule formule couvre les quatre équipes, là où un total écrit en dur pour chacune aurait été à reprendre à chaque ligne.Comment éviter l'erreur #REF! avec les fonctions INDIRECT et SIERREUR
Les adresses de prix arrivent d'un export et toutes ne sont pas propres : il y a des espaces parasites au milieu et des cellules restées vides. Résultat, ta colonne se couvre de #REF! alors que le fichier doit partir dans l'heure, et personne ne saura lesquelles corriger. La fonction SIERREUR intercepte ces erreurs et affiche un message clair à la place, pendant que la fonction INDIRECT continue son travail sur toutes les lignes valides.
- 1Dans une cellule, écris
=SIERREUR(. - 2En 1er argument : écris le calcul à tenter et referme-le,
INDIRECT(B2). C'est lui qui fait le vrai travail en lisant l'adresse rangée dansB2, et c'est lui aussi qui renverra#REF!le jour où cette adresse est illisible. - 3En 2ᵉ argument : saisis le message à afficher à la place de l'erreur,
"Adresse à corriger". Les guillemets sont obligatoires pour qu'Excel traite ces mots comme du texte à afficher et non comme une formule à calculer. Choisis un libellé qui dit quoi faire plutôt qu'un simple tiret. - 4Ferme la parenthèse et appuie sur Entrée, puis recopie la formule vers le bas. Les lignes dont l'adresse est valide afficheront leur prix, les autres ton message.
=SIERREUR(INDIRECT(B2); "Adresse à corriger")B2, et SIERREUR n'entre en jeu que si ça échoue. Une adresse valide passe et renvoie le prix, alors qu'un texte incorrect comme C 4 ou une cellule vide déclenche #REF!, aussitôt remplacé par le message. Ta colonne reste lisible et tu repères d'un coup d'œil les lignes à reprendre.
Astuces avancées avec INDIRECT
Enveloppe INDIRECT de SIERREUR pour une expérience propre
Quand la cellule source est vide ou contient un nom de feuille invalide, INDIRECT affiche #REF!. Enveloppe systématiquement avec SIERREUR : =SIERREUR(INDIRECT(A1);"Sélectionne un mois valide"). Tes utilisateurs voient un message clair au lieu d'une erreur technique.
Tu peux adapter le message selon le contexte : « Sélectionne un département », « Choisir une feuille... », etc.
Réfère une feuille à partir d'une date avec TEXTE
Pour référencer automatiquement la feuille du mois courant : =INDIRECT(TEXTE(AUJOURDHUI();"MMMM")&"!A1"). Si tes feuilles sont nommées Janvier, Février, etc., cette formule pointe toujours vers la bonne feuille sans aucune mise à jour manuelle.
Combine avec TEXTE(A1;"AAAA") pour des feuilles nommées par année dans des classeurs de reporting annuel.
Stocke les noms de feuilles dans une zone de configuration
Plutôt que d'écrire les noms de feuilles en dur dans tes formules INDIRECT, stocke-les dans une zone de configuration cachée (ou une feuille dédiée Config). Si tu renommes une feuille, tu changes juste l'entrée dans Config, et toutes tes formules INDIRECT continuent de fonctionner.
C'est un gain de temps énorme en maintenance, surtout dans les fichiers partagés avec plusieurs contributeurs.

Les erreurs fréquentes avec la fonction INDIRECT
Avant de te lancer, demande-toi toujours : la chaîne que je construis correspond-elle vraiment à une feuille qui existe, écrite à l'identique ? Là où une référence directe te suit quand tu déplaces une cellule, INDIRECT prend le texte au pied de la lettre, et c'est de là que viennent l'essentiel des #REF! : un janvier qui n'est pas Janvier, des apostrophes oubliées autour d'un nom à espaces, un classeur source resté fermé, ou des guillemets et & mal placés (A1&"!B5", pas l'inverse). Et si ton fichier rame, souviens-toi qu'INDIRECT est volatile : elle recalcule à chaque frappe.
#REF! : référence invalide ou feuille inexistante
La chaîne de texte ne correspond pas à une référence valide : nom de feuille mal orthographié (la casse compte : « janvier » n'est pas « Janvier »), feuille supprimée ou renommée, classeur source fermé, ou apostrophes manquantes pour les noms de feuilles avec espaces.
Solution : Commence par tester la chaîne construite sans INDIRECT pour vérifier qu'elle produit le bon texte. Utilise des apostrophes autour des noms de feuilles avec espaces : =INDIRECT("'Ma Feuille'!A1"). Assure-toi que toutes les feuilles référencées existent dans le classeur ouvert.
Guillemets ou esperluette incorrects dans la construction du texte
La concaténation nécessite des guillemets doubles autour du texte fixe et une esperluette & pour joindre les références de cellules. Confondre les deux génère une erreur de syntaxe qu'Excel refuse.
Solution : Formule correcte : =INDIRECT(A1&"!B5"). Le texte "!B5" est entre guillemets, séparé par & de la référence A1. Si tu combines plusieurs éléments : =INDIRECT(A1&"!"&B1) où A1 contient le nom de feuille et B1 l'adresse de cellule.
Noms de feuilles avec apostrophes ou caractères spéciaux
Si le nom de ta feuille contient une apostrophe (comme L'équipe), des crochets ou des caractères spéciaux, INDIRECT a besoin d'un échappement spécifique que la plupart des utilisateurs ne connaissent pas.
Solution : Pour une feuille nommée L'équipe, utilise deux apostrophes successives pour l'apostrophe interne : =INDIRECT("'L''équipe'!A1"). Les apostrophes extérieures délimitent le nom de feuille, les deux apostrophes intérieures représentent une seule apostrophe littérale.
Confusion entre INDIRECT et les références absolues ($)
INDIRECT ne sert pas à « fixer » une référence lors de la copie d'une formule. C'est le rôle des $ (références absolues). Utiliser INDIRECT à cette fin est plus lent et plus complexe sans aucun bénéfice.
Solution : Si tu veux fixer une référence lors d'une copie, utilise =$A$1. Utilise INDIRECT uniquement quand tu veux que la référence change selon le contenu d'une cellule ou une construction de texte. Ce sont deux mécanismes qui résolvent des problèmes différents.
Fichier qui ralentit avec de nombreuses formules INDIRECT
INDIRECT est volatile : elle recalcule à chaque modification de la feuille. Dans un fichier avec plusieurs centaines de formules INDIRECT, chaque frappe au clavier déclenche autant de recalculs.
Solution : Réserve INDIRECT aux vrais besoins de dynamique. Pour des références qui ne changent pas souvent, utilise des références directes ou INDEX qui ne sont pas volatiles. Si ton fichier rame, passe en calcul manuel (Formules > Options de calcul > Manuel) et déclenche les calculs avec F9.
Tu cherches surtout à corriger l'erreur #REF! affichée dans ta cellule, sans passer par la fonction INDIRECT ? Consulte la fiche dédiée à l'erreur #REF! pour comprendre toutes ses causes et comment la corriger.

INDIRECT vs ADRESSE vs DECALER vs INDEX
« Je veux que ma formule pointe ailleurs selon une sélection, je prends laquelle ? » Tout dépend de ce que tu lui donnes en entrée : INDIRECT est la seule à partir d'un texte que tu fabriques (Janvier!B5) pour te renvoyer la valeur, parfaite pour un dashboard où l'utilisateur choisit la feuille dans une liste déroulante. Si tu veux juste produire un texte d'adresse comme $C$5, c'est ADRESSE ; pour faire glisser ou grandir une plage, c'est DECALER ; et dès que la dynamique n'est pas le sujet, préfère INDEX, non volatile, plus rapide et seul à lire encore un classeur fermé.
| Critère | INDIRECT | ADRESSE | DECALER | INDEX |
|---|---|---|---|---|
| Entrée principale | Texte représentant une référence | Numéros de ligne et colonne | Référence + décalage numérique | Plage + position |
| Résultat | Valeur de la cellule référencée | Texte d'adresse ($C$5) | Référence décalée (ou plage) | Valeur extraite |
| Volatile | ✅ Oui | ❌ Non | ✅ Oui | ❌ Non |
| Classeurs fermés | ❌ Non (#REF!) | ⚠️ Retourne un texte seulement | ❌ Non | ✅ Oui (références directes) |
| Plages redimensionnables | ⚠️ Non directement | ❌ Non | ✅ Oui | ❌ Non |
| Cas d'usage principal | Dashboards avec sélection de feuille | Construire des textes d'adresse | Plages dynamiques, graphiques | Recherches rapides et performantes |
Questions fréquentes
INDIRECT est sensible à la casse pour les noms de feuilles : Janvier et janvier sont deux feuilles différentes. Vérifie aussi que la feuille existe dans le classeur et qu'elle est ouverte (INDIRECT ne fonctionne pas avec les classeurs fermés).
Si le nom de feuille contient des espaces, encadre-le d'apostrophes : "'Feuille 1'!A1". Sans apostrophes, tu obtiens #REF! même si la feuille existe.
=A1 crée une référence directe qui se met à jour automatiquement si tu déplaces des cellules. =INDIRECT(A1) lit le texte dans A1 et l'interprète comme adresse, créant une référence basée sur le contenu de A1, pas sa position.
Si A1 contient le texte "B5", =INDIRECT(A1) renvoie le contenu de B5. Si tu déplaces B5, la formule ne suit pas : elle continue à chercher ce qu'il y a en B5.
Non. INDIRECT renvoie #REF! si le classeur source n'est pas ouvert. C'est une limitation importante qui la distingue des références directes entre classeurs.
Pour travailler avec des fichiers fermés, utilise des références directes (=[Classeur.xlsx]Feuil1!A1) ou des requêtes Power Query, qui peuvent lire des fichiers externes sans les ouvrir.
Crée une validation de données en source =INDIRECT(A1), où A1 contient le nom d'une plage nommée. Quand A1 change, la liste déroulante affiche automatiquement les valeurs de la nouvelle plage.
C'est la technique classique pour des listes en cascade : choisir un pays en A1 met à jour la liste de villes en B1, choisir une région met à jour la liste de départements, etc. Tout sans VBA.
INDIRECT est volatile : elle recalcule à chaque modification de la feuille, même si les données référencées n'ont pas changé. Dans les fichiers avec des centaines de formules INDIRECT, cela peut ralentir Excel de manière perceptible. Limite son usage aux vrais besoins de dynamique. Pour des références qui ne changent pas souvent, INDEX ou les références directes sont beaucoup plus performants.
Pour aller plus loin
Continue sur ta lancée après la fonction INDIRECT : la leçon associée, un modèle prêt à l'emploi et le guide pour progresser.
Tout voir




