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 :

Intégrer une table HTML extraite d'une page Web dans un tableau Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Points : 46
    Points
    46
    Par défaut Intégrer une table HTML extraite d'une page Web dans un tableau Excel
    Bonsoir,
    J'ai besoin d'extraire un tableau de données formatées au milieau d'une page HTML, et de les copier dans un tableau Excel.
    Le tableau a une structure complexe, avec des cellules fusionnées sur certaines lignes, ce qui se retrancrit proprement par un copier/coller manuel de la selection dans ma page web vers une feuille Excel.
    Je veux automatiser le processus en VBA.
    J'ai donc écrit le code qui récupère ma table HTML dans un objet vba de type HTMLTable, mais je n'arrive pas à l'intégrer dans mon fichier Excel ni par l'objet table ni par son code HTML.

    Est-ce que quelqu'un connait un moyen de copier les données formattées sans connecter l'ensemble de la page à la feuille excel, et si possible sans passer par un fichier intermédiare ?

    Merci d'avance pour vos pistes éclairées.
    Si il n'y a pas de solution, c'est qu'il n'y a pas de problème!

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    le plus simple est encore depuis la feuille de calculs d'utiliser la fonction Nouvelle requête sur le Web et,
    en activant le Générateur de macros, le code VBA est livré sur un plateau ! (Voir dans l'aide VBA l'objet QueryTable)

    Sinon en cas d'échec, il y a deux méthodes pour lire un élément <Table> d'une page HTML,
    la lecture cellule par cellule (exemple dans cette discussion)
    ou la copie de la table dans le presse-papiers (effectuer une recherche dans ce forum sur clipboardData) …

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Points : 46
    Points
    46
    Par défaut
    Merci Marc-L.
    Après avoir passé une partie de la nuit dernière à suivre ta saga sur le rafraichissement de données d'une page Web, je suis ravi que tu me donnes ces pistes.
    J'avais commencé à chercher dans MSDN ce qu'était le query Table, mais j'ai pas encore testé, ca sera certainement plus rapide en le générant depuis excel.
    J'ai le présentiment que le clipboarddata sera ma solution préférée.
    Je vais explorer tout ça et reviendrai dans quelques jours pour conclure cette discussion.
    Si il n'y a pas de solution, c'est qu'il n'y a pas de problème!

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Points : 46
    Points
    46
    Par défaut Le bilan
    J'ai pris le temps de regarder les tois solutions proposées:
    Le queryTable parrait vraiment très pratique selon les pages HTML, mais n'a pas fonctionné dans mon cas: Message d'erreur dans Excel « aucune données renvoyée par la requête sur le Web……. ». je ne l'ai donc développé en VBA.
    La lecture cellule par cellule serait trop lourde à gérer dans mon cas: 1500 lignes de pouvant avoir différentes structures (cellules fusionnées différemment seln le contenu de la ligne).
    Me restait donc de passer par le clipboard, qui s'est avéré très efficace: en passant le code html dans le presse-papier, puis le coller dans la première cellule de la feuille excel de destination, alors la table est bien rfecopiée en respectant son format html.

    Merci Marc-L pour m'avoir exposé la palette de solution qui m'a permis de résoudre mon dossier.

    ci dessous un extrait du code utilisé (qui necessite d'activer la référence "Microsft Forms 2.0 Object Library" que je suis allé chercher en faisant parcourir surla DLL "FM20.DLL")
    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
    Sub test()
     
    Dim WinShell As New ShellWindows
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim TableHTML As HTMLTable
    Dim NumTableHTML As Integer
     
    'pour passer du texte dans le presse papier, activer Outils\References\Microsoft Forms 2.0  Object Library depuis FM20.DLL
    Dim objData As New MSForms.DataObject
     
    'comme mon code VBA est dans un module access, activer Outils\References\Microsoft Excel 15.0 Object Library
    'Crée un fichier excel pour recevoir le contenu de ma table HTML
    Dim xlApp As New Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheetData As Excel.Worksheet
    xlApp.Visible = True
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheetData = xlBook.sheets(1)
     
    'Ouvre la page HTML et récupère la table voulue dans un objet table
    IE.Navigate "https//test.html" 'mettre l'url de la page contenant la table à récupérer
    WaitIE IE ' procédure qui vérifie que la page soit complètement chargée
    Set IEDoc = IE.Document
    Set TableHTML = IEDoc.getElementsByTagName("TABLE")(10) 'sur ma page  c'est la 11éme table qui était à récupérer
     
    'Copie le code HTML de la table dans le presse-papier
    objData.SetText TableHTML.outerHTML
    objData.PutInClipboard
     
    'et enfin copie de la table dans la feuille Excel
    xlSheetData.Range("A1").PasteSpecial
     
    End Sub
    Si il n'y a pas de solution, c'est qu'il n'y a pas de problème!

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut





    Merci de ton retour !

    Sinon via clipboardData intégré à IE il n'est pas nécessaire d'activer MS Forms 2.0 …


    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Points : 46
    Points
    46
    Par défaut
    Effectivement, un peu difficile de trouver une documentation VBA du clipboardData d'Internet Explorer, mais la solution est effectivement plus simple.
    Voici mon code optimisé par cette fonctionnalité:
    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
    Sub test_developpez()
     
    Dim WinShell As New ShellWindows
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim TableHTML As HTMLTable
    Dim NumTableHTML As Integer
     
    'comme mon code VBA est dans un module access, activer Outils\References\Microsoft Excel 15.0 Object Library
    'Crée un fichier excel pour recevoir le contenu de ma table HTML
    Dim xlApp As New Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheetData As Excel.Worksheet
    xlApp.Visible = True
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheetData = xlBook.sheets(1)
     
    'Ouvre la page HTML et récupère la table voulue dans un objet table
    IE.Navigate "https//test.html" 'mettre l'url de la page contenant la table à récupérer
    Set IEDoc = IE.Document
    Set TableHTML = IEDoc.getElementsByTagName("TABLE")(10) 'sur ma page  c'est la 11éme table qui était à récupérer
     
    'Copie la table dans le presse-papier
    IEDoc.parentWindow.clipboardData.setData "Text", TableHTML.outerHTML
     
    'et enfin copie de la table dans la feuille Excel
    xlSheetData.Range("A1").PasteSpecial
     
    End Sub
    Si il n'y a pas de solution, c'est qu'il n'y a pas de problème!

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    C'est normal de ne pas trouver une documentation VBA de clipboardData car ce n'est pas du VBA mais du Windows

    Elle se trouve facilement sur MSDN ou encore via une recherche dans les discussions de ce forum …

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Modèle Relationnel] Faire une table par type ou une table des types ?
    Par jax54000 dans le forum Schéma
    Réponses: 12
    Dernier message: 18/11/2009, 11h43
  2. [MySQL] Créer une table actuelle à partir d'une table historique
    Par cleminute dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/10/2009, 14h35
  3. recupérer les info d'une table X pour alimenter une table Y
    Par lemerite dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/09/2008, 11h31
  4. Réponses: 1
    Dernier message: 16/09/2007, 14h14
  5. [HTML] Parcours d'une table HTML pour creer un fichier CSV : comment faire ?
    Par Thomus38 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 28/06/2007, 12h19

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