IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Les fonctions Index et Equiv



Image non disponible

Cet article décrit les fonctions INDEX / EQUIV, et montre comment les associer pour effectuer des recherches dans vos tableaux.

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

INDEX et EQUIV sont deux fonctions de la catégorie "Recherche".

INDEX renvoie une valeur ou la référence de la cellule au croisement d'une ligne et d'une colonne dans une plage de données.
EQUIV renvoie la position de la valeur cherchée dans le tableau.

Contrairement aux fonctions RECHERCHEV et RECHERCHEH qui ne renvoient que la première donnée trouvée, les fonctions INDEX et EQUIV, utilisées ensemble, permettent d'extraire plusieurs éléments répondant à la recherche dans un tableau.

Tous les exemples présentés dans le tutoriel sont disponibles dans le classeur téléchargeable en bas de cette page.

II. La fonction Index

II-A. Description

La fonction INDEX peut renvoyer une valeur (formule matricielle) ou la référence de la cellule (formule référentielle) à l'intersection d'une ligne et d'une colonne dans une plage de cellules.

Définition des plages et constantes matricielles :
     Une plage matricielle partage une même formule.
     Par exemple, dans une nouvelle feuille de calcul, sélectionnez la cellule A1.
     Collez cette formule
=LIGNE(Feuil1!$B$2:$B$20)-LIGNE(Feuil1!$B$2)
     Sélectionnez la plage A1:A19
     Appuyez sur la touche clavier F2
     Pour valider la formule matricielle, appuyez sur CTRL+MAJ+ENTRÉE.

     Une constante matricielle est un groupe de constantes qui sert d'argument dans la formule.
     Dans l'exemple ci-dessous, la constante matricielle {"A";"B";"C";"D";"E";"F"} affiche une lettre aléatoire entre A et F :
=INDEX({"A";"B";"C";"D";"E";"F"};(ENT(ALEA()*6+1)))

La fonction INDEX affiche la valeur d'erreur #REF! si les arguments no_lig et no_col font référence à une cellule située en dehors du tableau.

II-A-1. La forme matricielle

Renvoie une donnée d'un tableau ou d'une matrice à partir des numéros de ligne et de colonne indiqués.

La syntaxe est
INDEX(tableau;no_ligne;no_col)

tableau définit la plage de données où va être effectuée la recherche
no_ligne définit la ligne du tableau
no_col définit la colonne du tableau

Par exemple :
En spécifiant un numéro de ligne et de colonnes d'un tableau, vous pouvez récupérer le contenu de la cellule à cette intersection.

Image non disponible


Au moins un des deux arguments no_ligne ou no_col doit être spécifié.

Si les arguments no_lig et no_col sont tous les deux utilisés, la fonction INDEX renvoie la valeur de la cellule située à l'intersection des numéros de ligne et de colonne.

Si l'argument tableau contient une seule ligne ou colonne, l'argument no_lig ou no_col correspondant est facultatif.

Si vous spécifiez la valeur 0 pour l'argument no_lig ou no_col, la fonction INDEX renvoie respectivement la matrice des valeurs de la colonne ou de la ligne entière.

II-A-2. La forme référentielle

Dans ce cas, la fonction INDEX renvoie la référence de la cellule située à l'intersection d'une ligne et d'une colonne déterminées.
Cette référence est utilisable dans d'autres formules.
L'exemple suivant renvoie l'adresse de la cellule à l'intersection de la 5ième ligne et de la 2ième colonne dans la plage A1:B10 (soit $B$5).
=CELLULE("adresse";INDEX(A1:B10;5;2))

La syntaxe est
INDEX(réf;no_lig;no_col;no_zone)

réf est une référence à une ou plusieurs plages de cellules.
Placez l'argument réf entre parenthèses lorsque vous utilisez des plages multiples. Vous pouvez choisir la sélection sur laquelle la fonction doit être exécutée grâce à l'argument no_zone.
Cet exemple renvoie la référence à l'intersection de la 5ième ligne et de la 1ière colonne dans la 3ième plage de cellules (G1:H10) :
=INDEX((A1:B10;D1:E10;G1:H10);5;1;3)

no_zone définit la plage de l'argument réf pour laquelle l'intersection de no_col et no_lig doit être renvoyée.
La première zone sélectionnée ou entrée porte le numéro 1, la deuxième, le numéro 2 et ainsi de suite.
Si l'argument no_zone est omis, la fonction INDEX utilise la zone numéro 1.

Par exemple, si l'argument réf décrit les cellules (A1:B10;D1:E10;G1:H10), l'argument no_zone 1 correspond à la plage A1:B10, l'argument no_zone 2, à la plage D1:E10 et l'argument no_zone 3, à la plage G1:H10.

Si chaque zone de l'argument réf contient une seule ligne ou colonne, l'argument no_lig ou no_col, respectivement, devient facultatif. Par exemple, dans le cas d'un argument référence à une seule ligne, utilisez la fonction INDEX(réf;;no_col).

no_lig est le numéro de la ligne de référence à partir de laquelle une référence doit être renvoyée.

no_col est le numéro de la colonne de réf à partir de laquelle une référence doit être renvoyée.

Si vous spécifiez la valeur 0 (zéro) pour l'argument no_lig ou no_col, la fonction INDEX renvoie respectivement la référence de la colonne ou de la ligne entière.

Si les arguments no_lig et no_col sont omis, la fonction INDEX renvoie la zone de l'argument référence définie par l'argument no_zone.

II-B. Exemples

II-B-1. Afficher une donnée aléatoire

Cet exemple affiche une donnée aléatoire parmi les cellules de la plage A10:A15.

Formule
Sélectionnez
=INDEX(A10:A15;(ENT(ALEA()*6+1)))



Appuyez sur la touche F9 pour relancer le calcul.

II-B-2. Renvoyer la dernière donnée saisie dans la colonne A



La formule fonctionne également s'il y a des cellules vides entre les données. Cet exemple suppose qu'il y a moins de 1000 données dans la colonne A.
(formule matricielle à valider par Ctrl+Maj+Entree).

Formule
Sélectionnez
=INDEX(A1:A1000;MAX(NON(ESTVIDE(A1:A1000))*LIGNE(A1:A1000));1)



II-B-3. Renvoyer la dernière donnée saisie dans la ligne 1

Cette formule renvoie la donnée la plus proche, à gauche de la cellule AA1
(formule matricielle à valider par Ctrl+Maj+Entrée)

Formule
Sélectionnez
=INDEX(A1:Z1;MAX(COLONNE(A1:Z1)*(A1:Z1<>"")))



II-B-4. Extraire une donnée sur 5 dans la plage A1:A100

Saisissez la formule dans la première ligne d'une autre colonne puis utilisez la poignée de recopie vers le bas.

Formule
Sélectionnez
=SI(LIGNE()=1;A1;INDEX($A$2:$A$100;(LIGNE()-2)*5+5))



Image non disponible

II-B-5. Extraire les données d'une liste sans doublons

Si par exemple votre liste initiale est dans la plage A1:A15,
En B1, saisissez :

Formule
Sélectionnez
=A1

En B2, saisissez cette formule matricielle (à valider par Ctrl+Maj+Entree).

Formule
Sélectionnez
=SI(B1="";"";INDEX(A2:A$16;MIN(SI(NB.SI(B$1:B1;A2:A$15);LIGNE(A$16)-LIGNE()+1;LIGNE(A2:A$15)-LIGNE()+1))))



Puis étirez la formule vers le bas.

Image non disponible

III. La fonction Equiv

III-A. Description

La fonction EQUIV recherche une valeur dans une colonne d'un tableau et renvoie sa position verticale (numéro de ligne).

La syntaxe est :
Equiv(valeur_cherchée;tableau_recherche;type)

valeur_cherchée est la donnée recherchée dans le tableau.
La donnée peut être de tout type: texte, numérique ou logique.

tableau_recherche est le tableau de données.

type spécifie la recherche à effectuer.
Si la valeur de l'argument type est -1 (valeur par défaut), la fonction EQUIV trouve la plus petite valeur qui est supérieure ou égale à celle de l'argument valeur_cherchée. Les valeurs de l'argument matrice_recherche doivent être placées en ordre décroissant.

Si la valeur de l'argument type est 0, la fonction EQUIV trouve la première valeur exactement équivalente à celle de l'argument valeur_cherchée. Les valeurs de l'argument matrice_recherche peuvent être placées dans un ordre quelconque.
L'application vérifie tous les éléments de l'argument tableau_recherche les uns après les autres, jusqu'à ce qu'il trouve une donnée égale à la valeur recherchée.
Si l'argument valeur_cherchée est une donnée texte, les caractères génériques peuvent être utilisés. L'astérisque (*) correspond à une séquence de caractères. Le point d'interrogation (?) correspond à un caractère particulier. Si vous voulez rechercher un véritable point d'interrogation ou astérisque, tapez un tilde (~) avant ce caractère.

Si la valeur de l'argument type est 1, la fonction EQUIV trouve la valeur la plus élevée qui est inférieure ou égale à celle de l'argument valeur_cherchée. Les valeurs de l'argument tableau_recherche doivent être triées en ordre croissant.

La fonction EQUIV n'est pas sensible à la casse.

Une valeur d'erreur #N/A est renvoyée si la donnée n'est pas trouvée dans le tableau.

III-B. Exemples

III-B-1. Retrouver la position d'une donnée dans une plage de cellules

Cet exemple affiche la position de la donnée "dvp" dans la plage cible A1:A10

Formule
Sélectionnez
=EQUIV("dvp";A1:A10;0)



Image non disponible


Si le mot recherché est dans la cellule A3, le résultat renvoyé sera 3.
La valeur recherchée peut être numérique ou du texte.
La fonction EQUIV n'est pas sensible aux majuscules ou minuscules pour les recherches de texte.

Si vous ne connaissez qu'une partie du mot recherché, il est possible d'insérer des valeurs génériques.
L'astérisque est équivalent à une séquence de caractères,
Le point d'interrogation est équivalent à un caractère unique.

Par exemple :

Formule
Sélectionnez
=EQUIV("d*";A1:A10;0)



III-B-2. Extraire le dernier mot d'un texte saisi dans la cellule A1

Formule
Sélectionnez
=DROITE(A1;EQUIV(" ";STXT(A1;NBCAR(A1)-LIGNE(INDIRECT("1:"&NBCAR(A1)));1);0))



A valider par Ctrl+Maj+Entree

III-B-3. Appliquer une formule conditionnelle sur une plage de cellule

Cet exemple renvoie les valeurs max, min et la moyenne de B3:B10, pour les dates comprises entre F2 et G2.
     Les dates sont dans la plage A3:A10
     Les données à calculer sont en B3:B10
     La date de début est saisie en F2
     La date de fin est saisie en G2

La valeur maxi :

Formule
Sélectionnez
=MAX(INDIRECT(ADRESSE((EQUIV($F$2;A3:A10)+2);2)&":"&ADRESSE((EQUIV($G$2;A3:A10)+2);2)))



La valeur mini :

Formule
Sélectionnez
=MIN(INDIRECT(ADRESSE((EQUIV($F$2;A3:A10)+2);2)&":"&ADRESSE((EQUIV($G$2;A3:A10)+2);2)))



La moyenne

Formule
Sélectionnez
=MOYENNE(INDIRECT(ADRESSE((EQUIV($F$2;A3:A10)+2);2)&":"&ADRESSE((EQUIV($G$2;A3:A10)+2);2)))



Image non disponible

III-B-4. Faire une recherche verticale RECHERCHEV sur plusieurs feuilles

La fonction suivante recherche le contenu de la cellule FeuilResult!A2.
Les données sont dans la plage C3:F20 de chaque feuille (Feuil1 à Feuil4):

Formule
Sélectionnez
=RECHERCHEV(FeuilResult!A2;INDIRECT("Feuil"&NB(EQUIV(FeuilResult!A2;Feuil1!C3:C20;0))+
NB(EQUIV(FeuilResult!A2;Feuil2!C3:C20;0))*2+NB(EQUIV(FeuilResult!A2;Feuil3!C3:C20;0))*3+
NB(EQUIV(FeuilResult!A2;Feuil4!C3:C20;0))*4&"!C3:F20");4;FAUX)



Si la donnée saisie (FeuilResult!A2) est trouvée, la fonction renvoie la valeur de la colonne F.
La formule suppose que la donnée recherchée est unique dans le colonne C de chaque plage (Feuil1!C3:C20 à Feuil4!C3:C20).


La partie :

Formule
Sélectionnez
INDIRECT("Feuil"&NB(EQUIV(FeuilResult!A2;Feuil1!C3:C20;0))+
NB(EQUIV(FeuilResult!A2;Feuil2!C3:C20;0))*2+NB(EQUIV(FeuilResult!A2;Feuil3!C3:C20;0))*3+
NB(EQUIV(FeuilResult!A2;Feuil4!C3:C20;0))*4



Permet de définir dans quelles feuilles faire la recherche.

III-B-5. Extraire les valeurs impaires contenues dans la plage A1:A5

En B1, saisissez:

Formule
Sélectionnez
=(A1=IMPAIR(A1))*1



Etirez la formule vers le bas.
La fonction renvoie 1 si la donnée est impaire, et 0 dans le cas contraire.

En C1, saisissez:

Formule
Sélectionnez
=EQUIV(1;$B$1:$B$5;0)



En C2, saisissez:

Formule
Sélectionnez
=EQUIV(1;INDIRECT("B"&(SOMME($C$1:C1)+1)&":B5");0)



Puis étirez la formule vers le bas.
Vous obtenez la position relative des lignes impaires dans le tableau.

En D1, saisissez:

Formule
Sélectionnez
=SI(ESTERREUR(DECALER($A$1;SOMME($C$1:C1)-1;0));"";DECALER($A$1;SOMME($C$1:C1)-1;0))



Puis, étirez la formule vers le bas.

Les colonnes B et C peuvent ensuite être masquées si besoin.

Image non disponible

IV. L'association Index Equiv

IV-A. Description

L'association INDEX / EQUIV est une solution plus complexe à mettre en œuvre que la classique fonction RECHERCHEV mais moins limitative.
Elle permet de :
     Gérer des plages multiples non adjacentes et sans restriction d'ordre.
     D'effectuer une recherche multicritères dans la matrice.

Vous pouvez par exemple afficher le prix d'une référence saisie en E6 en fonction du nombre de pièces saisi en E7.
Formule à valider par Ctrl+Maj+Entrée

Formule
Sélectionnez
=INDEX(C9:C20;EQUIV(1;(A9:A20=E6)*(B9:B20=E7);0))



A9:A20 contient les références
B9:B20 contient le nombre de pièces
C9:C20 contient les prix

Image non disponible

IV-B. Exemples

IV-B-1. Afficher la donnée (texte ou numérique) qui apparait le plus souvent dans la plage A1:A10

Formule
Sélectionnez
=INDEX(A1:A10;EQUIV(MAX(NB.SI(A1:A10;A1:A10));NB.SI(A1:A10;A1:A10);0))



Formule matricielle à valider par Ctrl+Maj+Entrée

Image non disponible

IV-B-2. Créer une relation entre plusieurs tableaux

Lorsque vous stockez vos données dans plusieurs tables (bien que ce soit fortement déconseillé sous Excel), vous aurez peut être besoin ensuite d'une liaison entre les informations contenues dans les bases.

Par exemple:
Vous disposez de deux tableaux contenant chacun un type de données (Le nom et le code produit dans un premier tableau, le nom et le prix unitaire dans un deuxième tableau).
Vous souhaitez afficher une synthèse qui renvoie le prix unitaire par code produit.
Plutôt que de reconstituer une base de données commune par de fastidieux copier/coller, et sans avoir besoin de trier et reclasser les informations, vous pouvez créer une relation simple entre des tableaux, grâce aux fonctions Index/Equiv.

Image non disponible

Formule
Sélectionnez
=SI(ESTNA(INDEX($E$20:$E$25;EQUIV(INDEX($A$20:$A$24;EQUIV(G20;$B$20:$B$24;0));$D$20:$D$25;0)));
"";INDEX($E$20:$E$25;EQUIV(INDEX($A$20:$A$24;EQUIV(G20;$B$20:$B$24;0));$D$20:$D$25;0)))




Remarque:
Il s'agit ici d'un simple exemple pour montrer une capacité des fonctions Index/Equiv. Cette solution a ses limites, notamment si un élément apparait plusieurs fois dans une des tables car seule la première donnée trouvée sera prise en compte.
Sous Excel, privilégiez toujours des bases des données uniques, sinon utilisez Access qui permet de gérer facilement les bases relationnelles.

IV-B-3. Lister toutes les occurrences contenant une chaîne particulière

L'exemple liste toutes les cellules de la plage A11:A20 qui contiennent le mot "DVP".

En C14, vous allez saisir la chaîne de caractères à rechercher.
Dans la cellule E14, saisissez cette formule:

Formule
Sélectionnez
=EQUIV("*"&C$14&"*";DECALER(A$11:A$20;SOMME(E$13:E13);0);0)



Puis utilisez la poignée de recopie vers le bas.

Dans la cellule F14, saisissez:

Formule
Sélectionnez
=SI(ESTNA(INDEX(A$11:A$20;SOMME(E$14:E14)));"";INDEX(A$11:A$20;SOMME(E$14:E14)))



Puis utilisez les poignées de recopie vers le bas.
Vous pouvez si vous le souhaitez ensuite, masquer les colonnes intermédiaires et les valeurs #N/A.

Image non disponible

IV-B-4. Rechercher entre bornes sur plusieurs colonnes

La fonction retrouve dans quelle ligne est située la valeur de la cellule E11 en fonction des données Mini et Maxi indiquées dans les colonnes A et B. Le contenu de la colonne C est renvoyé en résultat.
Si vous recherchez 13 (13 étant compris entre 12 et 14), la formule affichera "B".

Image non disponible

Formule
Sélectionnez
=INDEX(C10:C14;EQUIV(1;(A10:A14=MAX((A10:A14<=E11)*A10:A14))*(B10:B14=MIN(SI(B10:B14>=E11;B10:B14)));0))



Formule matricielle à valider par Ctrl+Maj+Entrée

V. Liens

VI. Remerciements

Je remercie toute l'équipe Office de DVP et particulièrement Jean Ballat, pour la relecture et la correction du tutoriel.

VII. Téléchargement

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2008 developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.