récup cours de bourses en auto VBA

agadiroufla

XLDnaute Junior
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
 

Pièces jointes

  • cours boursorama.xls
    16.5 KB · Affichages: 157
  • cours boursorama.xls
    16.5 KB · Affichages: 153
  • cours boursorama.xls
    16.5 KB · Affichages: 160

david84

XLDnaute Barbatruc
Re : récup cours de bourses en auto VBA

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+
 

agadiroufla

XLDnaute Junior
Re : récup cours de bourses en auto VBA

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.
 

Pièces jointes

  • cours boursorama.xls
    36.5 KB · Affichages: 191
  • cours boursorama.xls
    36.5 KB · Affichages: 297
  • cours boursorama.xls
    36.5 KB · Affichages: 330

david84

XLDnaute Barbatruc
Re : récup cours de bourses en auto VBA

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+
 

agadiroufla

XLDnaute Junior
Re : récup cours de bourses en auto VBA

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
 

agadiroufla

XLDnaute Junior
Re : récup cours de bourses en auto VBA

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
 

david84

XLDnaute Barbatruc
Re : récup cours de bourses en auto VBA

Re
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+
 

Pierrot93

XLDnaute Barbatruc
Re : récup cours de bourses en auto VBA

Re,

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.
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...
 

agadiroufla

XLDnaute Junior
Re : récup cours de bourses en auto VBA

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
 

david84

XLDnaute Barbatruc
Re : récup cours de bourses en auto VBA

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.
 

Discussions similaires

Réponses
8
Affichages
595

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 942
Membres
101 849
dernier inscrit
florentMIG