# VBA et Vlookup completement perdu!



## vadius (Jul 20, 2011)

Bonsoir tout le monde

J ai un probleme avec le vlookup sous vba.
J essaie de recuperer des donnees stockees dans la sheet "Main" (colonne N, la "value" recherchee du vlookup etant dans la colonne M) pour les faire apparaitre dans la colonne B de la sheet "SPIExtractfinal" dans la plage cell(7,2) a Cell(228,2).  

Ci-dessous le code que j ai compose. Evidemment il ne fonctionne pas..

Qqun aurait il une idee ? 

Merci bcp 


```
Sub vlookup()
Set Value = Worksheets("MAIN").Range(Cells(2, M), Cells(223, M))
    target = Worksheets("SPIExtractfinal").Range(Cells(7, 2), Cells(228, 2))
For Each c In target
c.Value = Application.WorksheetFunction.vlookup(Value, target, 2, False)
Next c
End Sub
```


----------



## wigi (Jul 20, 2011)

Bonsoir,

Désolé, mais il existe pas mal de problèmes avec ce code. Ci-dessous je te montre ce que je pense donner le bon résultat:


```
Sub vlookup()
[B]Dim RngCells as Range[/B]
Set RngCells = Worksheets("MAIN").Range(Cells(2, [B]"M"[/B]), Cells(223, [B]"N"[/B]))
target = Worksheets("SPIExtractfinal").Range(Cells(7, 2), Cells(228, 2))
For Each c In target
c[B].Offset(,1)[/B].Value = WorksheetFunction.vlookup(c.Value, [B]RngCells[/B], 2, False)
Next c
End Sub
```

Ceci étant dit, pourqoui ne pas éviter ce boucle et mettre les formules dans la plage en une fois?


----------



## vadius (Jul 20, 2011)

Bonsoir

Merci pour le code mais j ai une erreur dans niveau de RngCells. "object defined error"

L idee de ne pas mettre directement les formules : Je dois repeter cette operation pour environ 250 plages (( prochaine question sur le forum !), correspondant a des prix chaque jours. Or il faut que je verifie que je prends les prix pour une certaine liste de stocks, et dans mes extracts, j ai bcp bcp de noms... 

Je cherche deja a comprendre comment le vlookup fonctionne sous vba, pour ensuite essayer de creer une boucle qui va repeter l operation pour plusieurs set de noms et ainsi "descendre" dans la spreadsheet et copier les prix si les ISIN correspondent.


----------



## vadius (Jul 20, 2011)

Autre raison par ailleurs est que je dois recuperer un paquet d information pour chaque ISIN, pas seulement le nom. Donc ensuite je fais un for i / j et joue avec les coordonnees des cellules pour remplir mos differents plages. 

Merci en tout cas


----------



## vadius (Jul 20, 2011)

For English speaking people ready to help 

I have some problems with some vollokup function in vba... 
I am trying to get the data in the column N of the sheet "Main" , (lookup_value are the cells in columns M) and I want them to appear in the sheet SPIExtractfinal in the plage Cells(7,2), Cells (228,2). 


Attached my spreadsheet, I hope it's gonne be easier for you to help. 

Thanks for your help (thanks wigi your help)



```
Sub vlookup()
Dim RngCells As Range
Set RngCells = Worksheets("MAIN").Range(Cells(2, "M"), Cells(223, "N"))
target = Worksheets("SPIExtractfinal").Range(Cells(7, 2), Cells(228, 2))
For Each c In target
c.Offset(, 1).Value = WorksheetFunction.vlookup(c.Value, RngCells, 2, False)
Next c
End Sub
```


----------



## wigi (Jul 20, 2011)

Si je lis tous ce qui précède mon post actuel, il faut que tu doives utiliser Find en VBA, et aussi travailler de manière structurelle pour récupérer les autres informations assez facilement.

Egalement, il est possible de mettre des formules dans une plage, et ensuite copier-coller comme valeurs figées.


----------



## vadius (Jul 21, 2011)

Peut etre mais je n'ai absolument aucune idee sur la facon de proceder. fonction find ?


----------



## Marcelo Branco (Jul 22, 2011)

Salut,

Vous pouvez le faire plus facilement avec des formules,

=RECHERVEV(B7; Main!$M2$:$N$228;2;0)

pour mettre cette formule en C7 et la copie vers le bas jusqu'à la fin de vos données.
(J'espère que votre séparateur d'arguments = ; point-virgule)


Mais il est également possible avec VBA, comme ci-dessous


```
Sub vlookup()
    Dim wk1 As Worksheet, wk2 As Worksheet
    Dim RngCells As Range, Target As Range, c As Range
 
    Set wk1 = Sheets("Main")
    Set wk2 = Sheets("SPIExtractfinal")
 
    With wk1
        Set RngCells = .Range(.Cells(2, "M"), .Cells(228, "N"))
    End With
 
    With wk2
        Set Target = .Range(.Cells(7, "B"), .Cells(228, "B"))
    End With
 
    For Each c In Target
        c.Offset(, 1).Value = Application.vlookup(c.Value, RngCells, 2, False)
    Next c
End Sub
```
 
Hope this helps

M.
ps: Je m'excuse d'avance pour les éventuelles erreurs en français


----------



## vadius (Jul 22, 2011)

Bonjour

Merci pour la fomule a placer dans la case...
Le code VBA ne fonctionne j ai finalement trouve le code a ecrire. 

merci de votre aide en tout cas.


----------



## vadius (Jul 26, 2011)

As requested 


```
Sub vlookup()
Dim i, z As Integer
For j = 0 To 193
For i = 7 To 229
For z = 2 To 15
On Error Resume Next
On Error Resume Next
Worksheets("SPIExtractfinal").Cells((j * 233) + i, z).Value = WorksheetFunction.vlookup(Worksheets("MAIN").Cells(i - 6 + 1, 13), Worksheets("SPIExtract").Range("B" & 7 + (j * 233) & ":G" & 234 + (j * 233)), z - 1, "false")
If Erro <> 0 Then Values = 0
If Erro <> 0 Then Values = xlErrNA
Next
Next
Next
MsgBox "Refomat Done"
End Sub
```


----------

