procédure pour récupérer données web
#1
Débutant XLPages

Inscription: 06/05/2010

Messages: 5

Système d'exploitation:
PC
Version Excel utilisée:
Excel 2007
Posté le : 07-05-2010 17h40
Bonjour

Etant passionné par les courses hippiques et ayant des connaissances trés limitées en informatique,pourriez-vous m'indiquer une procédure simple pour récupérer des données relatives au palmares des chevaux et ce d'une maniere automatique du site www.france-galop.com .

   Actuellement,j'ai recours a la procédure manuelle :
données------->données externes---->a partir du site web..etc
qui me prend énormément de temps puisque j'importe les stats de 30 chevaux en moyenne(2 a 3 courses par réunion) qui se trouvent sur des pages web différentes.

Merci pour votre aide.


Pièce jointe:
xlsx exemple.xlsx   [ Taille: 18.40 Ko - Téléchargements: 906 ]

"Aux courses, les petits tuyaux font les grandes misères."

Michel Audiard

Hors Ligne
Rapport   Haut 

Re: procédure pour récupérer données web
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 07-05-2010 20h27
Bonsoir bassatine et bienvenue sur XLpages.com 
Bonsoir le Forum,

Dans le lien fourni, une liste déroulante avec 18 chevaux. Faut-il récupérer les données de ces 18 chevaux ? Comment présenter l'ensemble ? Un onglet par cheval ou les tableaux les uns en dessous des autres ?

Par ailleurs, juste une précision pour la suite : il doit être possible de réaliser quelque chose de simple pour te dépanner ou te mettre sur la voie. Mais ici, ne t'attends pas à ce qu'on fasse au final une application complète "clé en main", ce n'est pas l'objet de ce forum. Si tu as compris ce que je précise là et si tu es d'accord, alors je suis partant pour t'aider...

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: procédure pour récupérer données web
#3
Débutant XLPages

Inscription: 06/05/2010

Messages: 5

Système d'exploitation:
PC
Version Excel utilisée:
Excel 2007
Posté le : 08-05-2010 00h35
Bonsoir myDearFriend!

Merci pour l'interet que tu as porté a ma demande d'aide.
Pour chaque cheval,j'aimerais récupérer le nom ainsi que le tableau renfermant le résumé de sa carriere.Les tableaux seront,si c'est possible, présentés les uns en dessous des autres.(voir piece jointe)

  Je ne m'attends pas a une application toute faite,mais plutot a des indications opérationnelles pour en rendre la réalisation abordable.

  Merci pour tout.


Pièce jointe:
xlsx exemple 2.xlsx   [ Taille: 15.28 Ko - Téléchargements: 931 ]

"Aux courses, les petits tuyaux font les grandes misères."

Michel Audiard

Hors Ligne
Rapport   Haut 

Re: procédure pour récupérer données web
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 08-05-2010 15h21
Bonjour bassatine, le Forum,

Tu dis avoir des connaissances informatiques très limitées aussi je doute qu'en te donnant simplement quelques indications (aussi opérationnelles soient-elles), tu puisses te débrouiller... Ou alors, tu es un génie qui s'ignore

Je vais donc essayer de te mettre sur la voie et peut-être te donner envie d'approfondir le sujet car tu verras, Excel et VBA ça peut être passionnant aussi...

Dans la pièce jointe, tu trouveras donc peut-être une réponse à ta demande.
Après avoir ouvert le classeur en activant les macros, tu cliques sur le bouton "Mise à jour" et tu patientes quelques secondes...

Bien sûr, on peut faire plus court et on peut certainement faire plus rapide, mais j'ai préféré privilégier la solution la plus abordable pour toi il m'a semblé.

Tout d'abord, l'outil de base pour développer avec VBA dans Excel, s'appelle l'"enregistreur de macro" (pour plus d'infos et faire connaissance avec cet outil, je te conseille la consultation de CE LIEN).
En utilisant donc l'enregistreur de macro, je suis parti de ta procédure manuelle et l'ai suivie comme tu le fais. A terme, j'ai obtenu le code VBA suivant :
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 07/05/2010 par myDearFriend!
'

'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www2.france-galop.com/fgweb/Do ... m=297&statut=DP" _
        , Destination:=Range("A1"))
        .Name = _
        "cheval_perf.aspx?navigationChevaux=true&idcheval=03153823&aaCrse=2010&cSp=P&numCrsePgm=297&statut=DP_2"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .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
    End With
End Sub
Evidemment, au premier abord et sans connaissance particulière, ce n'est pas très causant... Mais si l'anglais ne te rebute pas trop, tu obtiens ainsi déjà une bonne approche de ce qu'est une requête Web sur Excel et tu peux même t'amuser à en modifier quelques propriétés pour en analyser les effets. Pour rappel aussi : une fois le curseur de l'éditeur VBA positionné sur un mot, tu appuies sur la touche F1 et tu obtiens l'aide correspondante... C'est in-dis-pen-sa-ble !

Je suis donc parti de ce code extrait de l'enregistreur et j'ai ensuite "brodé" un peu avec mes connaissances VBA (je ne suis pas un spécialiste Requête Web cela dit !). Par ailleurs, pour ce type de procédure, il convient aussi d'avoir quelques notions HTML : en premier lieu, j'ai décortiqué un peu le code HTML de ta page web pour repérer les seules balises "Table" sur lesquelles m'intéresser. C'est de là par exemple que j'en tire les noms comme "ctl00$cphContenuCentral$navigation_cheval$ddlChevaux" qui peuvent paraitre un peu barbare à première vue... Mais c'est tout bonnement le nom qu'a choisi le concepteur de cette page Web.

Dans le classeur joint, j'ai utilisé le code complet ci-après :
Option Explicit
'myDearFriend!  -  www.mdf-xlpages.com

Sub Traitement()
Dim vURL As String
    'URL de départ (à adapter au besoin)
    vURL = "http://www2.france-galop.com/fgweb/Do ... m=297&statut=DP"
    RecupChevaux vURL
End Sub

Sub RecupChevaux(vURL As String)
Dim IE As InternetExplorer
Dim sel As HTMLSelectElement
Dim TabChevaux() As String
Dim L As Long
Dim i As Byte

'OBJECTIF : Récupérer les éléments de la liste déroulante chevaux (n° de Ref du cheval + Nom du cheval) dans un tableau String
   
    Application.ScreenUpdating = False
    'on ouvre la page web dans IE de façon invisible
    Set IE = CreateObject("internetExplorer.Application")
    IE.Visible = False
    IE.Navigate vURL
    Do Until IE.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Loop
    'On stocke les éléments (N° + Nom) dans le tableau de type String redimensionné
    Set sel = IE.Document.getElementById("ctl00$cphContenuCentral$navigation_cheval$ddlChevaux")
    For i = 0 To sel.Length - 1
        ReDim Preserve TabChevaux(1 To 2, 1 To i + 1)
        TabChevaux(1, i + 1) = sel(i).Value
        TabChevaux(2, i + 1) = sel(i).getAdjacentText("afterBegin")
    Next i
    'On ferme IE (devenu inutile)
    IE.Quit
    Application.ScreenUpdating = True
   
'OBJECTIF : On récupère les tableaux Carrière de chaque cheval de la liste dans l'onglet Résultats
    With Sheets("www.mdf-xlpages.com")
        'On efface d'abord les anciennes données de l'onglet Résultats
        .Cells.Delete
       
        Application.ScreenUpdating = False
        'On boucle sur la liste de chevaux stockée pour récupérer les données souhaitées
        For i = 1 To UBound(TabChevaux, 2)
            'Trouver la prochaine ligne libre de l'onglet Résultats
            L = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            'On inscrit le Nom du cheval
            .Cells(L + 2, 1).Value = TabChevaux(2, i)
            'On récupère le tableau de carrière (par requête Web)
            RecupCarriere .Cells(L + 4, 1), TabChevaux(1, i)
        Next i
        Application.ScreenUpdating = True
    End With
    MsgBox "Traitement terminé !  ", vbInformation + vbOKOnly, "myDearFriend!  -  www.mdf-xlpages.com"
End Sub

Sub RecupCarriere(R As Range, Ncheval As String)
Dim vURL As String
    vURL = "http://www2.france-galop.com/fgweb/Do ... =true&idcheval="
    vURL = vURL & Ncheval
    vURL = vURL & "&aaCrse=2010&cSp=P&numCrsePgm=297&statut=DP"
    With R.Parent.QueryTables.Add(Connection:= _
        "URL;" & vURL, Destination:=R)
        .Name = "MaRequete"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlSpecifiedTables
        .WebTables = "ctl00_cphContenuCentral_gvCarriere"   'ici, on cible uniquement la table souhaitée
        .WebFormatting = xlWebFormattingAll
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
        .Delete
    End With
End Sub

Je ne vais pas pouvoir t'expliquer en détail toute ma démarche, mais tu trouveras en couleur verte des commentaires que j'ai laissé pour que tu puisses te situer un peu dans ce code.

En espérant t'avoir un peu dépanné...

Cordialement,


Pièce jointe:
zip mDF_Turf.zip   [ Taille: 17.76 Ko - Téléchargements: 1340 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: procédure pour récupérer données web
#5
Débutant XLPages

Inscription: 06/05/2010

Messages: 5

Système d'exploitation:
PC
Version Excel utilisée:
Excel 2007
Posté le : 08-05-2010 16h38
Bonjour myDearFriend!

Je tiens tout d'abord a t'exprimer ma reconnaissance et ma gratitude pour ton aide si précieuse.

Le fichier joint répond exactement a mes besoins et les explications qui l'accompagnent sont  claires et précises .

Bien que je sois conscient du long parcours qui m'attend pour maitriser tout ca,je ne me décourage pas,bien au contraire,je vais essayer d'acquérir les connaissances de base me permettant une meilleure compréhension du code VBA.

Merci myDearFriend!




Edité par bassatine le 08/05/2010 19:44:16

"Aux courses, les petits tuyaux font les grandes misères."

Michel Audiard

Hors Ligne
Rapport   Haut 

Re: procédure pour récupérer données web
#6
Débutant XLPages

Inscription: 28/02/2019
De France

Messages: 1

Système d'exploitation:
PC
Version Excel utilisée:
Excel 2013
Posté le : 28-02-2019 14h36

Bonjour,

je suis conscient que ce sujet date mais il est je pense celui qui m'a aidé le plus jusqu'ici.

Pour faire simple, je travaille avec un outil qui génère des bilans d'analyses sous format HTML, en voici un exemple de la partie intéressante DOM :

 


<table class="identification" width="740" cellspacing="0">
<tbody><tr class="entete">
<th class="" colspan="4" rowspan="1"><span class="strong title_commentaire">Détection du défaut</span></th>
</tr>
<tr class="sous_entete">
<th class="">Nom de l'OMT</th>
<th class="res_mise_liaison">Résultat de la mise en liaison</th>
<th class="res_ild">Résultat(s) du/des détecteur(s) de défaut</th>
<th class="">Information(s) complémentaire(s)</th>
</tr>
<tr class="">
<td class="">138G</td>
<td class=""><span class="textVert">OK</span></td>
<td class="">-----</td>
<td class="">-----</td>
</tr>
<tr class="">
<td class="">050E</td>
<td class=""><span class="textVert">OK</span></td>
<td class="">-----</td>
<td class="">-----</td>
</tr>
<tr class="">
<td class="">084C</td>
<td class=""><span class="textRouge">KO : LIAISON OMT</span></td>
<td class="">-----</td>
<td class="">-----</td>
</tr>
</tbody></table>

<table class="identification" width="740" cellspacing="0">
<tbody><tr class="entete">
<th class="" colspan="7" rowspan="1">Séquence d'isolement</th>
</tr>
<tr class="sous_entete">
<th class="">Date Heure</th>
<th class="">Poste</th>
<th class="">PA OMT</th>
<th class="">Libellé</th>
<th class="">Manoeuvre</th>
<th class="" colspan="2" rowspan="1">Résultat</th>
</tr>
<tr class="">
<td class="">23/02/2019 23:16:35</td>
<td class="">IROU-PN</td>
<td class="">138G</td>
<td class="">INTER  1</td>
<td class="">TC OUV   </td>
<td class="" colspan="2" rowspan="1"><span class="textVert">OK</span></td>
</tr>
<tr class="">
<td class="">23/02/2019 23:17:02</td>
<td class="">IROU-PN</td>
<td class="">138G</td>
<td class="">INTER  1</td>
<td class="">OUV   </td>
<td class="" colspan="2" rowspan="1"><span class="textVert">OK</span></td>
</tr>
</tbody></table>
<table class="identification" width="740" cellspacing="0">
<tbody><tr class="entete">
<th class="bordure_table" colspan="1" rowspan="14" width="4%">P<br>O<br>C<br>H<br>E<br>&nbsp;<br>A<br>&nbsp;<br>R<br>E<br>P<br>R<br>E<br>N<br>D<br>R<br>E<br></th>
<th class="" colspan="3" rowspan="1">Encadrant(s)</th>
<th class="" colspan="3" rowspan="1">Information(s) Complémentaire(s)</th>
</tr>
<tr class="">
<td class="zone_nature" colspan="3" rowspan="1"><ul class="list_a_puce">
<li><img src="../images/puce.png" alt="->" width="14" height="14">  <a class="lienSitr" href="?type=0&amp;id=232.0.17156931.CT#lienSitr">IROU-PN 138G : Direction 138G</a></li>
<li><img src="../images/puce.png" alt="->" width="14" height="14">  <a class="lienSitr" href="?type=0&amp;id=220.0.14503575.CT#lienSitr">IROU-PN 084C : Direction 084C</a></li>
</ul>
</td>
<td class="zone_nature" colspan="3" rowspan="1"><span class="size_text_img"><strong class="">Puissance à reprendre : </strong>
585 kW</span><br><br>
<span class="size_text_img"><strong class="">Nombre de clients : </strong>
399</span><br><br>
<span class="size_text_img"><strong class="">Pas de présence producteur. </strong>
</span></td>
</tr>
<tr class="entete">
<th class="" colspan="6" rowspan="1">Plan(s) de reprise possible(s)</th>
</tr>
<tr class="">
<td class="celluce_contenant_table" colspan="6" rowspan="1"><table class="table_bouclage" width="" cellspacing="0">
<tbody><tr class="">
<td class="bouclage" colspan="1" rowspan="2"><strong class=""><a class="lienSitr" href="?type=0&amp;id=232.0.17278911.CT#lienSitr">15MURO</a> (IROU-PN)</strong>
<br>IROU-PN 084C<br>Direction <a class="lienSitr" href="?type=0&amp;id=220.0.14503575.CT#lienSitr">084C</a></td>
<td class="resultat" colspan="1" rowspan="2"><span class="textVert">OK</span></td>
<td class=""><strong class="">Priorité BERE : </strong>
1</td>
<td class=""><strong class="">Imax : </strong>
260 A <br><strong class="">Icalculé : </strong>
76 A</td>
<td class=""><strong class="">PNominaleTransfo : </strong>
36,0 MVA <br><strong class="">PRéelleTransfo : </strong>
8,829 MVA</td>
</tr>
<tr class="">
<td class="" colspan="3" rowspan="1"><ul class="list_a_puce_commentaire">
<li>  Les données renseignées sont insuffisantes pour le V2.</li>
</ul>
</td>
</tr>
</tbody></table>
</td>
</tr>
<tr class="entete">
<th class="" colspan="6" rowspan="1">Plan retenu</th>
</tr>
<tr class="">
<td class="important" colspan="3" rowspan="1"><span class="textVert"><a class="lienSitr" href="?type=0&amp;id=232.0.17278911.CT#lienSitr"><span class="textVert">15MURO</span></a> (IROU-PN) : <a class="lienSitr" href="?type=0&amp;id=220.0.14503575.CT#lienSitr"><span class="textVert">IROU-PN 084C - Direction 084C</span></a></span></td>
<td class="" colspan="3" rowspan="1"><ul class="list_a_puce">
<li><img src="../images/puce.png" alt="->" width="14" height="14">  Priorisation en fonction des contraintes du BERE.</li>
</ul>
</td>
</tr>
<tr class="entete">
<th class="" colspan="6" rowspan="1">Manoeuvre(s) pour la reprise</th>
</tr>
<tr class="sous_entete">
<th class="">Date Heure</th>
<th class="">Poste</th>
<th class="">Tranche</th>
<th class="">Libellé</th>
<th class="">Etat</th>
<th class="">Résultat</th>
</tr>
<tr class="">
<td class="">23/02/2019 23:17:08</td>
<td class="">IROU-PN</td>
<td class="">15MURO</td>
<td class="">MEHS RRL</td>
<td class="">TC HS    </td>
<td class=""><span class="textVert">OK</span></td>
</tr>
<tr class="">
<td class="">23/02/2019 23:17:08</td>
<td class="">IROU-PN</td>
<td class="">15MURO</td>
<td class="">MEHS RRL</td>
<td class="">HS    </td>
<td class=""><span class="textVert">OK</span></td>
</tr>
<tr class="">
<td class="">23/02/2019 23:17:08</td>
<td class="">IROU-PN</td>
<td class="">15MURO</td>
<td class="">MEHS RRL</td>
<td class="">TC HS    </td>
<td class=""><span class="textVert">OK</span></td>
</tr>
<tr class="">
<td class="">23/02/2019 23:17:08</td>
<td class="">IROU-PN</td>
<td class="">15MURO</td>
<td class="">MEHS RRL</td>
<td class="">HS    </td>
<td class=""><span class="textVert">OK</span></td>
</tr>
<tr class="">
<td class="">---</td>
<td class="">IROU-PN</td>
<td class="">084C</td>
<td class="">INTER  1</td>
<td class="">TC FER   </td>
<td class=""><span class="textRouge">KO : ANOMALIE TC</span></td>
</tr>
<tr class="">
<td class="">---</td>
<td class="">IROU-PN</td>
<td class="">084C</td>
<td class="">INTER  1</td>
<td class="">TC FER   </td>
<td class=""><span class="textRouge">KO : ANOMALIE TC</span></td>
</tr>
</tbody></table>    

 

(c'est très moche désolé... :/ )

 

Mon travail consiste à exploiter ces données et à en extraire à l'aide d'une macro vba (nous travaillons uniquement sur excel), les contenus des cases des tableaux dont le texte est en rouge (thermes surlignés en rouge dans le DOM).

Par exemple dans le tableau "Détection du défaut" j'ai seulement besoin d'extraire le "KO : LIAISON OMT" dans une cellule excel.

Je débute dans le langage vba et malgré des heures de lecture de pages d'aides sur internet je n'arrive pas à adapter des fonctions telles que split ou query. Ma première solution était une extraction complète du bilan d'analyse sur une feuille excel puis de retenir le texte de couleur rouge, mais tous les textes sont extraits en noir.

Je ne cherche pas à ce que le travail soit fait à ma place mais plutôt à essayer de comprendre comment je dois aborder le problème. Peut-être qu'en fin de compte je ne dois pas me pencher sur le critère "couleur" mais plutôt sur la chaine de caractère en elle-même lorsqu'elle contient "KO" mais je ne sais pas comment faire sur vba.

 

Merci pour votre aide et votre temps.

Cordialement,

François-Joseph.

 

 

Hors Ligne
Rapport   Haut 

Re: procédure pour récupérer données web
#7
Débutant XLPages

Inscription: 08/09/2018
De Alger

Messages: 12

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 29-03-2019 11h28

Salut, avez vu réussie a trouver une solution ?

 

_________________________________________________

UC Browser SHAREit MX Player

 

Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes