Web Scraping VBA

Y compris Power BI, Power Query et toute autre question en lien avec Excel
f
flobble
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 22 janvier 2015
Version d'Excel : 2010 FR

Message par flobble » 23 janvier 2015, 10:51

Bonjour à tous.
Je souhaiterais créer un outil de web scraping en utilisant VBA.
J'ai déjà commencé à ébaucher quelque chose avec mes piètres connaissances mais je bloque sur l'extraction InnerHTML du texte désiré.
Pouvez-vous me dire comment arriver à sélectionner le texte désiré?


EDIT : j'ai réussi à me débloquer, je fais un point au prochain post. Merci en tous cas !
Modifié en dernier par flobble le 23 janvier 2015, 12:50, modifié 1 fois.
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'169
Appréciations reçues : 376
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 23 janvier 2015, 12:26

Bonjour,

tu me sembles bien parti. Qu'est-ce qui te pose problème ?
f
flobble
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 22 janvier 2015
Version d'Excel : 2010 FR

Message par flobble » 23 janvier 2015, 17:20

En fait je n'arrive pas à sélectionner mon texte (les %) comme il faut. Je ne trouve pas la formule qui vaille car il ne s'agit pas du même nombre ou du même caractère à chaque fois.

En gros mon innerHTML est
<td class="center n">3</td>
			<td class="center matchs_av">Guingamp</td>
			<td class="center matchs_av">Lorient</td><td class="matchs_av"><table><tbody><tr><td width="68"><span class="pourcent_vert">56,9 %</span></td><td width="55"></td></tr></tbody></table></td><td class="matchs_av"><table><tbody><tr><td width="31"><span class="pourcent_jaune"></span></td><td width="92"><span class="chiffre_ok">26,3 %</span></td></tr></tbody></table></td><td class="matchs_av"><table><tbody><tr><td width="20"><span class="pourcent_rouge"></span></td><td width="103"><span class="chiffre_ok">16,9 %</span></td></tr></tbody></table></td></tr><tr>
Et à partir de là je voudrais récupérer trois données:
56,9 %
26,3 %
16,9 %
Pour info j'ai déjà réussi à prendre :
Guingamp
Lorient
Comme le montre le code suivant :
the_html_toParse = Mid(the_html_toParse, InStr(the_html_toParse, "center matchs_av") + 18, Len(the_html_toParse))
team_1_3 = Mid(the_html_toParse, 1, InStr(the_html_toParse, "</td>") - 1)
the_html_toParse = Mid(the_html_toParse, InStr(the_html_toParse, "center matchs_av") + 18, Len(the_html_toParse))
team_2_3 = Mid(the_html_toParse, 1, InStr(the_html_toParse, "</td>") - 1)
Comment faire pour que je puisse extraire mes trois pourcentages?
Merci pour vos conseils
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'169
Appréciations reçues : 376
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 23 janvier 2015, 17:55

bonjour,

voici une proposition de code pour l'extrait html que tu as donné.

la variable tp correspond à ton "the_html_toParse"


    ' se positionner sur le bon numéro de centre

    nc = 3    'numéro de centre à chercher
    While nct <> nc ' tant qu'on n'est pas sur le bon numéro de centre
        s1 = InStr(tp, "center n") ' on recherche la chaine centre n
        If s1 > 0 Then 'si on la trouve
            s1 = s1 + 10 's1 début du numéro de centre
            nct = Mid(tp, s1, InStr(tp, "<")) + 0 ' nct = numéro de centre trouvé
            tp = Mid(tp, s1 + 11) ' on ajuste la chaine dans laquelle on recherche
        Else
            MsgBox "centre n " & nc & " non trouvé": Exit Sub
        End If
    Wend
    ' on a trouvé le numéro de centre qui nous intéresse
    ' on démarre la recherche des pourcentages
    For Each Tag In Array("pourcent_vert", "pourcent_rouge", "pourcent_jaune") ' 3 pourcentages à chercher
        s1 = InStr(tp, Tag) ' on se positionne sur le pourcentage désiré
        If s1 > 0 Then
            s1 = s1 + Len(Tag) + 2 'on ajuste la position de recherche du pourcentage
            s2 = InStr(s1, tp, "%</") - 1 ' on recherche la suite de caractères %</
            v = Mid(tp, s2 - 4, 4) ' v= pourcentage recherché
            MsgBox Tag & ":" & v ' affichage du pourcentage recherché
        Else
            MsgBox "tag " & Tag & " non trouvé"
        End If
    Next
Modifié en dernier par h2so4 le 23 janvier 2015, 22:35, modifié 1 fois.
f
flobble
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 22 janvier 2015
Version d'Excel : 2010 FR

Message par flobble » 23 janvier 2015, 21:22

Merci pour ton intervention h2.
Malheureusement je n'ai pas accès à mon PC (excel windows) avant lundi du coup je ne pourrais pas tester.
Je te tiens informé la semaine prochaine.
Merci à toi !
f
flobble
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 22 janvier 2015
Version d'Excel : 2010 FR

Message par flobble » 26 janvier 2015, 10:37

J'ai regardé ton code mais ça ne fonctionne pas. Je dois omettre un paramètre ; j'ai une erreur '13' (incompatibilité de type) sur la ligne suivante
  nct = Mid(tp, s1, InStr(tp, "<")) + 0 ' nct = numéro de centre trouvé
Bref, plus généralement, ton code est intéressant sur la recherche du "center n".
Car c'est ce qui numérote les matchs (14 matchs en général). Mais parfois il y a aussi 15 matchs. Du coup je pensais à un loop pour chercher les 14 ou 15 matchs.

Voici le code d'une des pages :
http://www.pronosoft.com/fr/concours/repartition_lotofoot.php?id15=841
	</tr><tr>
			<td class="center n">1</td>
			<td class="center matchs_av">Bastia</td>
			<td class="center matchs_av">Bordeaux</td><td class="matchs_av"><table><tr><td width="47.594158339739"><span class="pourcent_gris"></span></td><td width="76.405841660261"><span class="chiffre_ko">39,7 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="41.820138355111"><span class="pourcent_jaune"></span></td><td width="82.179861644889"><span class="chiffre_ok">34,9 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="30.58570330515"><span class="pourcent_gris"></span></td><td width="93.41429669485"><span class="chiffre_ko">25,5 %</span></td></tr></table></td></tr><tr>
			<td class="center n">2</td>
			<td class="center matchs_av">Evian Thonon</td>
			<td class="center matchs_av">Toulouse</td><td class="matchs_av"><table><tr><td width="49.453162149311"><span class="pourcent_vert"></span></td><td width="74.546837850689"><span class="chiffre_ok">41,2 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="36.557299096529"><span class="pourcent_gris"></span></td><td width="87.442700903471"><span class="chiffre_ko">30,5 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="33.989538754161"><span class="pourcent_gris"></span></td><td width="90.010461245839"><span class="chiffre_ko">28,3 %</span></td></tr></table></td></tr><tr>
			<td class="center n">3</td>
			<td class="center matchs_av">Guingamp</td>
			<td class="center matchs_av">Lorient</td><td class="matchs_av"><table><tr><td width="68.51871947911"><span class="pourcent_vert">57,1 %</span></td><td width="55.48128052089"></td></tr></table></td><td class="matchs_av"><table><tr><td width="31.492132392838"><span class="pourcent_gris"></span></td><td width="92.507867607162"><span class="chiffre_ko">26,2 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="19.989148128052"><span class="pourcent_gris"></span></td><td width="104.01085187195"><span class="chiffre_ko">16,7 %</span></td></tr></table></td></tr><tr>
			<td class="center n">4</td>
			<td class="center matchs_av">Montpellier</td>
			<td class="center matchs_av">Nantes</td><td class="matchs_av"><table><tr><td width="59.013482407103"><span class="pourcent_vert"></span></td><td width="64.986517592897"><span class="chiffre_ok">49,2 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="38.197961196975"><span class="pourcent_gris"></span></td><td width="85.802038803025"><span class="chiffre_ko">31,8 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="22.788556395922"><span class="pourcent_gris"></span></td><td width="101.21144360408"><span class="chiffre_ko">19,0 %</span></td></tr></table></td></tr><tr>
			<td class="center n">5</td>
			<td class="center matchs_av">Real Sociedad</td>
			<td class="center matchs_av">Eibar</td><td class="matchs_av"><table><tr><td width="75.523661753297"><span class="pourcent_vert">62,9 %</span></td><td width="48.476338246703"></td></tr></table></td><td class="matchs_av"><table><tr><td width="25.438324282389"><span class="pourcent_gris"></span></td><td width="98.561675717611"><span class="chiffre_ko">21,2 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="19.038013964313"><span class="pourcent_gris"></span></td><td width="104.96198603569"><span class="chiffre_ko">15,9 %</span></td></tr></table></td></tr><tr>
			<td class="center n">6</td>
			<td class="center matchs_av">Villarreal</td>
			<td class="center matchs_av">Levante</td><td class="matchs_av"><table><tr><td width="100.10318949343"><span class="pourcent_vert">83,4 %</span></td><td width="23.896810506567"></td></tr></table></td><td class="matchs_av"><table><tr><td width="12.382739212008"><span class="pourcent_gris"></span></td><td width="111.61726078799"><span class="chiffre_ko">10,3 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="7.5140712945591"><span class="pourcent_gris"></span></td><td width="116.48592870544"><span class="chiffre_ko">6,26 %</span></td></tr></table></td></tr><tr>
			<td class="center n">7</td>
			<td class="center matchs_av">Lazio Rome</td>
			<td class="center matchs_av">Milan AC</td><td class="matchs_av"><table><tr><td width="48.46849207389"><span class="pourcent_vert"></span></td><td width="75.53150792611"><span class="chiffre_ok">40,4 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="40.387789859819"><span class="pourcent_gris"></span></td><td width="83.612210140181"><span class="chiffre_ko">33,7 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="31.143718066291"><span class="pourcent_gris"></span></td><td width="92.856281933709"><span class="chiffre_ko">26,0 %</span></td></tr></table></td></tr><tr>
			<td class="center n">8</td>
			<td class="center matchs_av">Lyon</td>
			<td class="center matchs_av">Metz</td><td class="matchs_av"><table><tr><td width="104.90602409639"><span class="pourcent_vert">87,4 %</span></td><td width="19.093975903614"></td></tr></table></td><td class="matchs_av"><table><tr><td width="10.149397590361"><span class="pourcent_gris"></span></td><td width="113.85060240964"><span class="chiffre_ko">8,46 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="4.944578313253"><span class="pourcent_gris"></span></td><td width="119.05542168675"><span class="chiffre_ko">4,12 %</span></td></tr></table></td></tr><tr>
			<td class="center n">9</td>
			<td class="center matchs_av">Rennes</td>
			<td class="center matchs_av">Caen</td><td class="matchs_av"><table><tr><td width="72.514925373134"><span class="pourcent_gris">60,4 %</span></td><td width="51.485074626866"></td></tr></table></td><td class="matchs_av"><table><tr><td width="28.388059701493"><span class="pourcent_gris"></span></td><td width="95.611940298507"><span class="chiffre_ko">23,7 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="19.097014925373"><span class="pourcent_rouge"></span></td><td width="104.90298507463"><span class="chiffre_ok">15,9 %</span></td></tr></table></td></tr><tr>
			<td class="center n">10</td>
			<td class="center matchs_av">Reims</td>
			<td class="center matchs_av">Lens</td><td class="matchs_av"><table><tr><td width="57.797150041911"><span class="pourcent_gris"></span></td><td width="66.202849958089"><span class="chiffre_ko">48,2 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="35.346186085499"><span class="pourcent_jaune"></span></td><td width="88.653813914501"><span class="chiffre_ok">29,5 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="26.85666387259"><span class="pourcent_gris"></span></td><td width="97.14333612741"><span class="chiffre_ko">22,4 %</span></td></tr></table></td></tr><tr>
			<td class="center n">11</td>
			<td class="center matchs_av">Sampdoria</td>
			<td class="center matchs_av">Palerme</td><td class="matchs_av"><table><tr><td width="72.996555683123"><span class="pourcent_gris">60,8 %</span></td><td width="51.003444316877"></td></tr></table></td><td class="matchs_av"><table><tr><td width="27.485648679679"><span class="pourcent_jaune"></span></td><td width="96.514351320321"><span class="chiffre_ok">22,9 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="19.517795637199"><span class="pourcent_gris"></span></td><td width="104.4822043628"><span class="chiffre_ko">16,3 %</span></td></tr></table></td></tr><tr>
			<td class="center n">12</td>
			<td class="center matchs_av">Fiorentina</td>
			<td class="center matchs_av">AS Rome</td><td class="matchs_av"><table><tr><td width="33.050193050193"><span class="pourcent_gris"></span></td><td width="90.949806949807"><span class="chiffre_ko">27,5 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="39.907335907336"><span class="pourcent_jaune"></span></td><td width="84.092664092664"><span class="chiffre_ok">33,3 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="47.042471042471"><span class="pourcent_gris"></span></td><td width="76.957528957529"><span class="chiffre_ko">39,2 %</span></td></tr></table></td></tr><tr>
			<td class="center n">13</td>
			<td class="center matchs_av">AthleticBilbao</td>
			<td class="center matchs_av">Malaga</td><td class="matchs_av"><table><tr><td width="55.482502651113"><span class="pourcent_gris"></span></td><td width="68.517497348887"><span class="chiffre_ko">46,2 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="36.43690349947"><span class="pourcent_jaune"></span></td><td width="87.56309650053"><span class="chiffre_ok">30,4 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="28.080593849417"><span class="pourcent_gris"></span></td><td width="95.919406150583"><span class="chiffre_ko">23,4 %</span></td></tr></table></td></tr><tr>
			<td class="center n">14</td>
			<td class="center matchs_av">FC Valence</td>
			<td class="center matchs_av">FC Séville</td><td class="matchs_av"><table><tr><td width="60.963172804533"><span class="pourcent_vert">50,8 %</span></td><td width="63.036827195467"></td></tr></table></td><td class="matchs_av"><table><tr><td width="32.785646836638"><span class="pourcent_gris"></span></td><td width="91.214353163362"><span class="chiffre_ko">27,3 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="26.251180358829"><span class="pourcent_gris"></span></td><td width="97.748819641171"><span class="chiffre_ko">21,9 %</span></td></tr></table></td></tr><tr>
			<td class="center n">15</td>
			<td class="center matchs_av">St Etienne</td>
			<td class="center matchs_av">Paris SG</td><td class="matchs_av"><table><tr><td width="28.034822320537"><span class="pourcent_gris"></span></td><td width="95.965177679463"><span class="chiffre_ko">23,4 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="38.173255316112"><span class="pourcent_gris"></span></td><td width="85.826744683888"><span class="chiffre_ko">31,8 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="53.791922363351"><span class="pourcent_vert"></span></td><td width="70.208077636649"><span class="chiffre_ok">44,8 %</span></td></tr></table></td></tr><tr><td class="total" colspan="6"></td></tr><tr><td colspan="3" class="center"><span class="title_maj bold">Total&nbsp;:</span></td><td class="matchs_av"><table><tr><td width="62.294680781121"><span class="pourcent_vert">51,9 %</span></td><td width="61.705319218879"></td></tr></table></td><td class="matchs_av"><table><tr><td width="31.66325453415"><span class="pourcent_jaune"></span></td><td width="92.33674546585"><span class="chiffre_ok">26,4 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="26.042064684729"><span class="pourcent_rouge"></span></td><td width="97.957935315271"><span class="chiffre_ok">21,7 %</span></td></tr></table></td></tr></table></div>
f
flobble
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 22 janvier 2015
Version d'Excel : 2010 FR

Message par flobble » 26 janvier 2015, 11:01

J'ai réussi à trouvé la bonne formule pour prendre la partie de texte qui m'intéresse
'GAME_1

'extract équipes du match_1
the_html_toParse = Mid(the_html_toParse, InStr(the_html_toParse, "center matchs_av") + 18, Len(the_html_toParse))
team_1_1 = Mid(the_html_toParse, 1, InStr(the_html_toParse, "</td>") - 1)
the_html_toParse = Mid(the_html_toParse, InStr(the_html_toParse, "center matchs_av") + 18, Len(the_html_toParse))
team_2_1 = Mid(the_html_toParse, 1, InStr(the_html_toParse, "</td>") - 1)

'extract répartition du match_1
the_html_toParse = Mid(the_html_toParse, InStr(the_html_toParse, "%</span>") - 5, Len(the_html_toParse))
percent_1_1 = Mid(the_html_toParse, 1, 6)
the_html_toParse = Mid(the_html_toParse, InStr(the_html_toParse, "%</span>") - 5, Len(the_html_toParse))
percent_N_1 = Mid(the_html_toParse, 1, 6)
the_html_toParse = Mid(the_html_toParse, InStr(the_html_toParse, "%</span>") - 5, Len(the_html_toParse))
percent_2_1 = Mid(the_html_toParse, 1, 6)

'affichage des équipes du match_1
UserForm1.TextBox2.Text = team_1_1
UserForm1.TextBox3.Text = team_2_1

'affichage répartition du match_1
UserForm1.TextBox4.Text = percent_1_1
UserForm1.TextBox5.Text = percent_N_1
UserForm1.TextBox6.Text = percent_2_1
Cependant j'obtiens toujours le premier pourcentage (69%) à partir de
<td class="center n">1</td>
			<td class="center matchs_av">Chelsea</td>
			<td class="center matchs_av">Liverpool</td><td class="matchs_av"><table><tr><td width="82.787652011225"><span class="pourcent_vert">69,0 %</span></td><td width="41.212347988775"></td></tr></table></td><td class="matchs_av"><table><tr><td width="23.124415341441"><span class="pourcent_jaune"></span></td><td width="100.87558465856"><span class="chiffre_ok">19,3 %</span></td></tr></table></td><td class="matchs_av"><table><tr><td width="14.087932647334"><span class="pourcent_rouge"></span></td><td width="109.91206735267"><span class="chiffre_ok">11,7 %</span></td></tr></table></td></tr><tr>
Comment faire pour obtenir les % suivants?
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'169
Appréciations reçues : 376
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 28 janvier 2015, 16:01

Bonjour,

une version corrigée :à tester
Sub test()
    Dim données(15, 5)

the_start:
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Top = 0
    objIE.Left = 0
    objIE.Width = 800
    objIE.Height = 600
    objIE.Visible = False
    grid_number = 841   'pour le test
    objIE.Navigate ("http://www.pronosoft.com/fr/concours/repartition_lotofoot.php?id15=" & grid_number)

    'WebBrowser1.Navigate ("http://www.pronosoft.com/fr/concours/repartition_lotofoot.php?id15=" & grid_number)

    Do
        DoEvents
        If Err.Number <> 0 Then
            objIE.Quit
            Set objIE = Nothing
            GoTo the_start:
        End If


    Loop Until objIE.ReadyState = 4

    the_html_toparse = objIE.Document.Body.InnerHTML

    ' se positionner sur le bon numéro de centre
    nct = 0
    For nc = 1 To 15  'numéro de centre à chercher
        While nct <> nc    ' tant qu'on n'est pas sur le bon numéro de centre
            s1 = InStr(the_html_toparse, "center n")    ' on recherche la chaine centre n
            If s1 > 0 Then    'si on la trouve
                s1 = s1 + 10    's1 début du numéro de centre
                nct = Val(Mid(the_html_toparse, s1, InStr(the_html_toparse, "<") - 1)) ' nct = numéro de centre trouvé
                the_html_toparse = Mid(the_html_toparse, s1 + 11)    ' on ajuste la chaine dans laquelle on recherche
            Else
                MsgBox "centre n " & nc & " non trouvé": Exit Sub
            End If
        Wend
        ' on démarre la recherche des équipes
        s1 = InStr(the_html_toparse, "center matchs_av")
        If s1 > 0 Then
            cd = 1
            données(nc, cd) = Mid(the_html_toparse, s1 + 18, InStr(the_html_toparse, "</td>") - s1 - 18)
            the_html_toparse = Mid(the_html_toparse, s1 + 18)
            s1 = InStr(the_html_toparse, "center matchs_av")
            If s1 > 0 Then
                cd = cd + 1
                données(nc, cd) = Mid(the_html_toparse, s1 + 18, InStr(s1 + 18, the_html_toparse, "</td>") - s1 - 18)

                ' on a trouvé le numéro de centre qui nous intéresse
                ' on démarre la recherche des pourcentages
                For Each Tag In Array("pourcent_vert", "pourcent_rouge", "pourcent_jaune")    ' 3 pourcentages à chercher
                    s1 = InStr(the_html_toparse, Tag)    ' on se positionne sur le pourcentage désiré
                    If s1 > 0 Then
                        s1 = s1 + Len(Tag) + 2    'on ajuste la position de recherche du pourcentage
                        s2 = InStr(s1, the_html_toparse, "%</") - 1    ' on recherche la suite de caractères %</
                        cd = cd + 1
                        données(nc, cd) = Mid(the_html_toparse, s2 - 4, 4)   ' v= pourcentage recherché
                    Else
                        MsgBox "tag " & Tag & " non trouvé"
                    End If
                Next
            Else
                'MsgBox "équipe 2 non trouvée"
            End If
        Else
            'MsgBox "équipe 1 non trouvée"
        End If
    Next nc
    For i = 1 To 15
        For j = 1 To 5
            UserForm1("textbox" & (i - 1) * 15 + j) = données(i, j) ' on charge les textboxes avec les données trouvées.
        Next j
    Next i
End Sub
f
flobble
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 22 janvier 2015
Version d'Excel : 2010 FR

Message par flobble » 28 janvier 2015, 16:24

salut h2, merci pour ton intervention.
j'ai run ton code, mais j'ai un bug sur la dernière ligne
UserForm1("TextBox1" & (i - 1) * 15 + j) = données(i, j) 
je ne sais pas quoi faire
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'169
Appréciations reçues : 376
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 28 janvier 2015, 17:16

flobble a écrit :salut h2, merci pour ton intervention.
j'ai run ton code, mais j'ai un bug sur la dernière ligne
UserForm1("TextBox1" & (i - 1) * 15 + j) = données(i, j) 
je ne sais pas quoi faire
Bonsoir,

quelques bugs qui restaient sur la mise à jour de tes textboxes par ma macro précédente.

voici la version corrigée + implémentée en pj.
Function GoToGrid_ByGridNumber(grid_number As String)

    GoToGrid_ByGridNumber = ""
 Dim données(15, 5)
    If grid_number = "" Then Exit Function


    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Top = 0
    objIE.Left = 0
    objIE.Width = 800
    objIE.Height = 600
    objIE.Visible = False

    objIE.Navigate ("http://www.pronosoft.com/fr/concours/repartition_lotofoot.php?id15=" & grid_number)

   

the_start:
    Do
        DoEvents
        If Err.Number <> 0 Then
            objIE.Quit
            Set objIE = Nothing
            GoTo the_start:
        End If


    Loop Until objIE.ReadyState = 4

    the_html_toparse = objIE.Document.Body.InnerHTML

    ' se positionner sur le bon numéro de centre
    nct = 0
    For nc = 1 To 15  'numéro de centre à chercher
        While nct <> nc    ' tant qu'on n'est pas sur le bon numéro de centre
            s1 = InStr(the_html_toparse, "center n")    ' on recherche la chaine centre n
            If s1 > 0 Then    'si on la trouve
                s1 = s1 + 10    's1 début du numéro de centre
                nct = Val(Mid(the_html_toparse, s1, InStr(the_html_toparse, "<") - 1)) ' nct = numéro de centre trouvé
                the_html_toparse = Mid(the_html_toparse, s1 + 11)    ' on ajuste la chaine dans laquelle on recherche
            Else
                MsgBox "centre n " & nc & " non trouvé": Exit Function
            End If
        Wend
        ' on démarre la recherche des équipes
        s1 = InStr(the_html_toparse, "center matchs_av")
        If s1 > 0 Then
            cd = 1
            données(nc, cd) = Mid(the_html_toparse, s1 + 18, InStr(the_html_toparse, "</td>") - s1 - 18)
            the_html_toparse = Mid(the_html_toparse, s1 + 18)
            s1 = InStr(the_html_toparse, "center matchs_av")
            If s1 > 0 Then
                cd = cd + 1
                données(nc, cd) = Mid(the_html_toparse, s1 + 18, InStr(s1 + 18, the_html_toparse, "</td>") - s1 - 18)

                ' on a trouvé le numéro de centre qui nous intéresse
                ' on démarre la recherche des pourcentages
                For Each Tag In Array("pourcent_vert", "pourcent_rouge", "pourcent_jaune")    ' 3 pourcentages à chercher
                    s1 = InStr(the_html_toparse, Tag)    ' on se positionne sur le pourcentage désiré
                    If s1 > 0 Then
                        s1 = s1 + Len(Tag) + 2    'on ajuste la position de recherche du pourcentage
                        s2 = InStr(s1, the_html_toparse, "%</") - 1    ' on recherche la suite de caractères %</
                        cd = cd + 1
                        données(nc, cd) = Mid(the_html_toparse, s2 - 4, 4)   ' v= pourcentage recherché
                    Else
                        MsgBox "tag " & Tag & " non trouvé": Exit Function
                    End If
                Next
            Else
                'MsgBox "équipe 2 non trouvée"
            End If
        Else
            'MsgBox "équipe 1 non trouvée"
        End If
    Next nc
    For i = 1 To 15
        For j = 1 To 5
            UserForm1("textbox" & (i - 1) * 5 + j + 1) = données(i, j)
        Next j
    Next i
End Function
Web Scraper TESTv2.xlsm
(29.72 Kio) Téléchargé 38 fois
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message