Recherche V et report de valeurs correspondantes sur selection
Bonjour à tou(te)s,
Je cherche à créer une sub pour :
(1) parcourir l'ensemble des cellules d'une sélection
(2) confronter la valeur de chacune de ces cellules à un index sur un autre feuillet
(3) reporter la valeur correspondante sur la cellule à droite de la cellule active à l'issue de ce test
Au total, une sorte de "RECHERCHEV" automatisée sur une plage de cellules sélectionnées.
J'ai bricolé un petit code que je vous joints ici.
Il fonctionne lorsque ma sélection ne comporte qu'une cellule.
En revanche, lorsque ma sélection comporte plus d'une cellule, c'est la valeur de la première correspondance qui est répliquée à l'infini.
Qu'est-ce qui m'échappe ? J'ai pas mal cherché avant de vous demander car j'ai l'impression de ne pas être très loin mais je ne trouve pas et en l'état... ma sub ne me sert pas à grand chose si je dois sélectionner à l'unité!
Le code suit:
Sub Correspondance_valeur()
'
'Va chercher la correspondance dans l'index
Dim MaValeur As Variant
Dim MaPlage As Range
Dim MaColonne As Single
Dim ValeurProche As Boolean
Dim cellule As Range
For Each cellule In Selection
MaValeur = ActiveCell.Value
Set MaPlage = ThisWorkbook.Sheets("Index").Range("A:B")
MaColonne = 2
ValeurProche = False
'Reporte cette correspondance à droite de la cellule active
cellule.Offset(0, 1).Value = RECHERCHEV(MaValeur, MaPlage, MaColonne, ValeurProche)
Next cellule
End Sub
Function RECHERCHEV(Valeur_Cherchee As Variant, Table_matrice As Range, No_index_col As Single, Optional Valeur_proche As Boolean)
'fonction RECHERCHEV
On Error GoTo RECHERCHEVerror
RECHERCHEV = Application.VLookup(Valeur_Cherchee, Table_matrice, No_index_col, Valeur_proche)
If IsError(RECHERCHEV) Then RECHERCHEV = "#N/A"
Exit Function
RECHERCHEVerror:
RECHERCHEV = "#N/A"
End FunctionAinsi que mon fichier d'exemple.
Un grand merci d'avance à vous pour votre aide !!!
Bonjour guillaumeplougoulm, le forum,
Essaie avec:
MaValeur = cellule.ValueUn essaie de simplification....
Sub Test()
Dim mavaleur As Variant
Dim maplage As Range, cellule As Range
Dim resultat As Variant
Set maplage = Sheets("Index").Range("A1:B" & Sheets("Index").Range("A" & Rows.Count).End(xlUp).Row) '..plage de recherche
With Sheets("Valeurs")
For Each cellule In Selection '..pour chaque cellule selectionnée
If cellule.Column = 1 Then '....si la selection est en colonne A
mavaleur = cellule.Value
resultat = IIf(IsError(Application.VLookup(mavaleur, maplage, 2, False)), "Aucune correspondance", Application.VLookup(mavaleur, maplage, 2, False))
cellule.Offset(0, 1) = resultat
End If
Next cellule
End With
End SubCordialement,
Merci beaucoup !
Ca fonctionne avec MaValeur = cellule.Value !
Merci aussi pour ta tentative de simplification, que je vais tenter de m'approprier.