Table des matières
Le tutoriel montre comment utiliser la fonction VLOOKUP pour copier des données d'une autre feuille de calcul ou d'un autre classeur, Vlookup dans plusieurs feuilles, et effectuer une recherche dynamique pour renvoyer des valeurs de différentes feuilles dans différentes cellules.
Lorsque vous recherchez des informations dans Excel, il est rare que toutes les données se trouvent sur la même feuille. Le plus souvent, vous devrez effectuer une recherche sur plusieurs feuilles, voire sur plusieurs classeurs. La bonne nouvelle, c'est que Microsoft Excel offre plus d'une façon de le faire, et la mauvaise, c'est que toutes les façons sont un peu plus compliquées qu'une formule VLOOKUP standard. Mais avec un peu de patience, on peutJe les découvrirai :)
Comment faire un VLOOKUP entre deux feuilles
Pour commencer, examinons le cas le plus simple, à savoir l'utilisation de la formule VLOOKUP pour copier des données d'une autre feuille de calcul. Cette formule est très similaire à une formule VLOOKUP ordinaire qui effectue une recherche sur la même feuille de calcul. La différence est que vous incluez le nom de la feuille dans la formule tableau_réseau pour indiquer à votre formule dans quelle feuille de calcul se trouve la plage de consultation.
La formule générique de VLOOKUP à partir d'une autre feuille est la suivante :
VLOOKUP(lookup_value, Feuille!gamme , col_index_num, [range_lookup])A titre d'exemple, prenons les chiffres de ventes de Jan rapport à Résumé Pour cela, nous définissons les arguments suivants :
- Valeurs de recherche sont dans la colonne A sur le Résumé et nous nous référons à la première cellule de données, qui est A2.
- Table_array est la plage A2:B6 de la feuille Jan. Pour s'y référer, faites précéder la référence de la plage du nom de la feuille suivi du point d'exclamation : Jan!$A$2:$B$6.
Veuillez noter que nous verrouillons la plage avec des références de cellule absolues pour éviter qu'elle ne soit modifiée lors de la copie de la formule dans d'autres cellules.
Col_index_num est 2 car nous voulons copier une valeur de la colonne B, qui est la deuxième colonne du tableau.
- Recherche de plage est mis à FALSE pour rechercher une correspondance exacte.
En rassemblant les arguments, on obtient cette formule :
=VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)
Faites glisser la formule vers le bas de la colonne et vous obtiendrez ce résultat :
De la même manière, vous pouvez effectuer un Vlookup de données à partir de l'application Février et Mar feuilles :
=VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)
=VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)
Conseils et notes :
- Si le nom de la feuille contient espaces ou caractères non alphabétiques il doit être placé entre guillemets simples, comme suit Jan Sales'!$A$2:$B$6 Pour plus d'informations, voir Comment référencer une autre feuille dans Excel.
- Au lieu de saisir le nom d'une feuille directement dans une formule, vous pouvez passer à la feuille de calcul de recherche et y sélectionner la plage. Excel insérera automatiquement une référence avec la syntaxe correcte, ce qui vous évitera de vérifier le nom et de résoudre le problème.
Vlookup à partir d'un classeur différent
Pour effectuer un VLOOKUP entre deux classeurs, incluez le nom du fichier entre crochets, suivi du nom de la feuille et du point d'exclamation.
Par exemple, pour rechercher la valeur A2 dans la plage A2:B6 sur Jan feuille dans le Rapports de ventes.xlsx utilisez cette formule :
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
Pour plus de détails, veuillez consulter la rubrique VLOOKUP à partir d'un autre classeur dans Excel.
Vlookup sur plusieurs feuilles avec IFERROR
L'idée est d'imbriquer plusieurs fonctions IFERROR pour vérifier plusieurs feuilles de calcul une par une : si le premier VLOOKUP ne trouve pas de correspondance sur la première feuille, il faut chercher dans la feuille suivante, et ainsi de suite.
IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Non trouvé "))Pour voir comment cette approche fonctionne sur des données réelles, considérons l'exemple suivant. Résumé que nous voulons remplir avec les noms et les montants des articles en recherchant le numéro de commande dans le tableau suivant Ouest et Est feuilles :
Tout d'abord, nous allons extraire les articles. Pour ce faire, nous demandons à la formule VLOOKUP de rechercher le numéro de commande en A2 dans le tableau suivant Est et renvoyer la valeur de la colonne B (2ème colonne de la feuille tableau_réseau Si une correspondance exacte n'est pas trouvée, cherchez dans la liste de contrôle de l'UE. Ouest feuille. Si les deux Vlookups échouent, renvoyez "Non trouvé".
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Not found"))
Pour retourner le montant, il suffit de changer le numéro d'index de la colonne en 3 :
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Not found"))
Conseil : si nécessaire, vous pouvez spécifier des tableaux différents pour des fonctions VLOOKUP différentes. Dans cet exemple, les deux feuilles de recherche ont le même nombre de lignes (A2:C6), mais vos feuilles de calcul peuvent être de taille différente.
Vlookup dans plusieurs classeurs
Pour effectuer une Vlookup entre deux ou plusieurs classeurs, mettez le nom du classeur entre crochets et faites-le précéder du nom de la feuille de calcul. deux fichiers différents ( Livre 1 et Livre 2 ) avec une seule formule :
=IFERROR(VLOOKUP(A2, [Book1.xlsx]East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, [Book2.xlsx]West!$A$2:$C$6, 2, FALSE), "Not found"))
Rendre le numéro d'index de colonne dynamique pour Vlookup plusieurs colonnes
Dans les cas où vous devez renvoyer des données provenant de plusieurs colonnes, il est préférable de faire appel à l'option col_index_num dynamique pourrait vous faire gagner du temps. Il y a quelques ajustements à faire :
- Pour le col_index_num utilisez la fonction COLUMNS qui renvoie le nombre de colonnes dans un tableau spécifié : COLUMNS($A$1:B$1) (la coordonnée de la ligne n'a pas vraiment d'importance, il peut s'agir de n'importe quelle ligne).
- Dans le valeur de la recherche verrouille la référence de la colonne avec le signe $ ($A2), afin qu'elle reste fixe lors de la copie de la formule dans d'autres colonnes.
Vous obtenez ainsi une sorte de formule dynamique qui extrait les valeurs correspondantes de différentes colonnes, en fonction de la colonne dans laquelle la formule est copiée :
=IFERROR(VLOOKUP($A2, East!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), IFERROR(VLOOKUP($A2, West!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), "Not found"))
Lorsqu'il est saisi dans la colonne B, COLUMNS($A$1:B$1) est évalué à 2, ce qui indique à VLOOKUP de renvoyer une valeur de la deuxième colonne du tableau.
Lorsqu'elle est copiée dans la colonne C (c'est-à-dire que vous avez fait glisser la formule de B2 à C2), B$1 devient C$1 car la référence à la colonne est relative. Par conséquent, COLUMNS($A$1:C$1) vaut 3, ce qui oblige VLOOKUP à renvoyer une valeur de la troisième colonne.
Cette formule fonctionne très bien pour 2 ou 3 feuilles de consultation. Si vous en avez plus, les IFERRORs répétitifs deviennent trop encombrants. L'exemple suivant montre une approche un peu plus compliquée mais beaucoup plus élégante.
Vlookup de plusieurs feuilles avec INDIRECT
Une autre façon d'effectuer un Vlookup entre plusieurs feuilles dans Excel consiste à utiliser une combinaison des fonctions VLOOKUP et INDIRECT. Cette méthode nécessite un peu de préparation, mais au final, vous disposerez d'une formule plus compacte pour effectuer un Vlookup dans un nombre quelconque de feuilles de calcul.
Une formule générique de Vlookup entre feuilles est la suivante :
VLOOKUP( valeur de la recherche , INDIRECT("'"&INDEX( Feuilles de recherche , MATCH(1, --(COUNTIF(INDIRECT("'" & ; Feuilles de recherche & ; "' ! gamme_consultative "), valeur de la recherche )>0), 0)) & ; "' ! tableau_réseau "), col_index_num , FALSE)Où :
- Feuilles de recherche - une plage nommée constituée des noms des feuilles de recherche.
- Valeur de la recherche - la valeur à rechercher.
- Recherche_gamme - la plage de colonnes dans les feuilles de consultation où rechercher la valeur de consultation.
- Table_array - la plage de données dans les feuilles de consultation.
- Col_index_num - le numéro de la colonne dans le tableau de la table à partir de laquelle retourner une valeur.
Pour que la formule fonctionne correctement, veuillez tenir compte des avertissements suivants :
- Il s'agit d'une formule de tableau, qui doit être complétée en appuyant simultanément sur les touches Ctrl + Shift + Enter.
- Toutes les feuilles doivent avoir le même ordre des colonnes .
- Comme nous utilisons un seul tableau de table pour toutes les feuilles de consultation, il faut spécifier l'attribut la plus grande gamme si vos feuilles ont un nombre différent de rangées.
Comment utiliser la formule pour effectuer un Vlookup entre plusieurs feuilles ?
Pour consulter plusieurs feuilles à la fois, procédez comme suit :
- Notez tous les noms des feuilles de consultation quelque part dans votre classeur et nommez cette plage ( Feuilles de recherche dans notre cas).
- recherche de la valeur A2 ( valeur de la recherche )
- dans l'intervalle A2:A6 ( gamme_consultative ) dans quatre feuilles de travail ( Est , Nord , Sud et Ouest ), et
- tirer les valeurs correspondantes de la colonne B, qui est la colonne 2 ( col_index_num ) dans la plage de données A2:C6 ( tableau_réseau ).
Avec les arguments ci-dessus, la formule prend cette forme :
=VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& ; Lookup_sheets& ;"'!$A$2:$A$6"), $A2)>0), 0)) & ;"'!$A$2:$C$6"), 2, FALSE)
Veuillez noter que nous verrouillons les deux plages ($A$2:$A$6 et $A$2:$C$6) avec des références de cellule absolues.
En conséquence, nous avons la formule pour rechercher le numéro de commande dans 4 feuilles et récupérer l'article correspondant. Si un numéro de commande spécifique n'est pas trouvé, une erreur #N/A est affichée comme dans la ligne 14 :
Pour restituer le montant, il suffit de remplacer 2 par 3 dans le tableau suivant col_index_num comme les montants sont dans la 3ème colonne du tableau :
=VLOOKUP($A2, INDIRECT( "'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT( "'" & ; Lookup_sheets & ; "'!$A$2:$A$6"), $A2)>0), 0)) & ; "'!$A$2:$C$6"), 3, FALSE)
Si vous souhaitez remplacer la notation d'erreur standard #N/A par votre propre texte, insérez la formule dans la fonction IFNA :
=IFNA(VLOOKUP($A2, INDIRECT( "'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT( "'" & ; Lookup_sheets & ; "'!$A$2:$A$6"), $A2)>0), 0)) & ; "'!$A$2:$C$6"), 3, FALSE), "Not found")
Vlookup de plusieurs feuilles entre classeurs
Cette formule générique (ou toute autre variante) peut également être utilisée pour consulter plusieurs feuilles dans un même fichier. un cahier différent Pour cela, concaténer le nom du classeur dans INDIRECT comme indiqué dans la formule ci-dessous :
=IFNA(VLOOKUP($A2, INDIRECT("'[Book1.xlsx]" & ; INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'[Book1.xlsx]" & ; Lookup_sheets & ; "'!$A$2:$A$6"), $A2)>0), 0))) & ; "'!$A$2:$C$6"), 2, FALSE), "Not found")
Vlookup entre feuilles et retour de plusieurs colonnes
Si vous voulez extraire des données de plusieurs colonnes, une formule de réseau multi-cellules peut le faire en une seule fois. Pour créer une telle formule, il faut fournir une constante de tableau pour l'attribut col_index_num argument.
Dans cet exemple, nous souhaitons renvoyer les noms des articles (colonne B) et les montants (colonne C), qui sont respectivement les deuxième et troisième colonnes du tableau. Le tableau requis est donc {2,3}.
=VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& ; Lookup_sheets & ;"'!$A$2:$C$6"), $A2)>0), 0)) & ;"'!$A$2:$C$6"), {2,3}, FALSE)
Pour saisir correctement la formule dans plusieurs cellules, voici ce que vous devez faire :
- Dans la première ligne, sélectionnez toutes les cellules à remplir (B2:C2 dans notre exemple).
- Tapez la formule et appuyez sur Ctrl + Shift + Enter pour saisir la même formule dans les cellules sélectionnées, ce qui donnera une valeur différente dans chaque colonne.
- Faites glisser la formule vers les lignes restantes.
Comment fonctionne cette formule
Pour mieux comprendre la logique, décomposons cette formule de base en fonctions individuelles :
=VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& ; Lookup_sheets& ;"'!$A$2:$A$6"), $A2)>0), 0)) & ;"'!$A$2:$C$6"), 2, FALSE)
En travaillant de l'intérieur vers l'extérieur, voici ce que fait la formule :
COUNTIF et INDIRECT
En bref, INDIRECT construit les références de toutes les feuilles de référence, et COUNTIF compte les occurrences de la valeur de référence (A2) dans chaque feuille :
--(COUNTIF( INDIRECT(""&Lookup_sheets& ;"'!$A$2:$A$6"), $A2)>0)
Plus en détail :
Tout d'abord, vous concaténerez le nom de la plage (Lookup_sheets) et la référence de la plage ($A$2:$A$6), en ajoutant les apostrophes et le point d'exclamation aux bons endroits pour créer une référence externe, et vous fournirez la chaîne de texte résultante à la fonction INDIRECT pour faire référence de manière dynamique aux feuilles de consultation :
INDIRECT({"'Est'!$A$2:$A$6" ; "'Sud'!$A$2:$A$6" ; "'Nord'!$A$2:$A$6" ; "'Ouest'!$A$2:$A$6"})
COUNTIF vérifie chaque cellule de la plage A2:A6 de chaque feuille de consultation par rapport à la valeur de A2 de la feuille principale et renvoie le nombre de correspondances pour chaque feuille. Ouest qui est la 4ème dans la plage nommée, donc COUNTIF retourne ce tableau :
{0;0;0;1}
Ensuite, vous comparez chaque élément du tableau ci-dessus avec 0 :
--({0 ; 0 ; 0 ; 1}>0)
Cela donne un tableau de valeurs VRAIES (supérieures à 0) et FAUX (égales à 0), que vous transformez en 1 et 0 en utilisant un double unaire (--), et vous obtenez le tableau suivant comme résultat :
{0 ; 0 ; 0 ; 1}
Cette opération est une précaution supplémentaire pour gérer une situation où une feuille de recherche contient plusieurs occurrences de la valeur de recherche, auquel cas COUNTIF retournerait un nombre supérieur à 1, alors que nous voulons seulement des 1 et des 0 dans le tableau final (dans un moment, vous comprendrez pourquoi).
Après toutes ces transformations, notre formule se présente comme suit :
VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;1} , 0)) & ;"'!$A$2:$C$6"), 2, FALSE)
INDEX et MATCH
C'est alors qu'intervient une combinaison classique d'INDEX MATCH :
INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))
La fonction MATCH configurée pour une correspondance exacte (0 dans le dernier argument) recherche la valeur 1 dans le tableau {0;0;0;1} et renvoie sa position, qui est 4 :
INDEX(Feuilles_de_consultation, 4)
La fonction INDEX utilise le numéro renvoyé par MATCH comme argument de numéro de ligne (row_num) et renvoie la quatrième valeur de la plage nommée. Feuilles de recherche qui est Ouest .
Donc, la formule se réduit encore à :
VLOOKUP($A2, INDIRECT("''& ;" West "& ;"'!$A$2:$C$6"), 2, FALSE)
VLOOKUP et INDIRECT
La fonction INDIRECT traite la chaîne de texte qu'elle contient :
INDIRECT("'"& ; "West"& ;"!$A$2:$C$6")
Et le convertit en une référence qui va à la tableau_réseau argument de VLOOKUP :
VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)
Enfin, cette formule VLOOKUP très standard recherche la valeur A2 dans la première colonne de la plage A2:C6 sur le tableau suivant Ouest et renvoie une correspondance de la 2ème colonne. C'est tout !
VLOOKUP dynamique pour renvoyer les données de plusieurs feuilles dans différentes cellules
Tout d'abord, définissons ce que signifie exactement le mot "dynamique" dans ce contexte et en quoi cette formule va être différente des précédentes.
Si vous disposez de grandes quantités de données au même format réparties sur plusieurs feuilles de calcul, vous pouvez extraire des informations de différentes feuilles dans différentes cellules. L'image ci-dessous illustre le concept :
Contrairement aux formules précédentes qui extrayaient une valeur d'une feuille spécifique sur la base d'un identifiant unique, nous cherchons cette fois à extraire des valeurs de plusieurs feuilles à la fois.
Il existe deux solutions différentes pour cette tâche. Dans les deux cas, vous devez effectuer un petit travail préparatoire et créer des plages nommées pour les cellules de données dans chaque feuille de consultation. Pour cet exemple, nous avons défini les plages suivantes :
- Ventes_Est - A2:B6 sur la feuille Est
- Ventes Nord - A2:B6 sur la feuille Nord
- Ventes_Sud - A2:B6 sur la feuille sud
- West_Sales - A2:B6 sur le feuillet ouest
VLOOKUP et IF imbriqués
Si vous avez un nombre raisonnable de feuilles à consulter, vous pouvez utiliser des fonctions IF imbriquées pour sélectionner la feuille sur la base des mots-clés contenus dans les cellules prédéfinies (cellules B1 à D1 dans notre cas).
Avec la valeur de référence en A2, la formule est la suivante :
=VLOOKUP($A2, IF(B$1="east", East_Sales, IF(B$1="north", North_Sales, IF(B$1="south", South_Sales, IF(B$1="west", West_Sales)))), 2, FALSE)
Traduit en anglais, la partie IF se lit comme suit :
Si B1 est Est regardez dans la gamme nommée Ventes_Est ; si B1 est Nord regardez dans la gamme nommée Ventes Nord ; si B1 est Sud regardez dans la gamme nommée Ventes_Sud ; et si B1 est Ouest regardez dans la gamme nommée West_Sales .
L'intervalle renvoyé par IF va jusqu'à tableau_réseau de VLOOKUP, qui extrait une valeur correspondante de la deuxième colonne de la feuille correspondante.
L'utilisation astucieuse de références mixtes pour la valeur de consultation ($A2 - colonne absolue et ligne relative) et le test logique de IF (B$1 - colonne relative et ligne absolue) permet de copier la formule dans d'autres cellules sans aucune modification - Excel ajuste automatiquement les références en fonction de la position relative d'une ligne et d'une colonne.
Nous entrons donc la formule dans B2, la copions vers la droite et vers le bas dans autant de colonnes et de lignes que nécessaire, et obtenons le résultat suivant :
VLOOKUP INDIRECT
Si vous travaillez avec de nombreuses feuilles, les multiples niveaux imbriqués peuvent rendre la formule trop longue et difficile à lire. plage dynamique de vlookup à l'aide de INDIRECT :
=VLOOKUP($A2, INDIRECT(B$1& ;"_Sales"), 2, FALSE)
Ici, nous concaténons la référence à la cellule qui contient une partie unique de la plage nommée (B1) et la partie commune (_Ventes), ce qui produit une chaîne de texte comme "Est_Ventes", qu'INDIRECT convertit en un nom de plage compréhensible par Excel.
Vous obtenez ainsi une formule compacte qui fonctionne parfaitement sur n'importe quel nombre de feuilles :
Voilà comment effectuer un Vlookup entre des feuilles et des fichiers dans Excel. Je vous remercie de votre lecture et j'espère vous voir sur notre blog la semaine prochaine !
Cahier d'exercices à télécharger
Exemples de Vlookup pour plusieurs feuilles (fichier .xlsx)