Vlookup plusieurs conditions à l'aide de VBA
Considérez le tableau de données suivant :
La fonction Vlookup standard dans Excel a le format suivant :
RECHERCHEV(""Marque", B6:G12",2,FAUX)
Qui renverra "Marron".
Cependant, qu'en est-il si nous voulions rechercher 2 conditions ou plus, par exemple le prénom, le nom et l'âge dans le tableau ci-dessus ? La FDU suivante nous permet de le faire :
123456789101112131415161718192021222324252627282930313233343536373839 | Fonction ThreeParameterVlookup (Data_Range As Range, Col As Integer, Parameter1 As Variant, Parameter2 As Variant, Parameter3 As Variant) As Variant'Déclarer les variablesCellule faibleDim Current_Row en tant qu'entierDim No_Of_Rows_in_Range en tant qu'entierDim No_of_Cols_in_Range en tant qu'entierDim Matching_Row en tant qu'entier'définir la réponse sur N/A par défautThreeParameterVlookup = CVErr(xlErrNA)Matching_Row = 0Current_Row = 1No_Of_Rows_in_Range = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_Range.Columns.Count'Vérifiez si Col est supérieur au nombre de colonnes dans la plageSi (Col > No_of_Cols_in_Range) AlorsThreeParameterVlookup = CVErr(xlErrRef)Fin siSi (Col <= No_of_Cols_in_Range) AlorsFaireSi ((Data_Range.Cells(Current_Row, 1).Value = Parameter1) Et _(Data_Range.Cells(Current_Row, 2).Value = Parameter2) Et _(Data_Range.Cells(Current_Row, 3).Value = Parameter3)) PuisMatching_Row = Current_RowFin siCurrent_Row = Current_Row + 1Boucle jusqu'à ((Current_Row = No_Of_Rows_in_Range) ou (Matching_Row 0))Si Matching_Row 0 AlorsThreeParameterVlookup = Data_Range.Cells(Matching_Row, Col)Fin siFin siFonction de fin |
Il a la syntaxe suivante :
ThreeParameterVlookup(Data_Range, Col , Parameter1, Parameter2 , Parameter3 )
Où:
• Data_Range est la plage des données
• Col est un entier pour la colonne requise
• Paramètre1, Paramètre2 et Paramètre3 sont les valeurs des trois premières colonnes respectivement
Pour que:
=ThreeParameterVlookup(B6:G12,6,"Mark", "Brown",7) renverra "Tolworth" car il s'agit d'une correspondance sur "Mark", "Brown" et 7 et une référence à la 6ème colonne
Notez que cette fonction fonctionnera également avec des plages nommées (dynamiques) :
=ThreeParameterVlookup(named_range,6,"Adrian",,"White",7) renverra "Chessington" où nous avons configuré la plage nommée "Named_Range".
Si Excel ne parvient pas à trouver une correspondance, « N/A » est renvoyé par défaut. En fait, la fonction suppose une valeur de N/A au départ et ne change que lorsqu'elle trouve une correspondance exacte.
De plus, si la valeur de Col dépasse le nombre de colonnes, une erreur de référence se produit.
Pour télécharger le fichier .XLSM de ce tutoriel, cliquez ici