Bonsoir,
N'ayant pas bcp de connaissances en HTML,( lecture de code sources), j'en viens a vous pour m'aider à finir mon programme.
En fait, j'un fichier excel avec plusieurs code ISIN dans la colonnes A et je souhaite boucler sur les codes et a aller chercher sur le site de (Bourse de paris, cac 40, nasdaq, warrant avec cotation en direct ) le cours du jours pour chaque valeur et me le mettre dans la colonnes B. Je sais que ce n'est pas évident mais je vous assure que j ai passé pas mal de temps à lire les tutos, notamment celui de Qwazerty mais sans succès.
Ci joint le fichier excel.
Merci par avance
Code:
su récup_cours
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim InputboursoramaZoneTexte As HTMLInputElement
Dim InputboursoramaBouton As HTMLInputElement
'Chargement d'une page Web boursorama
IE.Navigate "www.boursorama.fr"
'Affichage de la fenêtre IE
IE.Visible = True
'On attend le chargement complet de la page
WaitIE IE
'On pointe le membre Document
Set IEDoc = IE.document
'On pointe notre Zone de texte
Set InputboursoramaZoneTexte = IEDoc.all("q")
derligne = Range("A" & Rows.Count).End(xlUp).Row
z = 2
For z = 2 To derligne
'On définit le texte que l'on souhaite placer à l'intérieur
InputGoogleZoneTexte.Value = range("A" & z).value
'On attend la fin de la recherche
WaitIE IE
Next
'le probleme est que je sais pas comment faire pour récupérer le cours de la valeur .
'On libère les variables
Set IE = Nothing
Set IEDoc = Nothing
Bonjour,
la moindre des choses lorsque l'on livre un code est de le livrer au complet.
Là ce n'est pas le cas :
- ton code n'est pas délimité par Sub...End Sub
- la fonction Wait IE manque à l'appel : si c'est pour l'appeler 2 fois, autant inclure dans ton code directement
Code:
Do Until IE.readyState = READYSTATE_COMPLETE
DoEvents
Loop
, mais sinon il la faut
- tes variables ne sont pas déclarées
- les bibliothèques Microsoft Internet Control et Micrososft HTML object library ne sont pas cochées,
bref, ton fichier est inopérant.
Commence donc par livrer un fichier fonctionnel.
Ensuite, il te faut décrire plus précisément ton attente (le but n'étant pas de faire à ta place mais de t'aider à faire) :
- où sont placées les données que tu veux extraire ?
- quels codes as-tu testé ?
- à quel stade tu bloques ?
Enfin, pour une meilleure compréhension, le plus simple est de noter manuellement sur ton fichier exemple les résultats attendus.
A+
Bonsoir david84, le forum
Pour répondre a ta question, j'ai passé la soirée à chercher et finalement j'ai réussi à faire un code qui marche sauf que j'ai un message d'erreur " Permission refusée" au moment de boucler sur le deuxieme code ISIN.
Ci joint le fichier avec le code VBA et les commentaires.
Merci de votre aide.
Bonjour,
concernant le code, j'ai modifié un peu ton code. Celui proposé ci-dessous fonctionne en mode pas à pas mais effectivement, lorsque je le lance, une erreur d’exécution '70' "Permission refusée" est déclenchée :
Code:
Sub récup_cours()
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim InputboursoramaZoneTexte As HTMLInputElement
Dim FormboursoramaCherche As DispHTMLElementCollection
Dim htmlProfil As HTMLGenericElement
'Chargement d'une page Web boursorama
IE.Navigate "http://www.boursorama.com/bourse/"
'On attend le chargement complet de la page
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE And Not IE.Busy
'Affichage de la fenêtre IE
IE.Visible = True
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE And Not IE.Busy
derligne = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
Z = 2
For Z = 2 To derligne
'On pointe le membre Document
Set IEDoc = IE.document
'On pointe notre Zone de texte
Set InputboursoramaZoneTexte = IEDoc.all("q")
'On définit le texte que l'on souhaite placer à l'intérieur
InputboursoramaZoneTexte.Value = Range("A" & Z).Value
Set FormboursoramaCherche = IEDoc.getElementById("search-spinner-submit")
FormboursoramaCherche.Click
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE And Not IE.Busy
'On va chercher un des éléments ayant un id
Set htmlProfil = IEDoc.getElementById("content-gauche")
'Ensuite à partir de la on va chercher l'info dont on a besoin
Sheets("Feuil1").Range("B" & Z) = htmlProfil.all(2).innerText
Next
IE.Quit
'On libère les variables
Set IE = Nothing
Set IEDoc = Nothing
End Sub
Concernant cette erreur, elle peut être due à différentes causes, dont celle notamment des droits d'accès.
Tu peux regarder cet article
Personnellement je n'ai pas envie de trifouiller dans ma base de registre donc je te laisse tester les différentes solutions proposées.
En espérant que cela puisse t'aider à avancer de ton côté.
A+
Bonjour,
Merci beaucoup david.
Avant de résoudre le probleme de la permission d'accès. la valeur récupérée par le code IEDoc.getElementById("content-gauche") ne correspond pas vraiement a ce que je veux, moi je veux plutot récupérer le cours situé dans le " span class="cotation"
je n'arrive pas a le cibler
Merci encore
Bonjour,
J'ai résussi a faire fonctionner le code en mode auto, en quittant internet explorer juste avant la deuxieme boucle et le réouvrir après. ce n'est peut etre pas la meilleur solution(trop long)mais en attendant je vais faire comme ca.
Par contre la donnée récupérée ne me convient pas, en effet, moi je veux plutot récupérer le cours situé dans le " span class="cotation"
je n'arrive pas a le cibler
Merci encore
Par contre la donnée récupérée ne me convient pas, en effet, moi je veux plutot récupérer le cours situé dans le " span class="cotation"
je n'arrive pas a le cibler
Pour cela, il te faut descendre dans l'arborescence du document et modifier le type de certaines variables :
Code:
Dim htmlProfil As HTMLGenericElement
Dim Element As IHTMLElementCollection
Dim Cotation As HTMLSpanElement
Tu remarques que Element est maintenant déclaré en IHTMLElementCollection et qu'une nouvelle variable Cotation a été créée et déclarée en HTMLSpanElement.
Ensuite tu inclues cette partie :
Code:
Set htmlProfil = IEDoc.getElementById("content-gauche") 'on cible l'id content-gauche
Set Element = htmlProfil.getElementsByTagName("span") 'on cible les span de l'id
Set Cotation = Element.Item(1) 'on cible l'item 2 contenant la cotation
If Not Cotation Is Nothing Then _ 'si l'objet cotation est initialisé
Sheets("Feuil1").Range("B" & Z) = Cotation.innerText 'on ramène la cotation
Ce qui donne :
Code:
Sub récup_cours()
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim InputboursoramaZoneTexte As HTMLInputElement
Dim FormboursoramaCherche As DispHTMLElementCollection
Dim htmlProfil As HTMLGenericElement
Dim Element As IHTMLElementCollection
Dim Cotation As HTMLSpanElement
'Chargement d'une page Web boursorama
IE.Navigate "http://www.boursorama.com/bourse/"
'On attend le chargement complet de la page
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE And Not IE.Busy
'Affichage de la fenêtre IE
IE.Visible = True
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE And Not IE.Busy
derligne = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
Z = 2
For Z = 2 To derligne
'On pointe le membre Document
Set IEDoc = IE.document
'On pointe notre Zone de texte
Set InputboursoramaZoneTexte = IEDoc.all("q")
'On définit le texte que l'on souhaite placer à l'intérieur
InputboursoramaZoneTexte.Value = Range("A" & Z).Value
Set FormboursoramaCherche = IEDoc.getElementById("search-spinner-submit")
FormboursoramaCherche.Click
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE And Not IE.Busy
'On va chercher un des éléments ayant un id
Set htmlProfil = IEDoc.getElementById("content-gauche")
Set Element = htmlProfil.getElementsByTagName("span")
Set Cotation = Element.Item(1)
If Not Cotation Is Nothing Then _
Sheets("Feuil1").Range("B" & Z) = Cotation.innerText
Next
IE.Quit
'On libère les variables
Set IE = Nothing
Set IEDoc = Nothing
End Sub
Puisque tu as différents temps de temporisation, tu peux utiliser la fonction IE au lieu de multiplier ces temporisations à l'intérieur du code si tu préfères.
A+
Bonjour,
Merci infiniment david pour ton aide. Je vais clore les deux discussions.
désolé Pierrot93, je ne viens pas uniquement pomper des infos sur les forums, j'essai aussi de contribuer avec le peu que je sais.
Cdt
j'ai pas dit ca.... Mais préférable de prévenir lorsque l'on poste sur plusieurs forums.... Inutile que l'on cherche si la réponse est déjà donnée par ailleurs...
Re,
Ok ca marche .
en faite, c'était suffisament compliqué c'est pour ca que j'ai tente ma chance sur les deux forums, les gens qui conaissent a la fois vba et html y en a pas des tonnes ! ah pas vrai david
je n'ai pas eu de réponse satisfaisante , hormis celle de david, c'est pour ca que je n'ai rien dis .
Mainentant je le sais.
Bien a vous
Bonsoir, salut Pierrot,
je souscris à l'avis de Pierrot : pas de problème si tu postes la même demande sur plusieurs sites mais préviens-nous (et préviens-les).
Je note d'ailleurs que mes interrogations concernant les droits d'accès ont été également relevés sur l'autre site.
Tant mieux pour toi si tu as pu recevoir l'aide escomptée.
Lorsque tu clôtureras ta discussion sur developpez.net, merci de placer un lien vers cette page afin de permettre à d'autre de bénéficier des réponses apportées sur ExcelDownloads.
A+
Edit : je connais très peu le HTML, le javascript et le CSS (je m'y suis mis tranquillement début décembre dans le simple but de comprendre la syntaxe javascript et l'architecture des pages Web car je pense qu'il y a des domaines intéressants à exploiter avec Excel), donc même si cela aide, il est possible d'utiliser les propriétés et méthodes des bibliothèques Microsoft Internet Control et Micrososft HTML object library sans s'être familiarisé à ces langages.