Bonjour Monique, Carl, le Forum
Oui, avant de partir avec une solution VBA, j'attendais de voir si je ne passais pas à coté d'une Fonction standard pouvant le faire. Et comme à son habitude notre "Fée des Formules" nous trouve une solution.
Mais sinon, donc en VBA, on peut aussi fabriquer les Functions pour faire ses Propres Formules dans des cas de Figures comme celui-ci.
Donc en Feuille "Feuil1" on a son tableau d'items à scanner qui serait en Colonne "H" et on voudrait retourner le correspondance se trouvant en Colonne "A"... sur la feuille active on a en "B1" la valeur à chercher, en "C1" on peut appeler sa Fonction Personnalisée (une fois que l'aura crée ci-dessous) comme ceci :
=VlookUpLeft(B1;7)
Pour procéder à la réalisation d'un fonction personalisée, il suffit d'ouvrir VBE (Visual Basic Editor) et de créer un Module Standard (Module1) et d'y copier ce code :
Option Explicit
Public Function VlookUpLeft(ByVal TheString As String, ByRef TheColumn As Integer) As String
Dim ThePlage As Range, TheCell As Range
Application.Volatile
With Sheets("Feuil1")
Set ThePlage = .Range("H1:H" & .Range("H65536").End(xlUp).Row)
End With
For Each TheCell In ThePlage
If TheCell = TheString Then
VlookUpLeft = TheCell.Offset(0, -TheColumn).Value
Exit For
End If
Next
End Function
A la ligne "Exit For", dans le cas d'une possibilité de plusieurs occurences retournées, on peut laisser ou supprimer cette ligne si on veut, au choix, le retour du Premier Item retourné ou bien sans cette ligne retour du Dernier Item retourné respectivement.
Une variante, afin de pouvoir aussi faire la sélection par l'assistant de fonction de son tableau où se trouve les Items à scanner :
=VlookUpLeftByPlage(B1;H1:H12;7)
Ceci s'appuyant sur cette Function suivante qui passe aussi cette Plage dans les Arguments plutot que de l'avoir en dûr dans le Code :
Public Function VlookUpLeftByPlage(ByVal TheString As String, ByRef ThePlage As Range, ByRef TheColumn As Integer) As String
Dim TheCell As Range
Application.Volatile
For Each TheCell In ThePlage
If TheCell = TheString Then
VlookUpLeftByPlage = TheCell.Offset(0, -TheColumn).Value
Exit For
End If
Next
End Function
Bon Dimanche à tous et toutes
@+Thierry