Import de page web sur Excel

Bonjour Sébastien,

Je suis tombé sur une vidéo bien faite pour l'import de site web sur excel. C'était une vidéo d'il y a 7 ans...

https://www.blog-excel.com/importer-des-donnees-site-web/

J'ai tout fait pareil mais je n'arrive pas à voir les "il y a" sur mon import malgré un code macro complètement identique. Il doit y avoir une option à activer sur excel mais je ne vois pas laquelle.

Pareil si j'essaie d'enlever l'"hyperlink". Ca ne me met pas les données en brut mais les liens.

Merci de ton aide

Kesta

22importation-web.zip (19.32 Ko)

Bonjour,

Avec excel 2016, tu as maintenant PowerQuery ...

Sinon, pour ne pas importer un site complet, que recherches-tu comme informations dans un site web ? et lequel ? car l'import peut-être assez spécifique selon l' "écriture" de la page web elle-même.

Bonjour Steelson,

Je pensais déjà m'exercer sur l'exercice donné par Sébastien pour passer ensuite sur un des site souhaités. En fait j'ai plusieurs sites que je "m'amuse" à copier coller sur excel tous les jours pour ensuite les travailler par des formules (je ne connais pas VB mais ne désespère pas apprendre petit à petit).

Je le fais aujourd'hui sur mon excel mac 2011 mais j'ai pu voir que les imports web sur mac étaient compliquées. Donc je suis passé sur ma version 2016 PC sur mon lieu professionnel pour envisager de faire ces imports en automatique.

En fait je fais des paris hippiques et copie les partants depuis le site geny (je ne peux pas mettre le lien exact en tant que nouveau sur ce site). Je déploie ensuite le lien de chaque historique de cheval pour le copier sur un autre onglet. Ensuite, je vais sur un autre site pour copier les cotes en court et ensuite je vais chercher d'autres paramètres sur letrot (pareil qu'au dessus pour le lien exact).

Je rappelle juste ma question du départ : comment se fait il qu'avec la même macro je n'obtiens pas les même données affichées et qu'il me manque du texte (les "il y a")?

Question bonus : comment, a partir d'une date demandée depuis une cellule excel, je pourrais la rentrer en variable dans l'url de recherche dans la macro ? Par exemple (l'url est fausse et indiquée ici à titre d'exemple) dans l'url /course du 27-02-20/ j'aimerais savoir s'il est possible de faire varier le 27-02-20 pour que je n'ai pas à rentrer dans la macro tous les jours pour changer la date.

Voilou et merci

Tchuss

Kesta

Je rappelle juste ma question du départ : comment se fait il qu'avec la même macro je n'obtiens pas les même données affichées et qu'il me manque du texte (les "il y a")?

Difficile de répondre à ta quetsionn car je n'ai jamais utilisé QueryTables.Add(Connection:______________) !!

Néanmoins, si je regarde la page

je ne vois pas "il y a"

Et si je regarde le code source je ne vois pas non plus "il y a"

Donc cette condition

Left(Sheets("TEMP").Cells(ligne, 1), 6) = "Il y a"

n'est jamais respectée et le compteur reste à 0.

Pour moi c'est normal !

Changeons de sujet, je vais te répondre sur geny (je précise que je ne suis pas turfiste !)

ok merci mais le site de départ était bien blog-excel.com et non blog-excel.com/category/astuce/etc... J'ai tout fait pareil que dans la video de notre ami Sébastien. Le site a du changer de structure...

ok merci mais le site de départ était bien blog-excel.com et non blog-excel.com/category/astuce/etc...

Le résultat est le même !


Question bonus : comment, a partir d'une date demandée depuis une cellule excel, je pourrais la rentrer en variable dans l'url de recherche dans la macro ?

Une date est un nombre

Une URL c'est du texte

Il faut transformer la date en format compatible avec ce que le site a défini comme structure

Par exemple, si la date est en A1, l'URL à prendre en compte est :

"https://www.geny.com/reunions-courses-pmu?date=" & Format(Range("A1"), "yyyy-mm-dd")

Commence avec ceci ... on pourra ensuite aller chercher les infos que tu souhaites.

Génial. Je teste ça ce soir au coin du feu.

Résultats ?

Résultat : je me suis endormi sur le canapé. Ça fait un sacré effet ce code !!!😂

Sans rire. Aujourd’hui je me suis plongé dans vos cours ( je me plonge dans les bases) et ce soir promis je teste.

bon je suis un peu nul (meme beaucoup)... Je te joins le fichier.

19geny.xlsx (10.75 Ko)

Ah, ben il n'y a aucune action !!

Bon j'ai essayé moi aussi QueryTables.Add(Connection:="URL;_________, et voici le résultat.

Conclusion : la méthode n'est pas pertinente pour le site en question !

Avec excel 2016, tu as PowerQuery, bien plus simple ... PowerQuery > A partir du web ... et hop, le tour est joué. Mais aucun résultat car le site n'est pas organisé en tableau !

capture d ecran 308

Solution plus "universelle" à mon sens (c'est celle que j'emploie toujours de préférence), charger la source de la page dans une zone de texte avec une fonction simplifiée à l'extrême ...

Function pageHTML(url As String) As String
    With CreateObject("WINHTTP.WinHTTPRequest.5.1")
        .Open "GET", url, False
        .send
        pageHTML = .responseText
    End With
End Function

Avec ceci, il y a 2 grande voies :

  • construire un objet page avec comme contenu (page.body.innerHTML) le texte du site
  • traiter directement le texte en y puisant les informations pertinentes.

Avant de continuer et pour éviter tout risque de noyade, quel est ton niveau en VBA ?

Avec ceci, il y a 2 grande voies :

  • construire un objet page avec comme contenu (page.body.innerHTML) le texte du site
  • traiter directement le texte en y puisant les informations pertinentes.

Pour la première voie, je vais rechercher les liens identifiés par getElementsByTagName("a") ... c'est là où la compréhension est un peu plus pointue car d'une part on manipule des objets et d'autre part cela requiert de connaître un peu le HTML (et les DOM)..

Sub Go()
Dim page As New HTMLDocument, lien As Object, lig As Integer, url As String

    ' effacement
    Range("B1").CurrentRegion.Offset(2, 0).ClearContents

    ' création de l'objet page avec comme contenu le site
    url = Range("A2").Value
    page.body.innerHTML = pageHTML(url)

    ' recherche des liens contenant un mot-clé
    lig = 3
    For Each lien In page.getElementsByTagName("a")
        url = lien.getAttribute("HREF")
        If url Like "*" & Range("B2").Value & "*" Then
            Cells(lig, 1) = url
            lig = lig + 1
        End If
    Next lien

End Sub

Coucou,

Effectivement j'avais testé powerquery sur ce site et .... rien comme toi. il va falloir que je le traite en plusieurd étapes. Cette première étape que tu m'as faite va mettre d'une grande aide car les url listée renvoient elles vers des tableaux. Bon je regarde à temps perdu et te redis. En tout cas merci beaucoup déjà de ta réactivité et du temps passé. Il faut dormir un peu...

22geny.xlsm (23.04 Ko)

Cette première étape que tu m'as faite va mettre d'une grande aide car les url listée renvoient elles vers des tableaux.

Et en effet, cette fois-ci PowerQuery te donnera des résultats, avec par exemple cette url

capture d ecran 309

... à suivre je suppose car on n'est pas encore au bout ! car si maintenant tu veux les URL des partants, il faudra plutôt utiliser la méthode que je décrivais précédemment !

bon j'ai réussi à extraire le tableau souhaité. Il me faut extraire autant de feuille que de course en mettant le nom en colonne A en variable.

je te laisse faire ..ou as-tu besoin d'un coup de pouce ?

oula je pense bien !!!! mais je veux essayer d'apprendre un peu par moi même sans déranger tout le monde à chaque ligne jaune....

Si je dois faire par VBA tout ce que je faisais à la main par des copier/coller ou des formules me mangeaient tout mon CPU, tu n'as pas fini de m'entendre..... hihihi

Pas de soucis car je connais bien geny et j'ai déjà tout fait de a à z.

Par contre mon but est plutôt d'accompagner et expliquer plutôt que de donner une solution toute faite (et qui n'est pas unique).

Rechercher des sujets similaires à "import page web"