Macro rechercheV sur deux feuilles

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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:
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
220
Retour