VBA et Vlookup completement perdu!

vadius

Board Regular
Joined
Jul 5, 2011
Messages
70
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

Code:
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
 

Excel Facts

How can you automate Excel?
Press Alt+F11 from Windows Excel to open the Visual Basic for Applications (VBA) editor.
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:

Code:
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?
 
Upvote 0
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.
 
Upvote 0
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
 
Upvote 0
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)


Code:
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
 
Upvote 0
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.
 
Upvote 0
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

Code:
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 :)
 
Upvote 0
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.
 
Upvote 0
As requested

Code:
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
 
Upvote 0

Forum statistics

Threads
1,223,954
Messages
6,175,603
Members
452,658
Latest member
GStorm

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top