«

»

Fonction INDIRECT

La fonction INDIRECT est une fonction très intéressante car elle va nous permettre de concevoir ou de modifier des références vers des cellules ou vers d’autres feuilles de calcul en jouant sur les paramètres qui constituent une référence.

Nous allons voir au travers de 3 exemples comment utiliser la fonction INDIRECT.

Présentation de la fonction INDIRECT

La fonction INDIRECT attend un seul paramètre à savoir la référence d’une cellule mais celle-ci doit être de type Texte, autrement dit nous devons écrire la référence à une cellule entre guillemets.

fonction-indirect_1Par exemple, si nous avons en A1 le mot “Bonjour” nous pouvons récupérer le contenu de A1 en faisant un simple =A1. Maintenant si je veux récupérer le contenu de A1 mais en passant par la fonction INDIRECT je vais devoir écrire la fonction suivante

=INDIRECT(“A1”)



Le résultat est exactement le même mais dans le cas de la fonction INDIRECT la référence a été écrite entre guillemets

Bon ok mais c’est quoi l’intérêt


Exemple : Choisir aléatoirement des clients

Prenons le cas d’une base client et nous souhaitons sélectionner un échantillon de façon aléatoire. Supposons que nous ayons plus de 53769 noms dans notre base.

La fonction ALEA.ENTRE.BORNES

Nous allons tout d’abord utiliser la fonction ALEA.ENTRE.BORNES pour retourner une valeur entre 2 et 53769. 2 car il s’agit du numéro de ligne contenant le premier nom de nos clients et 53770 car il s’agit de la dernière ligne.

=ALEA.ENTRE.BORNES(2;53770)

Taille de notre échantillon

Nous voulons extraire un échantillon de 1% de nos clients. Et pour que nous obtenions toujours une valeur entière, nous allons utiliser la fonction ENT pour renvoyer le résultat.

=ENT(53769*1%) => Soit 537

A ce stade, nous avons juste généré une liste de 537 valeurs aléatoires

Collage-Spécial en Valeur

Bien sur, il ne faut pas conserver le résultat de formule car la fonction ALEA.ENTRE.BORNES va à chaque nouvelle action dans Excel, recalculer de nouvelles valeurs.

Pour convertir le résultat de la formule en valeur, il faut passer par un collage spécial (aller sur l’article pour voir la technique)


Convertir en référence avec INDIRECT

L’ordinateur a généré comme premier nombre aléatoire la valeur 41721. Donc notre souhait est de récupérer la valeur du mail contenu dans la cellule A41721.

=A41721 et nous avons le résultat suivant

Mais nous n’avons pas du tout utiliser la valeur dans la cellule E2. C’est ce que nous allons faire avec la fonction INDIRECT.

Nous allons maintenant écrire la même référence mais dans une fonction INDIRECT et en écrivant la référence de la cellule entre guillemet. Le résultat reste le même

=INDIRECT(“A41721”)

C’est maintenant que tout se joue :

  1. Nous allons retirer de la chaîne de caractère le numéro de la ligne
  2. A la suite de la chaîne de caractères, nous allons ajouter le symbole & (comme cela a été expliqué dans cet article)
  3. Enfin, nous allons sélectionner la cellule E2 (la cellule qui contient le numéro de la ligne)

L’écriture devient alors

=INDIRECT(“A”&E2)

Il ne nous reste plus qu’à recopier cette formule pour les 536 autres valeurs est ainsi récupérer les emails de nos clients

 

Si vous préférez retourner le nom (colonne C) et le prénom (colonne B) de nos clients, cette fois-ci le résultat sera le suivant

=INDIRECT(“C”&E2)&” ” &INDIRECT(“B”&E2)


La fonction INDIRECT avec le nom des feuilles comme variable

Dans ce nouvel exemple nous allons construire des références en utilisant comme variable le nom des feuilles de calcul.

Fonction_INDIRECT_0Par exemple ici nous avons quelques données relatives à la France et nous avons la même structure pour 6 autres pays.

 



 

 

 

 

 

Nous voulons récupérer pour chaque pays, le niveau de TVA des différents pays listés en colonne A.

Vous constatez également que ces noms utilisés en colonne A sont les mêmes que les noms des onglets.



 

 

 

 

 

Pour aller récupérer la TVA des différents pays, beaucoup d’utilisateurs d’Excel iraient pointer sur chaque feuille, une par une, afin d’avoir un résultat identique à celui de l’image. Ce qui revient à faire 6 liaisons manuellement.

 

 

Or vous constatez, que systématiquement

  • Nous récupérons toujours la cellule B7 de plusieurs feuilles
  • La référence de nos feuilles (les pays) est également présent en colonne A

Une nouvelle fois la fonction INDIRECT va nous permettre de relier la valeur du pays de la colonne A pour remplacer les références aux feuilles de calcul.


Nous commençons par aller rechercher la valeur de la TVA pour la France et nous inscrivons cette référence dans une fonction INDIRECT.

=INDIRECT(“FR!B7”)

 

Maintenant, analysons comment se code une référence entre les onglets. Vous avez tout d’abord le nom de la feuille, suivi d’un point d’exclamation. Le point d’exclamation est le symbole qui sépare toujours le nom d’un onglet de la référence de la cellule.

 

Appliqué à notre problème, nous allons remplacer le terme FR par les valeurs contenues en colonne A (le point d’exclamation reste entre les guillemets). La formule en B2 va donc maintenant s’écrire :

=INDIRECT(A2&”!B7″)

Nous avons bien, en dehors des guillemets, la partie variable de notre référence et entre guillemets, la partie fixe. Pour faire cette liaison, nous avons de nouveau utilisé le symbole &.

Particularité

Dans le cas où le nom de votre feuille de calcul contient des espaces, le nom de la feuille dans la référence sera entouré avec des apostrophes. Nous devons donc conserver ces apostrophes dans notre fonction INDIRECT. La fonction s’écrit alors de la façon suivante :

=INDIRECT(“‘”&A3&”‘!B7”)

Comme nous devons conserver les apostrophes, avant et après la partie variable, nous commençons par écrire

 

 

 

  1. Entre guillemets la première apostrophe (et uniquement cela)
  2. Le symbole &
  3. La référence à la cellule qui contient le nom du pays
  4. Encore le symbole &
  5. Enfin, entre guillemet, le reste de la référence (le point d’exclamation suivi de la référence qui reste invariablement B7)



Lien Permanent pour cet article : https://www.excel-exercice.com/indirect/

(19 commentaires)

Passer au formulaire de commentaire

  1. LAWRENCE Paul

    Bonjour.
    Vos explications sont très claires. Une petite remarque cependant.
    Vous écrivez: “Attention, il n’est possible d’attribuer une source autre que votre feuille active que depuis Excel 2010.”
    Voici une méthode qui fonctionne qu’elle que soit la version d’Excel:
    Exemple dans Excel 2007.
    Dans “Validation des données”, si la Source se trouve dans une autre feuille, il faut qu’elle soit identifiée par un Nom que l’on détermine en utilisant le Menu Données puis Gestionnaire des noms.
    Dans le Gestionnaire des noms, on crée un Nom qui fera référence à une cellule (ou à une plage de cellules) située dans une autre feuille que la feuille active.
    En face de Nom:, écrire le nom choisi
    En face de Zone: choisir classeur
    En face de Fait référence à: cliquer sur la petite grille à droite et sélectionner la feuille puis la cellule ou la plage de cellules qui servira de ultérieurement de Source dans Données, Validation des données.
    Pour que le Nom choisi soit valable, ne pas utiliser d’espaces, ni d’accents.
    Pour éviter tout conflit, ne pas employer un Nom déjà existant dans Excel.
    L’emploi de majuscules permet de le repérer comme nom créé.
    Ce Nom pourra être utilisé dans toutes les formules de toutes les feuilles du classeur.
    Cordialement

  2. Anonyme

    Bonjour
    sous MO 2010 je souhaiterais appliquer la formule INDIRECT au 2ème mois de cette formule (ici Mars) =SOMME(Janvier:Mars!AB35) Mais je n’y arrive pas ! =SOMME(INDIRECT(“Janvier:Mars!AB35”)) Excel m’indique l’erreur #REF!
    Merci de m’éclairer

  3. loubet

    Bonjour, desolée je suis un peu perdue: je souhaite mettre un champs multiple ( en fait deux choix “oui” ou” non)” et seulement dans le cas ou “oui ” est chosi j aimerai que cela renvoi a une cas a remplir et que cela soit blocant si cette case n est pas completé..je ne sais pas si je suis claire mais merci par avance de votre aide

  4. Majérus Paul

    Bonjour,

    Je voudrais ne pas bloquer la case de référence afin de pouvoir étirer ma formule tout en faisant toujours référence à une page. Est-ce possible ? Comment dois-je écrire cette formule ? D’avance, merci pour votre aide !

    1. Anonyme

      Bonjour

      $A va bloquer la colonne A
      $1 va bloquer la ligne 1

      Donc si tu veux rester toujours dans la meme cellule : $A$1

  5. Lili

    Bonjour,

    J’ai créer un fichier excel dans lequel on encode régulièrement des données.

    Dans ma premier feuille, toutes les données sont encodées mais dans ma 2ème feuille, j’aimerais que dans celle-ci, seule certaines données soient repris automatique par rapport à ma 1ère feuille. (le tableau croisé ne me correspond pas car dans cette 2ème feuille, d’autres colonnes s’y ajouterons pour encoder d’autres données.

    Pourriez-vous m’aider ?

    Merci !

  6. christ

    bonjour a vous
    j’ai vu votre professionnalisme…
    et je voudrais savoir si vous pouvez m’aider pour la création d’un devis tres particulier en vba ou autre….
    car je n’y connais rien et je suis une petite entreprise et j’aimerais que mes devis soient automatiques et personnel a mon entreprise…
    j’ai essayé des logiciels tout fait mais cela ne me convient pas
    donc je demande votre aide svp
    merci
    a+

  7. Pajude

    Bonjour,
    J’ai suivi vos explications très claires pour cette fonction Indirect. Je suis sur Excel 2007, j’ai fait l’exercice et j’ai un souci. Mes cellules sont en format standard, dans ma feuille Global, la TVA remonte au format 0,196 pour 19.60%. J’ai modifié le format en %, le PB c’est que le PIB remonte en %
    Merci de votre aide

  8. marc1325

    Bonjour,
    merci pour ces précieux tutos.

    Un petit détail qui ne fonctionne pas avec Excel 2010, la formule FormulaText permettant normalement d’afficher la définition d’une formule dans une cellule.
    Toutefois, cette fonction est aisément redéfinissable par le biais d’un module et de la fonction personnalisée suivante :
    Function FT(MyCell As Range)
    FT = MyCell.Formula
    End Function

    Pour les détails d’implémentation de cette méthode, se référer à ce tutorial : https://www.youtube.com/watch?v=wpRGTvhp1cY

    1. Frédéric LE GUEN

      Dans Excel 2013, il y a la fonction FORMULETEXTE(référence) qui vous permet d’écrire dans une cellule la formule contenu dans une autre cellule.

  9. WIMI

    Bonjour,

    Merci infiniment pour vos explications..Tout semble clair à présent pour moi.. Juste une question, est il possible de changer le No_index de la colonne de manière automatique pour des formules déjà établies?

    Merci d’avance

  10. atoch

    bonjour,
    je suis à la recherche d’une solution pour que les liens ne changent pas dans un sous dossier contenant ma feuille excel.
    je m’explique : j’ai à la base un dossier “modèle” qui contient 6 sous-dossiers. Ce dossier “modèle sera copié et son nom va changer en fonction du client.
    par contre aucun changement dans les sous-dossiers.est il possible de garder les liens dans les inters sous-dossiers ?

    merci d’avance pour votre aide

    atoch

  11. Laurence

    Bonjour,

    J’essaie d’utiliser la formule indirect avec le format de cellule «date» (jj-mmm), mais je n’y parviens pas… Je dois avouer que la formule avec les espaces m’a quelque peu aidé, mais j’aimerais savoir si c’est possible avec des dates (c’est pour un fichier de feuille de temps hebdomadaires avec un onglet contenant le sommaire annuel).

    Merci d’avance!

  12. said

    bjr,

    c’est vraiment intéréssant merci pour ces explicatio,; toute fois je veux créer un fichier de plusieure onglets, et sur l’onglet recap je veux mettre deux menus déroulent ce qui fait deux choix conditionnelle pour recupéré les données des autres onglets, pouvez vous m’aider SVP? 🙂

    merci 🙂

  13. desfetes

    Bonjour,

    Pouvez-vous me dire sous qu’elle version excel travaillez vous car elle semble vraiment très sympa??

    1. Frédéric LE GUEN

      Excel 2013
      Téléchargeable en haut à droite de cette page

  14. Zorba

    Bonjour,
    Tout fonctionne parfaitement, merci ! Mais je souhaiterais savoir comment récupérer de façon automatique la liste des onglets ? Celle que vous mettez en colonne A… Et ce, sans macro s’il vous plaît !

    1. Frédéric LE GUEN

      Bonsoir,
      Ce n’est malheureusement pas possible d’extraire les noms de vos feuilles sans passer par une macro. Mais c’est pas si dur de faire des macros 😉 Pour votre besoin, juste 4 lignes de code suffisent et j’ai justement utlisé cet exemple dans le livre que j’ai écrit (cf référence en haut à droite des pages)

    2. Anonyme

      J’avais eu ce problème et j’ai trouvé une solution sur le web
      (c’est un peu tiré par les cheveux mais ça marche (au moins en Excel 2010)):

      1-Définir un nouveau nom/plage nommée (onglet Formules) (typiquement nom_feuilles) dans la zone “Fait référence à” entrez la formule
      =LIRE.CLASSEUR(1)

      2- Dans toutes les cellules du classeur, la formule suivante appliquée sur les lignes de 3 à n de n’importe quel onglet permet de récupérer le nom de la feuille
      =SI(LIGNE()-1 <= COLONNES(nom_feuilles); DROITE(INDEX(nom_feuilles;LIGNE()-1);NBCAR(INDEX(nom_feuilles;LIGNE()-1))-TROUVE("]";INDEX(nom_feuilles;LIGNE()-1))); "")

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *