Imporation et modification page WEB

Bonjour à toutes et à tous

J'ai trouver sur le site un code me permettant de récupérer sur un site web la pages des courses.

mais je voudrais ensuite supprimer les premières lignes (jusqu’à la première ligne ou se trouve le mot date), et les dernières lignes après les tableaux.

un exemple est joint avec une feuille pour m'importation est une feuille pour le résultat désiré.

merci d'avance pour votre aide.

9import-web.xlsm (45.65 Ko)

bonjour

on n'utilise plus VBA pour lire des données sur le web

faire menu Données, Obtenir du web

le nettoyage des données aussi se fait dans Power Query

donne-nous l'adresse du site, on va voir

à te relire

amitiés

Bonjour jmd

désolé, mais je ne connait pas Power Query.

Ci-joint l'adresse du site.

https://www.aspttorleanscyclismecompet.fr/pages/courses/

A te relire

un exemple est joint avec une feuille pour m'importation est une feuille pour le résultat désiré.

Bonjour,

elle est où la macro ?

capture d ecran 296

Bonjour jmd

désolé, mais je ne connait pas Power Query.

Ci-joint l'adresse du site.

https://www.aspttorleanscyclismecompet.fr/pages/courses/

je n'ai pas réussi avec PowerQuery ... pas très bien structuré le site web !

Tes informations .... c'est une image ! donc tu ne pourras pas récupérer les infos.

A part charger l'image elle-même !!

Désolé je me suis trompé de fichier je renvoi le bon.

Amicalement.

Bernard

6import-web.xlsm (58.22 Ko)

https://www.aspttorleanscyclismecompet.fr/pages/courses/

Ce n'était pas le bon fichier mais ce n'est pas non plus la bonne source ! tu nous donnes maintenant :

http://www.ffc-centre-orleanais.fr/12-cyclo-cross.html

qui est en effet structuré correctement !

Un essai avec PowerQuery, mais il ne charge que septembre ... un spécialiste comme jmd pourrait peut-être nous dire pourquoi !

Ce que je peux proposer, c'est de ne charger que les tableaux comme ceci :

Un essai avec PowerQuery, mais il ne charge que septembre ... un spécialiste comme jmd pourrait peut-être nous dire pourquoi !

Aïe !

il y a des tables que le navigateur affiche à la demande

je ne sais pas comment les récupérer toutes

il est sans doute possible d'y parvenir

https://www.mattmasson.com/2014/11/iterating-over-multiple-pages-of-web-data-using-power-query/

mais ya du job !

il semble que PQuery regarde la page 1, sans voir les autres mois

(voir son option "affichage web")

il faut lui demander d'y aller.

amitiés

... et pourtant j'ai regardé, tous les onglets (qui sont des div) sont chargés ensemble il n'y a pas d'ajax !

Bonjour steelson

Merci pour ton aide.

Ta deuxième solution me plait beaucoup

J'aurais encore une question à te poser.

Serait il possible de faire en sorte de réunir après chargement tous les mois sur la même page ?

Merci d'avance.

A te relire

Amicalement

Bernard

Dans la page et notamment celle qui définit les css, http://www.ffc-centre-orleanais.fr/12-cyclo-cross.css?id=14066 on trouve

#Canvas2 {display:none; ...

ce qui fait que les mois sauf le premier #Canvas1 sont affichés sur demande même s'ils existent bien sur la page !

La méthode préconisée ici https://www.mattmasson.com/2014/11/iterating-over-multiple-pages-of-web-data-using-power-query/, bien que je n'aie pas tout compris, parle plutôt de pages multiples.

Bref il faudrait que PowerQuery capte aussi les données dites cachées (display:none).

Bon, cela m'a quand même permis dans un premier temps de faire une macro très light et super rapide permettant de charger tous les tableaux d'une page web.

Sub Maj()
Dim URL$, obj As New DataObject
On Error Resume Next
    DoEvents
    URL = [www]
    On Error Resume Next
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .Send
        If .Status = 200 Then
            For i = 1 To UBound(Split(.responseText, "<table"))
                txt = "<table" & Split(Split(.responseText, "<table")(i), "</table>")(0) & "</table>"
                obj.SetText txt
                obj.PutInClipboard
                ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
                ActiveSheet.Paste
                ActiveSheet.Name = "Table #" & i
            Next
        End If
    End With
End Sub

Bonjour à tous,

Quand les tableaux Html sont bien structurés, je préfère la méthode de lecture par les tags <tr> et <td>

Voir exemple joint

Pierre

Sub Lire(Site As String, Feuil As Byte)
Dim oHtml As New HTMLDocument
Dim Elem1 As Object, Elem2 As Object, Elem3 As Object
Dim lig As Long, col As Integer, S As Variant
Dim T As Variant

    oHtml.body.innerHTML = HTML(Site)
    lig = 1
    ReDim T(1 To 10, 1 To lig)
    For Each Elem1 In oHtml.getElementsByTagName("tr")
        lig = lig + 1
        ReDim Preserve T(1 To 10, 1 To lig)
            col = 0
            For Each Elem2 In Elem1.getElementsByTagName("td")
                col = col + 1
                T(col, lig) = Elem2.innerText
            Next Elem2
    Next Elem1

Bonjour Pierre,

Tu utilises en effet beaucoup plus souvent que moi le getElementsByTagName et c'est tout à fait pro !

Petit avantage quand même dans la méthode que j'ai proposé : on conserve les couleurs des polices de caractères (si tant est qu'elles signifient quelque chose).

Bonjour Stelso, et pierrep56.

Merci à vous deux de m'aider.

la solution de Pierre me convient mieux car j'ai tout sur la même page.

Mais j'ai un problème pour intégrer le code dans mon appli.

j'ai l'erreur suivante :" Erreur de compilation. Type défini par l"utilisateur non défini"

La feuille dans laquelle je voudrais intégrer le code est la n°13 (Liste_Courses_FFC)

je joins l'adresse du lien pour récupérer le fichier si cela aide.

encore merci pour votre aide

A vous relire

https://www.cjoint.com/doc/18_12/HLlj4DPfL7r_Inscriptions-R%C3%A9v17-14-Travail-essai2.xlsm

Bonjour à tous,

@Ldopa : 2 tâches à effectuer :

1/ Il faut activer la référence Microsoft HTML Object Library

2/ Dans le code de la procédure "Go", si la feuille est la n° 13, il faut indiquer : Lire Sheets(13).Range("A1").Value, 1

@Steelson : à noter, la lecture par balise générique permet de récupérer n'importe quelle page structurée en <table><td><tr>

Par exemple pour connaitre les horaires et coef des marées à Carnac, coller l'adresse suivante en A1 :

http://www.meteofrance.com/previsions-meteo-plages/carnac/56340

(sans aucune modif du code et valable pour tout site avec des <td><tr>)

Pierre

Mais je ne veux pas Carnac, je veux ... http://www.meteofrance.com/previsions-meteo-plages/noirmoutier-en-lile/85330

Merci.

Ok pas de soucis, alors je pense que cet autre fichier va t'amuser sur le fond et sur la forme (attention c'est du lourd!)

Pierre

cf => http://tatiak.canalblog.com/archives/2018/12/04/36918388.html

16meteo-json.xlsm (46.08 Ko)
Rechercher des sujets similaires à "imporation modification page web"