Vlookup depuis un workbook ouvert
Bonjour,
Je cherche à construire en VBA une macro dans mon fichier principal permettant de rechercher les données que je veux depuis un autre fichier.
J'ai testé une formule vlookup bricolée en appelant ma table où je veux que se retrouvent ces données.
Il me retourne une erreur 1004 application defined/object defined en pas à pas à partir de la 1ère instruction dans la boucle For.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| Sub dataext()
Dim main As Workbook
Set main = ThisWorkbook
Dim mainws As Worksheet 'Main worksheet
Set mainws = main.Worksheets("XXX")
Dim wB As Workbook 'Extract source
Workbooks.Open Filename:=(Range("A1")) 'Ouvrir le fichier cible
Set wB = Workbooks.Open(Filename:=Range("A1"))
Dim myLookupValue As String
Dim myFirstColumn As Long, myLastColumn As Long
Dim myColumnIndexprd As Long, myColumnIndexdev As Long
Dim myFirstRow As Long, myLastRow As Long
Dim myVLookupResult As Long
Dim myTableArray As Range
myLookupValue = [Table2].Item(Z, 1) 'id ref
myFirstColumn = 1
myLastColumn = 7
myColumnIndex1 = j 'i et j sont mes indices headers que je détermine à l'aide d'une autre routine, elle marche je ne l'ai pas intégrée dans cet extract de code pour que ça ne fasse pas trop lourd
myColumnIndex2 = i
myFirstRow = 3
myLastRow = wB.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row - 1
With wB.Sheets(1)
Set myTableArray = Range(Cells(myFirstRow, myFirstColumn), Cells(myLastRow, myLastColumn))
End With
For Z = 3 To last_row_main 'from line 3 to last row in main file
[Table2].Item(Z, i) = WorksheetFunction.IfNa(WorksheetFunction.VLookup(myLookupValue, myTableArray, myColumnIndex1, False), 0) 'error 1004 here
[Table2].Item(Z, j) = WorksheetFunction.IfNa(WorksheetFunction.VLookup(myLookupValue, myTableArray, myColumnIndex2, False), 0)
Next
wB.Close False ' ferme sans sauver
Set wB = Nothing
Set mainws = Nothing
End Sub |
J'ai l'impression que mon erreur vient de la manière dont je déclare mon csv (wB) ou bien dans la formule imbriquée où j'ai du oublier quelque chose.
J'aurais besoin d'une petite piste et éventuels conseils svp je bloque depuis un moment là-dessus.
Merci à vous.
EDIT : j'ai oublié d'imbriquer mon bloc sur le parcours du fichier cible en cellule A1 :
Code:
1 2 3 4 5 6 7
| Private Sub search_file()
With Application.FileDialog(msoFileDialogOpen) 'open a window to look for file
.AllowMultiSelect = False 'the user can select only one file
.Show ' show the window
Range("A1") = .SelectedItems(1) 'write in the cells A1 the path of the file which is contains in the variable "SelectedItems(1)"
End With
End Sub |