Vlookup VBA

Bonjour le Forum,

J ai un soucis avec ma macro qui me permet de faire un vlook up. Elle n affiche aucun resulat et aucun message d erreur, j essaie de comprendre d ou vient le probleme mais je bloque...

Je passe par un code VBA car les donnees viennent d un userform et je veux lancer la macro une fois les donnees importees dans la feuille excel.

Sub Test()

Dim ws1, ws2 As Worksheet

Dim i As Long

For i = 11 To LR

Set ws1 = ThisWorkbook.Sheets("Source")
Set ws2 = ThisWorkbook.Sheets("COMPASS Extraction")
Set rng = ws2.Range("A11")
LR = ws2.Range("A950000").End(xlUp).Row

    On Error Resume Next
   ws2(i, 11).Range = Application.WorksheetFunction.VLookup(ws2(i, 11), ws1.Range("C2:D28").Value, 2, False)

Next i

MsgBox ("done")

End Sub

Merci

Bonjour,

LR est défini un peu tard, non ?

For i = to LR (hors LR égal quoi ? vide ? donc pas de boucle.... donc pas d'erreur)

En effet vous définissez LR dans la boucle....

Essayez en déplaçant la définition de LR avant la boucle...

@ bientôt

LouReeD


Deuxièmement...

Pas de message d'erreur car vous utilisez :

On Error Resume Next

qui permet de continuer les script sans prendre en compte les erreurs ni de les afficher !!!

Attention donc à son utilisation, il vaut mieux le mettre en commentaire et une fois la procédure modifiée, corrigée, testée etc , alors seulement vous enlèverez le commentaire...

@ bientôt

LouReeD

Loupion a écrit :
ws2(i, 11).Range = Application.WorksheetFunction.VLookup(ws2(i, 11), ws1.Range("C2:D28").Value, 2, False) 

Salut Loupion !

Juste en regardant ta formule, l'argument "ws2(i, 11)" ne devrait-il pas être "ws2.cells(i, 11)" ?

Bonjour LouReed, Gazoline

J ai pris en compte vos deux commentaires et remarques qui sont tout a fait juste,

le code est le suivant

Dim ws1, ws2 As Worksheet
Dim LR As Long
Dim i As Long

Sub Test()

Set ws1 = ThisWorkbook.Sheets("Source")
Set ws2 = ThisWorkbook.Sheets("COMPASS Extraction")
Set rng = ws2.Range("A11")

LR = ws2.Range("A950000").End(xlUp).Row

For i = 11 To LR

'On Error Resume Next
ws2.Cells(i, 11).Range = Application.WorksheetFunction.VLookup(ws2(i, 11), ws1.Range("C2:D28").Value, 2, False)

Next i

MsgBox ("done")

End Sub

Mais j ai maintenant un message d erreur me disant "438" disant que l object n'accepte pas cette methode ou propriete

ws2.Cells(i, 11).Range = Application.WorksheetFunction.VLookup(ws2(i, 11), ws1.Range("C2:D28").Value, 2, False)

je pense que je dois corriger cette partie

Application.WorksheetFunction.VLookup

Mais je ne sais pas comment m y prendre car a chaque fois je retombe sur le meme message.

Bonjour,

Sans fichier ... tout le monde va y aller à tâtons ...

Sub Test()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim i As Long
Dim LR As Long
Dim Rng As Range

Set ws1 = ThisWorkbook.Sheets("Source")
Set ws2 = ThisWorkbook.Sheets("COMPASS Extraction")
LR = ws2.Range("A950000").End(xlUp).Row
Set Rng = ws2.Range("A11")

For i = 11 To LR
  ws2.Range("B" & i).Value = Application.WorksheetFunction.VLookup(ws2.Cells(i, 1), ws1.Range("C2:D28"), 2, False)
Next i

MsgBox ("done")

End Sub

Bonjour,

une autre solution est de mettre un point d'arrêt en début de procédure, dès lors dés qu'elle est appelée, elle s'arrête à ce point d'arrêt et il suffit de faire [F8] pour la faire "déroulée" ligne par ligne, afin de voir comment elle réagie, et en déplaçant le curseur de la sourie sur les variables, vous connaissez leur valeur...

@ bientôt

Loureed

Edit l'erreur WS(i,11) est valable aussi dans le VlookUp !

Bonjour,

De ce que je comprends.

Cdlt.

Option Explicit
Sub Test()
Dim wb As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rng As Range
Dim LR As Long, i As Long
Dim Resultat

    Application.ScreenUpdating = False

    Set wb = ThisWorkbook
    Set ws1 = wb.Worksheets("Source")
    Set rng = ws1.Range("C2:D28")
    Set ws2 = wb.Worksheets("COMPASS Extraction")

    With ws2
        LR = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = 11 To LR
            Resultat = Application.VLookup(.Cells(i, 11), rng, 2, False)
            If Not IsError(Resultat) Then .Cells(i, 11) = Resultat
        Next i
    End With

    MsgBox ("done")

End Sub

Bonjour Jean Eric,

Merci de vous pencher sur mon probleme

Je viens d essayer votre code mais aucun resultat n apparait...

Loupion

Comme le dit très souvent Jean-Eric ...

Re,

J'ai testé un peu chez moi et le code est fonctionnel.

Peux-tu nous joindre un fichier 'anonymisé et représentatif) pour nous aider à t'aider

Cdlt

Ci joint le fichier,

Re,

Merci pour le fichier ...

Sub Test()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim i As Long
Dim LR As Long
Dim Rng As Range

Set ws1 = ThisWorkbook.Sheets("Source")
Set ws2 = ThisWorkbook.Sheets("COMPASS Extraction")
LR = ws2.Range("A950000").End(xlUp).Row
Set Rng = ws1.Range("C2:D28")

Application.ScreenUpdating = False

For i = 11 To LR
  ws2.Range("K" & i).Value = Application.WorksheetFunction.VLookup(ws2.Cells(i, 1), Rng, 2, False)
Next i

MsgBox ("done")

End Sub

Ca fonctionne,

Merci

Je vois que j avais surement mal declare la valeur recherche....

Re,

Avec la petite gestion des NC.

Option Explicit
Sub Test()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rng As Range
Dim LR As Long, i As Long
Dim Resultat

    Application.ScreenUpdating = False

    Set ws1 = Worksheets("Source")
    Set rng = ws1.Range("C1").CurrentRegion
    Set ws2 = Worksheets("COMPASS Extraction")

    With ws2
        LR = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = 11 To LR
            Resultat = Application.VLookup(.Cells(i, 1), rng, 2, False)
            If Not IsError(Resultat) Then .Cells(i, 11) = Resultat
        Next i
    End With

    MsgBox ("done")

End Sub

Hello James007

J ai un message d erreur lors de l execution disant

"Unable to get the Vlookup property of the worksheetfunction class"

Cela apparait une fois que je lance la macro apres avoir injectee des donnees dans la feuille compass extraction avec le userform (dans le fichier envoye)

Jean Eric,

Le code que vous proposez avec

Set rng = ws1.Range("C1").CurrentRegion

fait le vlookup a partir de la cellule A1 et ne renvoie donc pas les donnees dont j ai besoin.

Re,

Set rng = ws1.Range("C1").CurrentRegion

rng correspond à la plage C1:D25 dans l'exemple que tu as fourni...

Maintenant, si tu as des données autres dans cette feuille, tu reprends :

Set Rng = ws1.Range("C2:D28")

Cdlt.

Effectivement Jean Eric c est tout bon maintenant. Cette solution fonctionne aussi

J ai juste un soucis avec les donnees que renvoie mon userform, il met des " " pour le texte que j ai mis dans la caption, du coup le vlookup ne fonctionne pas sur ces donnees venant du userform.

Avez vous une idee comment enlever les "" des donnees du userform?

Rechercher des sujets similaires à "vlookup vba"