recup donnée internet transfert de question de THAHARDY
Bonjour thahardy
je post la réponse a ta demande sur un nouveau post
et a l'avenir évite de polluer le fil d'une autre discussion
merci de ta compréhension
voila ton code
j'ai modifié la wait IE ,on oublie souvant le "IE.busy"
en effet parfois le readystate nous donne la main mais la page travaille encore
j'ai modifié l'utilisation de l'object IE maintenant en late binding afin d'avoir un fichier transportable et utilisable sur tout ordi avec exel 2003 minimum sans avoir de références a activer
j'ai tronqué aussi l'utilisation de variable object (famille "IE") pas necessaire dans ce cas présent
j'ai mis quelques commentaire qui t'aideront a comprendre le fonctionnement ;)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| Option Explicit
Sub WaitIE(IE As Object)
'On boucle tant que la page n'est pas totalement chargée
Do: DoEvents: Loop While IE.readystate <> 4 Or IE.busy
End Sub
Sub RechercheVBAExcel()
'Déclaration des variables
Dim IE As Object, matable As Object, i As Long, lignes As Object, valeur As String
Set IE = CreateObject("internetexplorer.application")
IE.navigate "www.google.com/finance" 'Chargement d'une page Web Google
IE.Visible = True
'Affichage de la fenêtre IE
WaitIE IE 'On attend le chargement complet de la page
With IE.document
.all("q").Value = "VSAR" 'on inscrit le texte dans le textbox "q"
.all("gbqfb").Click 'On click sur le bouton
WaitIE IE
Set matable = .getelementsbyclassname("snap-data")(0) 'on recupere la table concernée par sa classe ,c'est la 1 ere donc l'index 0 !!!
Set lignes = matable.getelementsbytagname("tr") 'on prent les lignes complete du tableau
For i = 0 To lignes.Length - 1
'on test si la premiere cellule de chaque ligne est ecrit "Mkt cap" si oui la valeur est la 2 eme cellule de la meme ligne
If RTrim(lignes(i).Children(0).innertext) = "Mkt cap" Then valeur = lignes(i).Children(1).innertext
Next
End With
IE.Quit
Set IE = Nothing 'On libère la variable "IE"
MsgBox valeur
End Sub |