L'essentiel —
VLOOKUPrecherche une valeur le long de la colonne la plus à gauche d'un tableau et renvoie quelque chose depuis une colonne située à sa droite :=VLOOKUP(lookup_value, table, col_index_num, [range_lookup]). Le seul réglage qui décide si ça marche, c'est le quatrième argument : mettezFALSE(correspondance exacte) presque à chaque fois. Vous l'oubliez ou vous mettezTRUE? Excel fait une correspondance approximative, qui exige la première colonne triée par ordre croissant et renverra en silence la mauvaise ligne sur des données non triées. Deux limites strictes découlent de sa conception : VLOOKUP ne sait regarder que vers la droite, et son numéro de colonne est un entier codé en dur qui casse dès que vous insérez une colonne. Fonctionne dans toutes les versions ;XLOOKUPlève les deux limites dans Excel 365.
=VLOOKUP(A2, Products, 3, FALSE) ' cherche A2 dans la col 1, renvoie la col 3, exact
=VLOOKUP("APX-100", $E$2:$H$500, 4, FALSE) ' verrouillez le tableau avec $ quand vous recopiez
VLOOKUP est la fonction de recherche la plus utilisée au monde, et presque tous
les problèmes que les gens rencontrent avec elle se ramènent à un seul fait sur son
fonctionnement : elle ne cherche pas dans le tableau. Elle balaie une seule
colonne — la plus à gauche — de haut en bas, et lorsqu'elle trouve votre valeur
elle se décale d'un nombre fixe de colonnes vers la droite. Une fois cette image en
tête, le piège de la correspondance exacte, le mur du « ne peut pas regarder à
gauche » et le numéro de colonne cassé cessent tous d'être des mystères.
Remarque : dans une interface Excel en français, ces fonctions s'appellent RECHERCHEV (VLOOKUP), RECHERCHEH (HLOOKUP), RECHERCHE (LOOKUP), INDEX (INDEX), EQUIV (MATCH), RECHERCHEX (XLOOKUP), SIERREUR (IFERROR), SI (IF), FILTRE (FILTER), SUPPRESPACE (TRIM) et SUBSTITUE (SUBSTITUTE). Les codes d'erreur s'affichent #N/A, #REF!, #NOM?, #VALEUR!, #DIV/0!. Les formules ci-dessous utilisent les noms anglais — le comportement est identique.
Ce que vous allez apprendre
- Le modèle mental : VLOOKUP balaie la première colonne uniquement, puis compte vers la droite
- Le bug n° 1 : le quatrième argument, et pourquoi il doit valoir
FALSE - Le mur : VLOOKUP ne sait pas regarder à gauche — et quoi faire à la place
- Le casseur silencieux : un numéro de colonne codé en dur qui meurt quand vous insérez une colonne
- Ce que
#N/Aveut vraiment dire, et comment le corriger (pas seulement le masquer) - Le seul cas où la correspondance approximative a raison : les recherches par tranches
Le modèle mental : elle balaie la première colonne, puis compte vers la droite
Imaginez votre tableau comme une grille. VLOOKUP pose son doigt en haut de la
colonne la plus à gauche et le fait glisser vers le bas jusqu'à trouver
lookup_value. C'est la seule colonne qu'elle recherche jamais. Quand elle tombe
sur une correspondance, elle déplace son doigt vers la droite de
col_index_num colonnes et lit ce qui s'y trouve.
=VLOOKUP(A2, Products, 3, FALSE)
' | | | |
' | | | +-- correspondance exacte
' | | +------ renvoie la 3ᵉ colonne du tableau
' | +------------ le tableau (la col 1 est celle qu'elle recherche)
' +-------------------- la valeur à trouver, dans la col 1
Deux choses sont donc figées dès le départ. La valeur que vous recherchez doit se
trouver dans la première colonne du tableau que vous lui donnez, et le nombre 3
est compté à partir de cette première colonne, pas à partir de la colonne A de
la feuille. Tout ce qui suit est une conséquence de cette unique conception.
Le bug n° 1 : le quatrième argument (trompez-vous et il vous ment)
range_lookup est facultatif, et c'est précisément le piège. Omettez-le et Excel
applique par défaut TRUE — une correspondance approximative :
=VLOOKUP(A2, Products, 3) ' DANGER — bascule sur la correspondance approximative
=VLOOKUP(A2, Products, 3, TRUE) ' la même chose, écrite en toutes lettres
=VLOOKUP(A2, Products, 3, FALSE) ' CORRECT dans 99 % des cas — correspondance exacte
La correspondance approximative suppose que la première colonne est triée par ordre croissant et renvoie la ligne dont la valeur est la plus grande, tout en restant inférieure ou égale à votre valeur recherchée. Sur une liste de produits non triée, c'est une mauvaise réponse d'apparence aléatoire — et il n'y a aucune erreur, aucun avertissement. La formule renvoie un nombre ; c'est simplement le mauvais. Cette seule omission est le bug VLOOKUP le plus répandu qui soit.
L'habitude qui vous sauve : tapez toujours FALSE (ou 0) comme quatrième
argument, sauf si vous avez une raison précise de ne pas le faire. La correspondance
exacte trouve la ligne que vous visiez ou renvoie #N/A — un honnête « introuvable »
vaut mieux qu'un mauvais nombre silencieux, à tous les coups.
Le mur : VLOOKUP ne sait regarder que vers la droite
Parce qu'elle recherche la première colonne et compte vers la droite, la valeur que vous renvoyez doit se trouver à droite de la valeur que vous recherchez. Vous voulez rechercher un identifiant de produit et renvoyer le nom situé dans une colonne à sa gauche ? VLOOKUP en est tout simplement incapable — il n'existe pas de numéro de colonne négatif.
' Tableau : A = Nom, B = ID. Vous avez l'ID, vous voulez le Nom (à GAUCHE).
=VLOOKUP(F2, A:B, ... ) ' impossible — le Nom est à gauche de l'ID, aucun numéro ne marche
Ce n'est pas une limitation qu'on contourne à force d'astuce — c'est la raison
d'être d'INDEX + MATCH et, plus tard, de
XLOOKUP. Tous deux recherchent et renvoient dans des
plages indépendantes, si bien que le sens cesse d'avoir de l'importance. Si vous
vous surprenez à réorganiser des colonnes juste pour faire plaisir à VLOOKUP, c'est
le signal qu'il faut changer d'outil, pas déplacer des données.
Le casseur silencieux : un numéro de colonne codé en dur
col_index_num est un entier littéral, et il n'a aucune idée de quelle colonne
vous vouliez réellement parler. Écrivez VLOOKUP(A2, Data, 4, FALSE) et il
renverra toujours la 4ᵉ colonne — même après que vous ayez inséré une nouvelle
colonne au milieu de Data, ce qui pousse votre cible en position 5. La formule
ne renvoie pas d'erreur. Elle renvoie discrètement la mauvaise colonne.
C'est la raison n° 1 pour laquelle un classeur hérité « casse d'un coup » après que quelqu'un a modifié le tableau source. Deux correctifs :
' Correctif 1 — laissez MATCH trouver la colonne par son en-tête, pour qu'elle s'auto-ajuste
=VLOOKUP(A2, Data, MATCH("Price", Data_Headers, 0), FALSE)
' Correctif 2 — abandonnez complètement le numéro de colonne avec INDEX/MATCH ou XLOOKUP
=INDEX(Data_Price, MATCH(A2, Data_ID, 0))
Envelopper MATCH à l'intérieur de VLOOKUP transforme
l'entier fragile en une recherche par en-tête qui survit aux colonnes insérées.
C'est un pansement ; le vrai remède est une fonction qui n'a jamais eu besoin de
compter des colonnes au départ.
Ce que #N/A veut vraiment dire — et comment le corriger
Un #N/A renvoyé par VLOOKUP signifie une seule chose : la valeur n'a pas été
trouvée dans la première colonne. Avec une correspondance exacte, c'est
généralement l'un de ces cas :
- Espaces ou caractères cachés —
"APX-100 "ne correspondra pas à"APX-100". Nettoyez la clé avecTRIM(ouSUBSTITUTEpour d'éventuels espaces insécables) des deux côtés. - Incohérence nombre-stocké-comme-texte — la valeur recherchée est le texte
"1001"mais le tableau contient le nombre1001(ou l'inverse). Ils ne correspondront jamais. Corrigez le type, ne le rafistolez pas. - La valeur n'est vraiment pas dans la première colonne — vérifiez que vous avez bien pointé le tableau sur la bonne colonne de départ.
Pour afficher un message aimable plutôt que l'erreur brute, enveloppez la formule — mais enveloppez-la au plus juste, de manière à n'attraper que le cas « introuvable », pas de vraies erreurs de formule :
=IFERROR(VLOOKUP(A2, Products, 3, FALSE), "Introuvable")
Ne tendez la main vers IFERROR qu'une fois la
formule correcte. Un IFERROR généralisé autour d'un VLOOKUP défectueux masque le
bug qui le fait échouer — vous livrerez « Introuvable » pour des lignes qui auraient
dû correspondre.
Le seul cas où la correspondance approximative a raison : les recherches par tranches
Il existe un usage légitime de TRUE : les recherches par tranches ou par
paliers, où vous voulez la ligne dans laquelle une valeur tombe plutôt qu'une
correspondance exacte — tranches d'imposition, paliers de commission, seuils de
notes, tranches de poids d'expédition.
' Tranches de notes : 0->F, 60->D, 70->C, 80->B, 90->A (première colonne triée croissant !)
=VLOOKUP(B2, Grade_Table, 2, TRUE) ' 73 -> tombe dans la tranche des 70 -> "C"
Ici la correspondance approximative fait exactement ce que vous voulez : trouver le
plus grand seuil qui ne dépasse pas le score. La condition non négociable est que la
première colonne soit triée par ordre croissant — sinon ça casse de la manière
silencieuse, propre aux données non triées, vue plus haut. C'est le seul scénario
où omettre FALSE est une fonctionnalité, pas un bug.
Le choix éclairé : VLOOKUP ou quelque chose de plus récent ?
VLOOKUP convient très bien, et est partout, pour le cas simple : correspondance exacte, valeur renvoyée à droite, colonnes qui ne bougeront pas. Passez au-delà quand :
- Vous devez regarder à gauche, ou rechercher et renvoyer dans l'un ou l'autre
sens →
INDEX+MATCHouXLOOKUP. - Les colonnes du tableau source sont modifiées → tout ce qui ne code pas un numéro de colonne en dur.
- Vous voulez une valeur « introuvable » intégrée ou une correspondance sur
plusieurs critères →
XLOOKUP.
VLOOKUP n'est pas mauvais ; c'est juste le plus ancien outil d'un tiroir qui en contient désormais de meilleurs. Connaître ses trois points faibles — le quatrième argument, le mur du sens unique vers la droite et le numéro de colonne fragile — c'est ce qui vous permet de l'utiliser sans risque et de savoir quand vous arrêter.
Comment ExcelMaster aide
La plupart des signalements « mon VLOOKUP est faux » ne sont pas des problèmes de
syntaxe — c'est le quatrième argument qui bascule par défaut sur l'approximatif, une
valeur de recherche qui est du texte d'un côté et un nombre de l'autre, ou un numéro
de colonne qui a dérivé après une modification. ExcelMaster écrit la recherche
avec la correspondance exacte verrouillée, repère l'incohérence de type qui provoque
votre #N/A, et — lorsque l'agencement appelle une recherche à gauche ou un tableau
qui ne cesse de changer — tend la main vers
INDEX/MATCH ou
XLOOKUP plutôt que de forcer VLOOKUP à faire un travail
pour lequel il n'a jamais été conçu.
Questions fréquentes
Comment utiliser VLOOKUP dans Excel ?
=VLOOKUP(lookup_value, table_array, col_index_num, FALSE). Placez la valeur que
vous recherchez en premier argument, le tableau (dont la première colonne
contient cette valeur) en deuxième, le numéro de la colonne à renvoyer (compté à
partir de la première colonne du tableau) en troisième, et FALSE pour une
correspondance exacte en quatrième. Exemple :
=VLOOKUP(A2, Products, 3, FALSE) trouve A2 dans la première colonne de
Products et renvoie la troisième colonne.
Pourquoi mon VLOOKUP renvoie-t-il #N/A ?
#N/A signifie que la valeur n'a pas été trouvée dans la première colonne du
tableau. Les causes habituelles sont des espaces cachés (nettoyez avec TRIM), une
incohérence nombre-stocké-comme-texte entre la valeur recherchée et le tableau, ou
la valeur qui n'est simplement pas dans la première colonne. Corrigez la cause
sous-jacente plutôt que de la masquer avec IFERROR.
À quoi sert le quatrième argument de VLOOKUP ?
Il définit le type de correspondance. FALSE (ou 0) signifie correspondance
exacte — à utiliser presque toujours. TRUE (ou omis) signifie correspondance
approximative, qui exige la première colonne triée par ordre croissant et renvoie
la plus grande valeur inférieure ou égale à votre valeur recherchée. La
correspondance approximative n'est correcte que pour les recherches par tranches,
comme les tranches d'imposition ou les seuils de notes.
VLOOKUP peut-il regarder à gauche ?
Non. VLOOKUP recherche la colonne la plus à gauche et ne peut renvoyer que des
colonnes situées à sa droite. Pour rechercher une valeur et renvoyer quelque chose à
sa gauche, utilisez INDEX/MATCH ou
XLOOKUP, qui gèrent les deux sens.
Pourquoi mon VLOOKUP a-t-il cassé après que j'ai inséré une colonne ?
Parce que col_index_num est un nombre fixe. Insérer une colonne dans le tableau
décale votre cible, mais le nombre pointe toujours sur l'ancienne position. Utilisez
MATCH("En-tête", …, 0) à la place du nombre littéral pour qu'il s'auto-ajuste, ou
passez à INDEX/MATCH ou XLOOKUP, qui ne comptent pas de colonnes.
Testé dans
Testé dans : Excel 365 (Windows 11) — dernière vérification le 05/07/2026.
Guides associés : Excel INDEX & MATCH · Excel HLOOKUP & LOOKUP · XLOOKUP (2025) · Excel IFERROR · Excel FILTER
