Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Boucle VBA d'import de Table PDF

Wayki

XLDnaute Impliqué
Bonjour à tous,
Je suis bloqué sur une macro qui me permettrai de collecter des données de fiches techniques concernant des produits dans un inventaire.
Avec l'enregistreur de macro, j'ai réussi à avoir le code qui me permet de collecter les données voulues d'une fiche.
VB:
 ActiveWorkbook.Queries.Add Name:="Page002", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Pdf.Tables(Web.Contents(""https://cdn.api.groupe-pomona.fr/public/products/0008460/branch/pf/medias/beurre-micropain-doux-82-mg-10-g-president-professionnel_0008460-pf_technical.pdf""), [Implementation=""1.2""])," & Chr(13) & "" & Chr(10) & "    Page1 = Source{[Id=""Page002""]}[Data]," & Chr(13) & "" & Chr(10) & "    #""En-têtes promus"" = Table.PromoteHeaders(Page1, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & "    #""T" & _
        "ype modifié"" = Table.TransformColumnTypes(#""En-têtes promus"",{{""Column1"", type text}, {""[image]"", type text}, {""Column3"", type text}, {""Column4"", type text}, {""Column5"", type text}, {""Column6"", type text}, {""Column7"", type text}, {""Beurre micropain doux 82% MG 10 g Président"", type text}, {""Column9"", type text}, {""Column10"", type text}, {""Col" & _
        "umn11"", type text}, {""Column12"", type text}, {""Column13"", type text}, {""Column14"", type text}, {""Column15"", type text}, {""Column16"", type text}, {""Column17"", type text}, {""Column18"", type text}, {""Column19"", Int64.Type}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Type modifié"""
    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Page002;Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [Page002]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Page002"
        .Refresh BackgroundQuery:=False
Seulement après plusieurs essais, je n'arrive pas à changer l'adresse : Source = Pdf.Tables(Web.Contents("" ""), [Implementation=""1.2""]) par l'adresse du lien hypertexte contenu dans la feuille excel.
J'ai essayé de bouger les "", de mettre des .hyperlinks(1).adress mais rien n'y fait.
J'ai besoin de ça pour faire une boucle et ainsi importer les données voulues pour plus de 600 articles.
Quelqu'un aurait une idée ?
Je glisse une partie de mon fichier, si quelqu'un arrive à boucler sur les 2 articles présents ce sera ok après.
Merci par avance
 

Pièces jointes

  • essai.xlsm
    19.3 KB · Affichages: 8
Solution
Salut le forum, salut kiki29,
Je ne me suis pas repenché sur le sujet jusqu'à maintenant.
Après plusieurs essais, j'ai enfin réussi !
La solution était toute bête, trouvée sur des forums américain.
Il suffisait de créer une variable.
Dire dans le module x = url, et appliquer x dans web.content, seulement excel ne met pas en forme automatiquement comme une ligne de code classique, il faut penser aux espaces avant et après les &, c'est pour ça que j'étais passé à côté.
Dans l'exemple ça donne :
VB:
i = Worksheets(1).Range("k1").Hyperlinks(1).Address
    Application.CutCopyMode = False
    ActiveWorkbook.Queries.Add Name:="Page002", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Pdf.Tables(Web.Contents(""" & i & """)...

Wayki

XLDnaute Impliqué
Salut, merci pour ta contribution, j'ai vu tous tes postes sur l'importation de pdf, sacré travail.
Je vais essayer ta façon de faire et voir si j'arrive à extraire la donnée voulue
Merci
 

Wayki

XLDnaute Impliqué
Salut le forum, salut kiki29,
Je ne me suis pas repenché sur le sujet jusqu'à maintenant.
Après plusieurs essais, j'ai enfin réussi !
La solution était toute bête, trouvée sur des forums américain.
Il suffisait de créer une variable.
Dire dans le module x = url, et appliquer x dans web.content, seulement excel ne met pas en forme automatiquement comme une ligne de code classique, il faut penser aux espaces avant et après les &, c'est pour ça que j'étais passé à côté.
Dans l'exemple ça donne :
VB:
i = Worksheets(1).Range("k1").Hyperlinks(1).Address
    Application.CutCopyMode = False
    ActiveWorkbook.Queries.Add Name:="Page002", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Pdf.Tables(Web.Contents(""" & i & """),
etc etc...
Il ne me reste plus qu'à créer la boucle pour chopper les infos qu'il me faut sur des centaines de produits
 

Discussions similaires

Réponses
22
Affichages
4 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…