Rapport de message :*
 

Re: Recupération d'infos sur ParisTurf

Titre du sujet : Re: Recupération d'infos sur ParisTurf
par myDearFriend! le 06/02/2011 22:18:35

Bonsoir chpaca, jc24, le Forum,

Oui, effectivement, je confirme ce que dis notre ami jc24 : pour comprendre ton classeur, il faut certainement être un fondu de Turf... Ce qui n'est pas vraiment mon cas, à vrai dire.

Cela dit, et pour répondre aux explications de ton premier post, tu trouveras ci-joint une interprétation de ce que j'ai compris.

J'ai utilisé le code suivant :

DANS LE MODULE DE CODE DE LA FEUILLE 1
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Application.Intersect(Target, Columns(2)) Is Nothing Then
        If Target.Value <> "" Then
            Cancel = True
            RecupListeChevaux Target.Offset(0, 1)
        End If
    End If
End Sub

DANS UN MODULE DE CODE STANDARD
Option Explicit
'--------------------------------------------------------------------
' Auteur    : Didier FOURGEOT (myDearFriend!)  -  www.mdf-xlpages.com
' Date      : 06/02/2011
' Sujet     : Récup données Web Paris-Turf.com
'--------------------------------------------------------------------
Sub MAJlisteCourses()
Dim IE As InternetExplorer
Dim IEDoc As HTMLDocument
Dim IElien As HTMLLinkElement
Dim Col As New Collection
Dim T As String
Dim L As Long, VerifL As Long, Lign As Long
Const vURL As String = "http://www.paris-turf.com/"
    'TRAITEMENT
    Sheets(1).Range("B:C").ClearContents
    Application.ScreenUpdating = False
    'Crée une instance d'IE invisible
    Set IE = CreateObject("internetExplorer.Application")
    IE.Visible = False
    'Ouvre la page Web
    IE.Navigate vURL
    Do Until IE.readyState = READYSTATE_COMPLETE
        DoEvents
    Loop
    'Récupère la liste de tous les ID intéressants (ID Courses sans doublon)
    Set IEDoc = IE.Document
    On Error Resume Next
    With Sheets(1)
        Lign = 5
        For L = 0 To IEDoc.Links.Length - 1
            Set IElien = IEDoc.Links(L)
            T = IElien
            If T Like "*course.html?idcourse=*" Then
                If Val(IElien.innerText) < 1 Then
                    VerifL = Col.Count
                    Col.Add IElien.innerText, IElien.innerText      'Sans doublon
                    If VerifL <> Col.Count Then
                        Lign = Lign + 1
                        .Cells(Lign, 2).Value = IElien.innerText      'Nom de la course
                        .Cells(Lign, 3).Value = CStr(Right(T, 6))     'ID de la course
                    End If
                End If
            End If
        Next L
    End With
    On Error GoTo 0
    IE.Quit
    Application.ScreenUpdating = True
    Beep
    MsgBox "Actualisation terminée !"
End Sub

Sub RecupListeChevaux(IDcourse As String)
Dim IE As InternetExplorer
Dim WbkCible As Workbook
Dim IEDoc As HTMLDocument
Dim IElien As HTMLLinkElement
Dim Col As New Collection
Dim vURL As String, T As String
Dim NbC As Long
    vURL = "http://www.paris-turf.com/reunion/pid ... ltats&idcourse=" & IDcourse
    'Crée le classeur de stats chevaux
    Workbooks.Add
    'TRAITEMENT
    'Crée une instance d'IE invisible
    Set IE = CreateObject("internetExplorer.Application")
    IE.Visible = False
    'Ouvre la page Web
    IE.Navigate vURL
    Do Until IE.readyState = READYSTATE_COMPLETE
        DoEvents
    Loop
    'Récupère la liste de tous les ID intéressants(ID Chevaux sans doublon)
    Set IEDoc = IE.Document
    T = IEDoc.DocumentElement.innerHTML
    IE.Quit
    On Error Resume Next
    NbC = InStr(1, T, "appelAjaxResume(this.id, 'CH',")
    Do While NbC > 0
        NbC = InStr(1, T, "appelAjaxResume(this.id, 'CH',")
        T = Mid(T, NbC + 30)
        If Val(T) > 0 Then Col.Add CStr(Val(T)), CStr(Val(T))
    Loop
    'Crée un onglet par cheval
    For NbC = 0 To Col.Count - 1
        RecupCheval IDcourse, Col(NbC), NbC
        DoEvents
        Application.StatusBar = "Traitement en cours > " & CStr(CInt(NbC * 100 / Col.Count)) & " %"
    Next NbC
    On Error GoTo 0
    Application.ScreenUpdating = True
    Application.StatusBar = False
    Beep
    MsgBox "Récupération terminée !"
End Sub

Sub RecupCheval(IDcourse As String, IDcheval As String, N As Long)
Dim R As Range
Dim vURL As String
    vURL = "http://www.paris-turf.com/dossier-lay ... torique_des_courses" _
            & "&idcheval=" & IDcheval & "&idcourse=" & IDcourse
    Worksheets.Add(After:=Sheets(Sheets.Count)).Name = "Ch " & CStr(N)
    With ActiveSheet.QueryTables.Add(Connection:="URL;" & vURL, Destination:=Range("A1"))
        .Name = "LaRequete"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingAll
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
        .Delete
    End With
End Sub

Le principe de fonctionnement est le suivant :
- Clic sur le bouton pour actualiser la liste des courses du jour (et récupération des ID correspondants)
- Double-clic sur un élément de la liste (course) pour obtenir les stats des chevaux dans un nouveau classeur.

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

Cordialement,