SerchXls(Workbooks("Classeur2").Sheets("Feuil2").Range("A:A"), etc.
Private Sub Workbook_Activate()
Dim feuille, adr1$, adr2$, wb As Workbook, f, P1 As Range, P2 As Range, col%, lig&, v As Variant
feuille = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5") 'liste à adapter au besoin
adr1 = "A5:E15" 'adresse pour Classeur1
adr2 = "A5:E17" 'adresse pour Classeur2
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
Set wb = Workbooks.Open(Me.Path & "\Classeur1.xlsm") 'ouverture du fichier source, à adapter au besoin
For Each f In feuille
Set P1 = wb.Sheets(f).Range(adr1)
Set P2 = Me.Sheets(f).Range(adr2)
For col = 3 To 5 Step 2 'colonnes à traiter
P2.Columns(col) = Empty 'RAZ
For lig = 1 To P2.Rows.Count
v = Application.VLookup(P2(lig, 1), P1, col, 0)
If Not IsError(v) Then P2(lig, col) = v
Next lig, col, f
wb.Close False
Application.EnableEvents = True 'réactive les évènements
End Sub
MERCI JOB75Bonjour KTM, dysor, le forum,
C'est simple en supposant que :
- il y a les mêmes feuilles à traiter dans les 2 fichiers
- il s'agit toujours d'étudier les colonnes 1, 3 et 5 des plages A5:E15 et A5:E17.
La macro dans le ThisWorkbook de Classeur2.xlsm :
Les 2 fichiers doivent être placés dans le même dossier (le bureau).VB:Private Sub Workbook_Activate() Dim feuille, adr1$, adr2$, wb As Workbook, f, P1 As Range, P2 As Range, col%, lig&, v As Variant feuille = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5") 'liste à adapter au besoin adr1 = "A5:E15" 'adresse pour Classeur1 adr2 = "A5:E17" 'adresse pour Classeur2 Application.ScreenUpdating = False Application.EnableEvents = False 'désactive les évènements Set wb = Workbooks.Open(Me.Path & "\Classeur1.xlsm") 'ouverture du fichier source, à adapter au besoin For Each f In feuille Set P1 = wb.Sheets(f).Range(adr1) Set P2 = Me.Sheets(f).Range(adr2) For col = 3 To 5 Step 2 'colonnes à traiter P2.Columns(col) = Empty 'RAZ For lig = 1 To P2.Rows.Count v = Application.VLookup(P2(lig, 1), P1, col, 0) If Not IsError(v) Then P2(lig, col) = v Next lig, col, f wb.Close False Application.EnableEvents = True 'réactive les évènements End Sub
A+
Private Sub Workbook_Activate()
Dim feuille, adr1$, adr2$, d As Object, wb As Workbook, f, tablo1, P As Range, tablo2, col%, lig&
feuille = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5") 'liste à adapter au besoin
adr1 = "A5:E15" 'adresse pour Classeur1
adr2 = "A5:E17" 'adresse pour Classeur2
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
Set wb = Workbooks.Open(Me.Path & "\Classeur1.xlsm") 'ouverture du fichier source, à adapter au besoin
For Each f In feuille
tablo1 = wb.Sheets(f).Range(adr1) 'matrice, plus rapide
Set P = Me.Sheets(f).Range(adr2)
tablo2 = P.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
For col = 3 To 5 Step 2 'colonnes à traiter
d.RemoveAll 'RAZ
ReDim resu(1 To UBound(tablo2), 1 To 1)
For lig = 1 To UBound(tablo1)
d(tablo1(lig, 1)) = tablo1(lig, col) 'mémorise la valeur
Next lig
For lig = 1 To UBound(tablo2)
resu(lig, 1) = d(tablo2(lig, 1))
Next lig
P.Columns(col) = resu 'restitution
Next col, f
wb.Close False
Application.EnableEvents = True 'réactive les évènements
End Sub