Rapport de message :*
 

Re: import page web

Titre du sujet : Re: import page web
par myDearFriend! le 22/05/2010 23:54:33

Bonsoir gmh, le Forum,

Bon, si j'ai bien compris la situation...

Tu trouveras en pièce jointe peut-être une solution à ton problème.

J'ai utilisé le code VBA suivant :

Option Explicit
'---------------------------------------------------------------------------------------
' Auteur    : Didier FOURGEOT (myDearFriend!)  -  www.mdf-xlpages.com
' Date      : 22/05/2010
' Sujet     : Récup données Web PMU
'---------------------------------------------------------------------------------------
Sub Traitement()
Dim vURL As String
Dim D As String, NumCourse As String
    With Sheets("Accueil")
        D = .Range("E2").Text
        NumCourse = .Range("E4").Text
    End With
    'URL de départ
    vURL = "http://www.pmu.fr/pmu/servlet/pmu.web ... etaillesServlet?dd=" _
            & D & "&idc=" & NumCourse & "&np=1&ppd=0"
    'Traiter
    RecupChevaux vURL
End Sub

Sub RecupChevaux(ByVal vURL As String)
Dim IE As InternetExplorer
Dim O As Object, OI As Object
Dim L As Long

    'Ouvre la page web dans IE de façon invisible
    Set IE = CreateObject("internetExplorer.Application")
    IE.Visible = False
    'RAZ de la feuille
    ActiveSheet.Cells.Delete
    Application.ScreenUpdating = False
    On Error Resume Next
    'Boucle sur l'ensemble des partants
    Do
        If vURL = "" Then
            'Bouton "Suivant" sur la page Web ?
            For Each OI In IE.Document.Links
                If OI.Title = "Suivant" Then
                    vURL = OI.href
                End If
            Next OI
        End If
        If vURL = "" Then Exit Do   'Sortir à la fin
        'Ouvrir la page Web
        IE.Navigate vURL
        Do Until IE.ReadyState = READYSTATE_COMPLETE
            DoEvents
        Loop
        'Récup Nom du partant
        Set O = IE.Document.getElementsByTagName("H1")
        For Each OI In O
            L = L + 1
            With Cells(L, 1)
                .Value = OI.innerText
                .EntireRow.AutoFit
                .EntireColumn.AutoFit
                Application.StatusBar = .Value
            End With
        Next OI
        'Récup Détail du partant
        Set O = IE.Document.getElementsByTagName("P")
        For Each OI In O
            If OI.innerText <> " Retour à l'accueil de pmu.fr" Then
                L = L + 1
                With Cells(L, 1)
                    .Value = OI.innerText
                    .EntireRow.AutoFit
                    .EntireColumn.AutoFit
                End With
            End If
        Next OI
        L = L + 1
        vURL = ""
    Loop
    Application.ScreenUpdating = True
    'Fermer IE
    IE.Quit
    Application.StatusBar = False
    MsgBox "Traitement terminé !  ", vbInformation + vbOKOnly, "myDearFriend!  -  www.mdf-xlpages.com"
End Sub

Un élément est devenu indispensable par contre : il te faut indiquer non seulement la date de la course mais aussi son numéro ID avant de lancer le traitement. Tu retrouveras ce numéro ID dans les Url de la page web pointant sur la course ciblée.

Dans ton exemple, la date était 22052010 et le numéro ID de la course 13792171.

En espérant que ça puisse te dépanner.

Cordialement,

PS: à l'avenir, si tu souhaites de l'aide, merci de faire un effort et de prendre la peine de donner des explications détaillées.

Autre chose STP : merci de ne pas faire de copier-coller de tes posts depuis Word. Word embarque un grand nombre de balises html invisibles dans ton post, ça alourdit inutilement la base de données du site d'une part et ça peut aussi perturber fortement la mise en forme des pages du forum d'autre part (pour info, j'ai dû intervenir dans la base de données du site pour épurer ton dernier post de ces balises malvenues).