TOP

Fonction améliorée VLOOKUP (VLOOKUP2)

Description

La fonction intégrée VLOOKUP est l'une des fonctions les plus puissantes de Excel. Mais il présente un inconvénient majeur : il ne trouve que la première occurrence de la valeur souhaitée dans le tableau et uniquement dans la colonne la plus à droite. Mais si vous avez besoin du 2ème, du 3ème et pas du dernier ?


Un exemple de problème

Disons que nous avons un tableau de prêts traités comme celui-ci :

Nous avons besoin de savoir, par exemple, quel était le montant du troisième prêt accordé à Mike ou quand John a signé son deuxième accord. Fonction intégrée VLOOKUP sait rechercher uniquement la première occurrence d'un nom dans le tableau et ne nous aidera pas.

Écrivons notre fonction, qui recherchera non seulement la première, mais également toute (Nième) entrée suivante. Appelons-le, par exemple, VLOOKUP2.

VBA code pour la fonction VLOOKUP2

Ouvrir le menu Service - Macro - Editeur Visual Basic , insérez le nouveau module (menu Insert - Module) et copiez-y le texte de cette fonction :

Function VLOOKUP2(Table           As Range, _
                  SearchColumnNum As Integer, _
                  SearchValue     As Variant, _
                  N               As Integer, _
                  ResultColumnNum As Integer)        
  Dim i      As Integer
  Dim iCount As Integer
       
  For i = 1 To Table.Rows.Count
    If Table.Cells(i, SearchColumnNum) = SearchValue Then
      iCount = iCount + 1
    End If
    If iCount = N Then
      VLOOKUP2 = Table.Cells(i, ResultColumnNum)
      Exit For
    End If
  Next i
End Function 

Fermez l'éditeur Visual Basic et revenez à Excel.

Désormais, dans l'assistant de fonction, dans la catégorie Défini par l'utilisateur, vous pouvez trouver et utiliser notre fonction VLOOKUP2. La syntaxe de la fonction est la suivante :

=VLOOKUP2(tableau ; column_number_where_we_search ; valeur_recherchée ; Numéro d'entrée ; column_number_from_which_we_take_the_value )

Autrement dit, afin de connaître le montant du troisième prêt accordé à Mike, vous devrez saisir :

=VLOOKUP2(A2:A19 ; 1 ; "Mike"; 3 ; 4 )

Articles sur le sujet :