Monsieur Excel
Pour tout savoir faire sur Excel !

22 mars 2020

La fonction Index()

Dans mon article du 28 février dernier titré « Visicalc, le grand-père d’Excel », je vous montrais que le tout premier tableur, Visicalc, possédait déjà les bases de toute modélisation efficace grâce à la présence des fonctions Choose (Index) et Lookup (Recherche).

J’y expliquais aussi un certain nombre de choses sur l’évolution de la fonction Recherche() dans le temps. Il est peut-être utile, et nous le ferons dans cet article, de revoir la fonction Index() car je vois souvent des utilisateurs dans les entreprises qui la maîtrisent mal. Pire encore, certaines vidéos Internet sur cette fonction ont, dans le meilleur des cas, des lacunes évidentes et, dans le pire des cas, disent clairement des contre-vérités.

Il faut avouer que l’aide de Microsoft – loin d’être parfaire ! – a certainement contribué à cette confusion générale, à laquelle j’essaye de répondre dans cet article.

Les erreurs dans l’aide de Microsoft

La partie gauche de l’image ci-dessous montre ce qui apparaît quand on entre =index( dans une cellule. Microsoft a fait très fort, car il y a là trois erreurs, que je leur ai signalées en vain il y a plus de 20 ans et qui n’ont jamais été corrigées !

Ils ont oublié la première syntaxe, celle où il y a un vecteur et non une matrice.
Ils parlent de matrice dans la première syntaxe et de zone dans la seconde : il faudrait dire « matrice » dans les deux cas. Ou, mais moins précisément, « zone » dans les deux cas…                                                    
Si vous écrivez =index(matrice;n°ligne;) vous obtenez une erreur avec un Excel traditionnel et pas du tout ce à quoi vous pensiez avec un Excel en licence 365 ProPlus.


Pour commenter la remarque n°3, cette erreur de documentation est présente dans toute l’aide d’Excel et pour toutes les fonctions à plusieurs arguments : le « ; » devrait être entre crochets : il faudrait écrire =index(matrice;n°ligne[;n°colonne]) et non =index(matrice;n°ligne;[n°colonne]).

Si l’on regarde la partie droite de l’image, on peut faire les mêmes remarques que ci-dessus, plus noter que les arguments sont séparés dans cette aide par des « , » alors que ce devrait être des « ; ».

La bonne syntaxe pour index()

Vous pouvez voir dans la copie d’écran ci-dessous la syntaxe que je propose pour index(). Il me semble bien plus clair d’éliminer tous les crochets représentant des paramètres facultatifs et de dire, comme en I5:I7, qu’il y a en fait trois syntaxes : pour un vecteur, pour une matrice et pour {mat}, c’est-à-dire un ensemble de matrices. Voici donc ma proposition pour une bonne syntaxe d’Index :

=index(vecteur;position)
=index(matrice;n°lig;n°col)
=index({mat};n°lig;n°col;n°mat)

Remarque – Nous avons donné le nom « Alfred » à l’ensemble des trois matrices à fond jaune. Si la matrice retenue n’a pas le nombre de lignes et/ou de colonnes demandé, le résultat est #REF !