Ouverture d'un fichier puis vlookup

Bonjour à tous!

Dans ma macro, je cherche à effectuer un vlookup sur un autre fichier, normalement fermé.

Je sais qu'il est impossible de chercher dans un fichier fermé, donc j'ai fait en sorte que la macro l'ouvre avant d'effectuer le vlookup, puis le referme.

Cependant, je n'arrive pas à adapter la formule du vlookup à mon cas. Ci-joint un extrait anonymisé de mon fichier.

J'aimerai rechercher par "Customer number" (sur mon fichier de travail) la devise associée à celui-ci (sur mon fichier "CurrencyFile").

La petit difficulté pour moi c'est que je voudrais étendre ma formule à la dernière ligne non vide du fichier, en commençant par la cellule E2.

Pour l'instant j'ai fait ça et ça ne marche pas. Je m'embrouille avec mes Dim...

 
    'BLOC1 Vlookup sur les devises
    Application.ScreenUpdating = False
    'Nécessaire pour l'ouverture d'un fichier

    Dim wb As Workbook
    Set wb = Workbooks.Open("R:\chemin\CurrenciesFile.xlsx")
    Dim wsh As Worksheet
    Dim rnge As Range
    Dim devise As Single

    Set rnge = wsh.Range("B2:B" & lRows)
    Range("B2").Formula = "=VLOOKUP(rnge, wb, 2,0)"

    wb.Close
    Application.ScreenUpdating = True

Bonjour,

Voici une proposition à adapter.

Vérifie en particulier :

  • le nom de la feuille concernée dans le classeur CurrenciesFile
  • la plage de recherche (j'ai supposé que la colonnes A correspond à "Customer number" et B à "Currency").
Sub test()
Dim WbS As Workbook, WbC As Workbook
Dim WsS As Worksheet, WsC As Worksheet
Dim Cel As Range
    Set Wbs = Workbooks.Open("R:\chemin\CurrenciesFile.xlsx") ' Classeur source
    Set WsS = WbS.Sheets("sheet1") ' Feuille source
    Set WbC = ThisWorkbook ' Classeur cible
    Set WsC = WbC.Sheets("ConsoSheet") ' Feuille cible
    For Each Cel In WsC.Range("B2:B" & WsC.Range("B" & Rows.Count).End(xlUp).Row)
        Cel.Offset(, 3) = Application.VLookup(Cel, WsS.Columns("A:B"), 2, 0)
    Next Cel
    WbS.Close
End Sub

A+

Merci mille fois Frangy!!

J'ai bien adapté ton code au nom de ma feuille et à ma plage de recherche.

Cependant je me vois retourner une erreur "Subscript out of range" ce que je ne comprends pas...

Pourtant ma feuille source s'est bien ouverte..

Une idée ?

 Dim WbS As Workbook
    Dim WbC As Workbook
    Dim WsS As Worksheet
    Dim WsC As Worksheet
    Dim Cel As Range
    Set WbS = Workbooks.Open("R:\TR_DP\PRICING\30 LSMW Macro\CurrenciesFile.xlsx")
    'Classeur source
    Set WsS = WbS.Sheets("Sheet1") ' Feuille source
    Set WbC = ThisWorkbook ' Classeur cible
    Set WsC = WbC.Sheets("ConsoSheet") ' Feuille cible
    For Each Cel In WsC.Range("B2:B" & WsC.Range("B" & Rows.Count).End(xlUp).Row)
        Cel.Offset(, 3) = Application.VLookup(Cel, WsS.Columns("B:C"), 2, 0)
    Next Cel
    WbS.Close

  

Si cela peut aider, l'éditeur VBA me surligne en jaune la ligne :

 Set WsC = WbC.Sheets("ConsoSheet") ' Feuille cible

(Juste par cursioité, quelle est la fonction de l'expression "Cel.Offset(, 3)" dans ton code ?)

As-tu vérifié le nom de la feuille Cible (ConsoSheet) dans le classeur cible (ThisWorkbook), c'est à dire celui qui contient la procédure ?

Cel.Offset(, 3) correspond à la cellule dans laquelle est copié le résultat de la recherche.

Dans ton classeur, il s'agit donc de la cellule décalée de 3 colonnes par rapport à la colonne B (Customer number), soit la cellule de la colonne E.

A+

Oui j'ai vérifié c'est bien le bon.

Peut-il y avoir une autre explication ?

Une erreur de ce type indique généralement qu'une instruction fait référence à un objet inexistant.

Le code fonctionne (je l'ai testé).

Difficile d'en dire plus sans les classeurs.

A+

J'ai beau être revenue plusieurs fois sur mon code puis sur d'autres forums, impossible de faire marcher mon vlookup.

J'ai toujours un problème ici:

Set WsC = WbC.Sheets("ConsoSheet") ' Feuille cible

Et si le problème venait du fait que WsC n'est pas déterminé à cause de WbC ? Car WbC est déterminé par la phrase :

Set WbC = ThisWorkbook ' Classeur cible

Or comme juste avant on venait d'ouvrir le fichier source, peut-être que "This workbook" est compris par excel comme "Le fichier que l'on vient d'ouvrir, soit le fichier source" ? Plausible ?

Auquel cas, il faudrait que je Set mon classeur cible (WbC) par son nom. Mais comment faire quand le nom du fichier cible peut varier de jour en jour ?

Désolée d'insister mais malgré mes recherches je suis toujours bloquée et j'aimerai comprendre

Merci encore à tous pour votre précieux temps.

Le code entier si besoin:

Sub Devises()

    'BLOC1 Vlookup sur les devises
    Application.ScreenUpdating = False
    'Nécessaire pour l'ouverture d'un fichier

    Dim WbS As Workbook  'Classeur source
    Dim WsS As Worksheet 'Feuille source

    Dim WbC As Workbook 'Classeur cible
    Dim WsC As Worksheet 'Feuille cible

    Dim Cel As Range

    Set WbS = Workbooks.Open("R:\TR_DP\PRICING\30 LSMW Macro\CurrenciesFile.xlsx") 'Ouverture du fichier devise
    Set WsS = WbS.Sheets("Sheet1") 'Détermination de la feuille dans le fichier devise

    Set WbC = ThisWorkbook ' Classeur cible
    Set WsC = WbC.Sheets("ConsoSheet") ' Feuille cible

    For Each Cel In WsC.Range("B2:B" & WsC.Range("B" & Rows.Count).End(xlUp).Row)
        Cel.Offset(, 3) = Application.VLookup(Cel, WsS.Columns("B:C"), 2, 0)
    Next Cel

    WbS.Close

    Application.ScreenUpdating = True

    End Sub

Bonjour,

Je te disais qu'il est difficile d'en dire plus sans les classeurs parce que j'ai effectué les tests de mon coté sans rencontrer de problème particulier.

J'ai créé un classeur Test_VlookUp qui contient la feuille ConsoSheet et la procédure Devises().

J'ai enregistré le classeur CurrenciesFile qui contient la feuille Sheet1 avec les données Customer number en colonne B et les données Currency en colonne C.

Je lance la macro Devises et la colonne E (Currency) se remplit correctement.

Pour info : la propriété ThisWorkbook renvoie un objet Workbook qui représente le classeur dans lequel s'exécute le code de la macro active.

A+

Rechercher des sujets similaires à "ouverture fichier puis vlookup"