Macro rechercheV sur deux feuilles

ICE_SACCO

XLDnaute Junior
Bonjour,

Je cherche une macro qui me permette de rechercher une valeur sur une autre feuille.
Je possède Feuil 1 avec une colonne de valeur unique en A, je recherche les valeurs de ma colonne A sur la feuil 2 colonne B. Si ma valeur Feuil1 A est trouvée en Feuil 2 B je copie ce qu'il à dans la cellule de la feuil2 A dans feuil 1 B.
Ceci forcément pour toutes les valeurs que contient la colonne A Feuil1.

J'espère avoir été assez clair :( sur mon objectif

Merci d'avance
 

Chris401

XLDnaute Accro
Bonsoir

Essaye
VB:
Sub Recherche()

For i = 1 To Sheets("Feuil1").Range("A65536").End(xlUp).Row
    Rep = Range("A" & i)
    Set r = Sheets("Feuil2").Range("B:B").Find(Rep)
        If r Is Nothing Then Range("B" & i) = ""
        If Not r Is Nothing Then Range("B" & i) = r.Offset(0, -1)
Next i
End Sub
 

job75

XLDnaute Barbatruc
Bonsoir ICE_SACCO, Chris401,

S'il y a un grand nombre de lignes il faut impérativement passer par le Dictionary et des tableaux VBA :
Code:
Sub MAJ_F1()
Dim F1 As Worksheet, F2 As Worksheet, P As Range, t1, t2, d As Object, i&
Set F1 = Sheets("Feuil1"): Set F2 = Sheets("Feuil2") 'noms à adapter
Set P = Intersect(F1.[A:B], F1.UsedRange.EntireRow)
t1 = P 'matrice, plus rapide
t2 = Intersect(F2.[A:B], F2.UsedRange.EntireRow)
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
For i = 1 To UBound(t2)
  If t2(i, 2) <> "" Then If Not d.exists(t2(i, 2)) Then d(t2(i, 2)) = t2(i, 1)
Next
For i = 1 To UBound(t1)
  If d.exists(t1(i, 1)) Then t1(i, 2) = d(t1(i, 1))
Next
P = t1
End Sub
Edit : ajouté d.CompareMode = vbTextCompare 'la casse est ignorée

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour,
j'ai 9000 lignes la première solution marche très bien et rapide.
J'ai testé sur 9000 lignes dans les 2 feuilles, chez moi sur Win 10 - Excel 2013 :

- 1ère solution : 32 secondes

- 2ème solution : 0,17 seconde.

Pour la 1ère solution la durée se réduit à 27 secondes en ajoutant Application.ScreenUpdating = False

Par ailleurs il vaut mieux préciser la recherche avec .Range("B:B").Find(Rep, , xlValues, xlWhole)

Bonne journée.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 913
Messages
2 093 534
Membres
105 749
dernier inscrit
Mamadou221