IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Vlookup depuis un workbook ouvert


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2017
    Messages : 5
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Ne serait-il pas plus simple de remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        For Z = 3 To last_row_main 'from line 3 to last row in main file
            Item(Z, i) = WorksheetFunction.IfNa(WorksheetFunction.VLookup(myLookupValue, myTableArray, myColumnIndex1, False), 0) 'error 1004 here
            Item(Z, j) = WorksheetFunction.IfNa(WorksheetFunction.VLookup(myLookupValue, myTableArray, myColumnIndex2, False), 0)
        Next
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Range(Cells(3, i), Cells(last_row_main, i)).FormulaR1C1 = "=IFERROR(VLOOKUP(myLookupValue,myTableArray,myColumnIndex1,0),"""")"
        Range(Cells(3, j), Cells(last_row_main, j)).FormulaR1C1 = "=IFERROR(VLOOKUP(myLookupValue,myTableArray,myColumnIndex2,0),"""")"
    Essayez

    Cdlt

  3. #3
    Membre régulier
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2017
    Messages : 5
    Par défaut
    Bonjour ARTURO83,

    Plusieurs points:
    1. l'idée est bonne en 1ère intention. Le seul *hic* c'est que ma variable "my lookupvalue" correspond à chaque identifiant dans ma 1ère colonne, à chaque ligne. Du coup, j'ai modifié ma routine en plaçant myLookupValue dans la boucle comme ceci mais ne fonctionne toujours pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            For Z = 3 To last_row_main 'from line 3 to last row in main file
                myLookupValue = mainws.Cells(Z, 1) 'project name
                Range(Cells(3, i), Cells(last_row_main, i)).FormulaR1C1 = "=IFERROR(VLOOKUP(myLookupValue,myTableArray,myColumnIndex1,0),"""")"
                Range(Cells(3, j), Cells(last_row_main, j)).FormulaR1C1 = "=IFERROR(VLOOKUP(myLookupValue,myTableArray,myColumnIndex2,0),"""")"
            Next
    2. J'aimerais que les valeurs soient hardtyped dans mon tableau et que ce ne soit pas la formule qui reste. Comment pourrais-je faire?

    3. J'ai l'impression de ne pas être suffisamment clair dans ce que je veux essayer de faire. Dîtes-moi s'il y a un point que je dois éclaircir ?

    4. Je pense aussi avoir un problème ici, il me cible mon fichier principal et pas mon wB.Sheets(1):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            With wB.Sheets(1)
                Set myTableArray = Range(Cells(myFirstRow, myFirstColumn), Cells(myLastRow, myLastColumn))
            End With
    Si j'écris ceci je me mange un error 1004 again :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set myTableArray = wB.Sheets(1).Range(wB.Sheets(1).Cells(myFirstRow, myFirstColumn), wB.Sheets(1).Cells(myLastRow, myLastColumn))

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            For Z = 3 To last_row_main 'from line 3 to last row in main file
                myLookupValue = mainws.Cells(Z, 1) 'project name
                [Table2].Range(Cells(3, i), Cells(last_row_main, i)).FormulaR1C1 = "=IFERROR(VLOOKUP(myLookupValue,myTableArray,myColumnIndex1,0),"""")"
                [Table2].Range(Cells(3, j), Cells(last_row_main, j)).FormulaR1C1 = "=IFERROR(VLOOKUP(myLookupValue,myTableArray,myColumnIndex2,0),"""")"
            Next
    Si vous incluez la formule dans la boucle, alors il ne faut l'appliquer que sur une cellule et non pas sur l'ensemble, ce qui revient à conserver votre code initial mais en y appliquant une formule

    Faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        For Z = 3 To last_row_main 'from line 3 to last row in main file
            [Table2].Cells(Z, i).FormulaR1C1 = "=IFERROR(VLOOKUP(myLookupValue,myTableArray,myColumnIndex1,0),"""")"
            [Table2].Cells(Z, i).FormulaR1C1 = "=IFERROR(VLOOKUP(myLookupValue,myTableArray,myColumnIndex2,0),"""")"
        Next
    Cdlt

Discussions similaires

  1. [XL-2010] VBA_ Copier une feuille depuis un classeur ouvert vers un classeur fermé
    Par spike72 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/09/2018, 23h23
  2. [XL-2007] Fermer les workbooks ouverts automatiquement puis fermer Excel
    Par maximeozenne dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/03/2017, 15h24
  3. Code qui fonctionne depuis un module mais pas depuis un workbook
    Par Gualino dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/10/2011, 18h48
  4. [E-03 et E-07] macro demarre depuis mauvais workbook
    Par willbi dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 15/10/2008, 15h57
  5. [VBA-E] Creer une collection contenant les workbook ouverts
    Par jarod_bx dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/04/2006, 22h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo