Sommaire
Rappel de l'utilisation de RECHERCHEV
La fonction RECHERCHEV peut être utilisée de 2 manières différentes selon la valeur du dernier paramètre
- Positionné à 1 (ou VRAI) pour une recherche approchante
- Positionné à 0 (ou FAUX) pour une recherche exacte.
Présentation du problème
Quand la recherche s'effectue sur un tableau qui contient une centaine de lignes, vous ne constatez pas de délai important pour le traitement du résultat.
Mais quand vous travaillez sur des classeurs de plusieurs dizaines de milliers de lignes, ou même plusieurs centaines de milliers de lignes, le temps de traitement peut dépasser plusieurs minutes 😱😡💥
Une technique proposée par Charles Williams vous permet de lancer une recherche exacte en quelques secondes sur de grandes plages de données.
Comment la fonction RECHERCHEV trouve les valeurs ?
Afin de comprendre la méthode pour améliorer la vitesse de calcul de la fonction RECHERCHEV, il faut étudier la façon dont la fonction a été codée.
Charles Williams a découvert que la programmation de la fonction RECHERCHEV n'était pas la même selon que vous choisissez la recherche approchante ou la recherche exacte.
- La méthode de codage utilisée pour la recherche approchante est la méthode binaire
- La méthode de codage utilisée pour la recherche exacte est la méthode linéaire
Vous comprenez mieux dès lors, pourquoi une recherche exacte est si lente comparée à une recherche codée en binaire. 😉
Solution pour optimiser la vitesse
Toute l'astuce va consister à écrire une fonction RECHERCHEV exacte en utilisant la fonction RECHERCHEV approchante 😉
Exemple de présentation
Prenons le cas d'un classeur qui contient dans une feuille la liste des 50 000 salariés d'une entreprise (c'est un exemple 😉)

Et dans une autre feuille, vous avez la liste jour de congés pris par vos salariés ce qui représente près de 200,000 lignes.

Le besoin c'est de créer une RECHERCHEV entre les 2 feuilles pour afficher le nom des salariés basée sur le code employé.
Faire un test sur la recherche
Nous allons commencer par faire un test pour savoir si le résultat de la recherche retourne exactement le résultat recherché. Oui, c'est un peu con comme test, mais c'est ce qu'il faut faire.
=RECHERCHEV(A2;$A$2:$A$50000;1;1)=A2
Les données de votre colonne de recherche doivent OBLIGATOIREMENT être triées en ordre croissant.

Intégrer ce test dans une fonction SI
Maintenant que nous avons bâti un test qui vérifie si la recherche approchante retourne exactement la valeur que vous voulons, nous allons mettre ce test dans une fonction SI.
Si le résultat du test est vrai, alors nous allons retourner une recherche approchante mais sur la colonne que nous voulons retourner cette fois-ci (4ème colonne ici)
Nous terminons la fonction SI avec une valeur quand la recherche est infructueuse. La formule s'écrit alors :
=SI(RECHERCHEV(A2;$A$2:$H$50000;1;1)=A2,RECHERCHEV(A2;$A$2:$H$50000;4;1), "Inconnu")

Finalement, c'est tout simple et le gain de temps est tout simplement hallucinant 😎👍
Pour aller plus loin
Charles Williams ne se contente pas de nous révéler certains secrets de codage des fonctions d'Excel. Il a lui-même codé des fonctions similaires à celles présentes dans Excel, mais avec un résultat bien plus rapide.
En effet, toujours sur de grandes plages de données, les fonctions SOMME.SI.ENS, NB.SI.ENS, .... sont aussi extrêmement lentes. Pour remédier à ces problèmes, il a conçu un module complémentaire (add-in) qui viendra ajouter de nouvelles fonctions plus performantes dans Excel.
Vous pouvez le télécharger à l'adresse suivante. Son utilisation est gratuite pendant 15 jours mais vous verrez bien vite qu'à l'usage, vous ne pourrez plus vous en passer 😄
Vidéo explicative
Articles complémentaires
Voici une liste d'articles qui pourrait également vous intéresser sur le même thème.
- Calcul par tranche
- Afficher les jours de congés dans un calendrier
- Alerter sur les anniversaires à venir.
- Heures négatives dans Excel
- Pourquoi RECHERCHEV retourne #N/A
- Rendre anonyme vos données
- Faire une recherche décalée
- Fonction EQUIV – RECHERCHEV Dynamique
- Création d’un calendrier automatique
- Comment faire une RECHERCHEV vers la gauche ?
(11 commentaires)
Passer au formulaire de commentaire
Bonjour Frédéric,
Est-ce que remplacer VLOOKUP par un MATCH imbriqué dans un INDEX accélère la recherche ?
On m'a conseillé cette ruse, mais en lisant votre article, j'ai des doutes.
Cordialement,
Marie
Author
Bonjour,
Mille mercis d'avoir posée la question car c'est un mythe pour beaucoup d'utilisateurs.
Non, le seul moyen d'accélérer une rechercheV c'est l'astuce que je décris dans cet article https://www.excel-exercice.com/accelerer-la-fonction-recherchev/
Mais l'astuce INDEX / EQUIV (enfin MATCH) c'est pour faire une RECHERCHEV vers la gauche https://www.excel-exercice.com/comment-faire-une-recherchev-vers-la-gauche/
Merci bcp pour cette question très pertinente
Super merci pour l'astuce !
Vraiment Efficace, testé sur un onglet avec 60.000 références à rechercher dans un onglet avec 500.000 références... 10 mn avec recherchev classique, et 15 sec avec cette méthode.
Bonjour,
http://boisgontierjacques.free.fr/pages_site/recherchev.htm#FonctionRechVM
Boisgontier
Bonjour
Je pensais que la recherche approximative retournait toujours la valeur la plus proche.
Or je m'aperçois que dans certains cas, elle retourne #N/A comme dans une recherche exacte.
Il semblerait que ce soit dans le cas où ma valeur cherchée est inférieure (en tri) à ma première
valeur du tableau
Avez-vous déja recontré ce problème?
PS: je peux résoudre par:
si(esterreur(recherchev(a;tb;1;vrai);"erreur";si(recherchev(a;tb;1;vrai)=a;recherchev(a;tb;xx;vrai);"erreur"))
mais cela devient lourd comme formule
Par avance merci
Author
Attention, il y a 2 choses à ne pas confondre. Là vous êtes sur l'article sur le fait d'accélérer la vitesse de recherche dans le cas d'une recherche exacte (et la bidouille c'est d'utiliser la recherche approchante c'est vrai). Maintenant, si votre besoin c'est de faire une recherche approchante "classique", la valeur min doit obligatoirement être dans votre tableau de référence alors que la valeur max peut être omise.
Bonjour et merci pour cette astuce qui accélère spectaculairement les formules !
Je me permets une remarque : il est indispensable que les cellules aient le même format, plus précisément la même longueur.
Une question reste en suspens : l'enregistrement d'un tel fichier est très long. Je ne me l'explique pas.
Cordialement,
Valérie
Hallucinant que Microsoft ne peut pas integrer ce test directement dans sa fonction RECHERCHEV
Quelle bouse !
J'ai l'impression de revenir 20 ans en arrière lorsque le paramètre 0 ou faux n'existait pas !!!
Effectivement, c'est simple et efficace comme technique. Merci pour l'information. Je cherche comment accélérer l'ouverture de mon Excel (passer de 15 secondes à 1 ou 2 secondes) (fichier avec plusieurs centaines de champs et liaisons pages BD client - BD pièce avec gestion de stock (2000 références) - Facturation.