Robin a demandé s’il existe un moyen de faire une RECHERCHEV qui respecte la casse.

Sa table / plage de recherche contient des entrées similaires (AbC et aBC), la seule différence étant la casse des lettres. Elle ne peut pas modifier les valeurs (les rendre toutes majuscules ou minuscules) car les valeurs uniques sont vitales.

La fonction RECHERCHEV n’a pas de moyen de vérifier le cas des informations; il est insensible à la casse. Il existe cependant plusieurs façons de contourner cette lacune. Une façon consiste à utiliser la fonction CODE pour créer une colonne intermédiaire qui peut être recherchée par RECHERCHEV. En supposant que vos données d’origine se trouvent dans la colonne B, vous pouvez mettre la formule suivante dans la cellule A1 et la copier dans la colonne:

=CODE(LEFT(B1,1))&"."&CODE(MID(B1,2,1))&"."&CODE(RIGHT(B1,1))

Cette formule examine les trois premiers caractères de ce qui se trouve dans la cellule B1 et convertit ces caractères en codes de caractères décimaux séparés par des points. Ainsi, si A1 contenait «ABC», alors B1 contiendrait «65,66,67».

En supposant que la valeur que vous souhaitez localiser se trouve dans la cellule C1, vous pouvez utiliser ce qui suit comme formule RECHERCHEV:

=VLOOKUP(CODE(LEFT(C1,1))&"."&CODE(MID(C1,2,1))&"."& CODE(MID(C1,3,1)), A:B,2,)

Une autre approche consiste à utiliser la fonction EXACT pour déterminer l’emplacement de ce que vous recherchez. Cette approche n’utilise pas du tout VLOOKUP; à la place, en s’appuyant sur la fonction INDEX. La formule suppose que les cellules que vous souhaitez comparer se trouvent dans la colonne A et que vous souhaitez renvoyer la cellule correspondante dans la colonne B.

=IF(MIN(IF(EXACT(C1,$A$1:$A$100),ROW($A$1:$A$100)))=0,NA(), INDEX($B$1:$B$100,MIN(IF(EXACT(C1,$A$1:$A$100),ROW($A$1:$A$100)))))

Cette formule doit être saisie sous forme de formule matricielle (Maj + Ctrl + Entrée). La première partie de la formule (la première instance de EXACT) compare C1 (ce que vous recherchez) à chaque valeur de la plage A1: A100. Puisqu’il s’agit d’une formule matricielle, vous vous retrouvez avec, dans ce cas, 100 valeurs True / False selon qu’il existe une correspondance exacte ou non. En cas de correspondance, la première fonction ROW renvoie la ligne de la correspondance et la fonction INDEX est utilisée pour récupérer la valeur de la colonne B de cette ligne.

Dans certains cas, vous souhaiterez peut-être créer votre propre fonction définie par l’utilisateur qui effectuera la recherche à votre place. Voici un exemple d’une telle macro:

Function CaseVLook(compare_value, table_array As Range, _   Optional col_index As Integer = 1)

Dim c As Range     Dim rngColumn1 As Range

Application.Volatile

Set rngColumn1 = table_array.Columns(1)

CaseVLook = "Not Found"



'Loop first column     For Each c In rngColumn1.Cells         If c.Value = compare_value Then             CaseVLook = c.Offset(0, col_index - 1).Value             Exit For         End If     Next c End Function

Pour utiliser la macro, appelez simplement la fonction avec la valeur que vous souhaitez trouver (par exemple la cellule C1), la plage dont la première colonne doit être recherchée (telle que A: B), et éventuellement le décalage de la colonne dans cette plage, comme ici:

=CaseVLook(C1,A:B,2)

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (12222) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.

Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:

lien: / excel-Making_VLOOKUP_Case_Sensitive [Rendre VLOOKUP sensible à la casse].