Récupération des cours de bourse sur Boursorama ne fonctionne plus

Bonjour a tous

(Nouveau membre et première intervention)

Depuis quelques jours la procédure « d’aspiration » du contenu d’une page du site Bousorama ne fonctionne plus .

Cette procédure semble être des plus classiques copier dans ce même forum me permet de récupérer en automatique les cours des actions et indices et les valeurs liquidative des fonds afin d’apporter a mon logiciel les données indispensables pour la gestion de mon portefeuille avec calcul des indicateurs boursiers (rendement(s)(journalier ,annuel,….moyenne s mobiles glissantes 20,50'100,ratio de sharpe, beta, ecartype, corrélation…) et les différentes courbes, d’évolution des différents produits et de leurs comparaison …Enfin je suis dans la ……

Le problème que j’ai identifié semble se situer dans les instructions suivantes (extrait de la procédure)

With CreateObject("MSXML2.XMLHTTP")

.Open "GET", URL, False

.Send

Etat = .Status ‘modification

If .Status = 200 Then COT(i, 1) = Split(Split(.responseText, avant)(1), apres)(0)

End With

………..

Cells(i, [Cotation].Column).Value = COT(i, 1)

Cells(i, ([Cotation].Column) + 1).Value = Etat ‘modification

........

Sur les « URL » Boursorama le statut n’est plus de 200 mais 12031 et (.reponseText =" " )

J’ai appliqué cette procédure a 3 pages de 3 sites différents et là surprise! , status = 200 sur 1 site, 12031 et 12029 sur les 2 autres

J’ai fait tester chez 3 amis (PC differents, OS différents, version excel différentes) mêmes resultats

Quelques recherches sur internet (je n’ai pas trouver grand-chose) semblent expliquer qu’il s’agirait d’une rupture du dialogue……rupture du a quoi ?

Je ne comprends pas ce qui se passe , j'ai besoin d'aide et en parcourant ce forum j'ai pu m'apercevoir qu'il y avait des experts très compétant qui m'ont permis d'apprendre (un peu) le "VBA" (un peu) et d'écrire mon logiciel, je profite de l'occasion pour les remercier et encore une fois je compte sur eux pour (nous*) expliquer ce problème, et (nous*) proposer une solution ,

merci d’avance, Marc

Le (nous*) car je suppose ne pas être seul

Ci-joint le fichier test qui met en évidence le problème

h\": �Z��

Bonjour et bienvenue,

Je reconnais mon code, étant un inconditionnel du split. Mais il faut toujours s'attendre à ce que les sociétés fassent évoluer leur façon d'écrire les pages html. C'est leur droit.

Je regarde une alternative.

Change ces 2 lignes

avant = "<span class=""c-instrument c-instrument--last"" data-ist-last>"
apres = "</span>"

mais attention ! nous sommes encore en pleine cotation, cela peut aussi changer de structure après clôture.

capture d ecran 361

nota : ce code est ancien et pas du tout optimal, mais il fonctionne !

Bonjour Steelsom

Merci de m'aider

Je suis heureux de connaitre le non de celui qui m'a inciter a apprendre VBA car c'est a partir ta procédure qui m'a ouvert des perspectives de faire un logiciel de gestion de portefeuille

tu peux dire que tu est a l'origine de quelques nuits d'insomnie pour comprendre le code de cette procédure (c'est vrai que je ne connaissais rien, rien..), en particuliers l'utilisation de cellule nommée ainsi que le fonctionnement de la fonction split, maintenant je pense bien la comprendre car j'ai du l'adapter pour récupérer la VL des OPCVM ainsi que les ces mêmes valeurs cours action , indice et VL OPCVM dans les historiques, merci encore

Mon Pb n'est pas dans l'utilisation de la fonction split, mais dans l'extraction du serveur du contenu de la page concernée, sans doute me suis je mal expliqué(mille excuses)

Ce problème est mis en évidence de 2 manières (du moins chez moi et 3 amis)

-le contenue de "XXX,reponseTxt " est vide

-Le status n'est pas a 200 mais a 12031 (sans doute connexion interrompue) ?

Le fichier que j'ai joint permet de mettre en évidence le Pb (du moins chez moi et ..)

Marc

voici l'essai que j'ai réalisé avant de répondre

je bascule maintenant davantage sur google sheets dont certaines fonctions sont très intéressantes ! si tu en as la possibilité !

Steelson

Désolé !

le fichier que tu m'as envoyé

IL fonctionne chez toi, j'ai vu

Il ne fonctionne pas chez moi ? donc le Pb est chez moi, Je vais creuser, Je te tiens au courant, actuellement je n'est aucune idée ....j'espére que la nuit va m'inspirer

Quand a google sheets je ne connais pas, je vais m'y interresser

Merci encore

Bonjour

J'ai réussi a comprendre ce qui est arrivé.

J'ai écrit dans mon premier message

J’ai fait tester chez 3 amis (PC differents, OS différents, version excel différentes) mêmes resultats

En fait le test a été mal fait, bien qu'ayant été fait avec un excel d'une version différente (excel 2019), celui ci a l'ouverture d'un fichier excel 2007 se met en mode "compatibilité"!! Ce qui revient a faire le test non avec excel 2019 mais excel 2007 ...... donc même résultat que chez moi

En "sortant" du mode compatibilité, Excel 2019 fonctionne ce qui confirme l'essai de Steelson avec excel 2013

Donc excel 2007 ne peut plus récupérer des fichiers sur le serveur Boursorama

Explication (hypothèse): le protocole de transfert de fichier sur internet entre serveur et PC a évolué. le protocole utilisé par excel 2007 est devenu obsolète.

Certains serveurs, dans un souci d'accessibilité on conservé la possibilité d'utiliser encore cet ancien protocole de transfert (préciser dans la requête au serveur) mais sur le serveur Boursorama depuis environ le 8 janvier cet ancien protocole n'est plus gérer! (remise en ordre....peut être)

Merci a Steelson

Marc

Est-ce que tout est ok maintenant ?

N'oublie pas de clore le fil de discussion en cliquant sur

Bonjour,

nouvelle version basée sur les DOM, plus pro, plus facile à modifier (pas de split) mais plus lente qu'un traitement direct avec split sur le code source textuel

Option Explicit

Sub interroger()
Dim page As New HTMLDocument, cours As Object, i%
On Error Resume Next
For i = 2 To Range("C" & Rows.Count).End(xlUp).Row
    If Range("C" & i) <> "" Then
        Range("D" & i) = ""
        page.body.innerHTML = pageHTML(Range("C" & i))
        Set cours = page.getElementsByClassName("c-ticker__item c-ticker__item--value")
        Range("D" & i) = SuppBalises(cours(0).innerHTML)
    End If
Next
End Sub

Function pageHTML(url As String) As String
    With CreateObject("WINHTTP.WinHTTPRequest.5.1")
        .Open "GET", url, False
        .send
        pageHTML = .responseText
    End With
End Function

Function SuppBalises(chaine As String) As String
Dim t, i%
SuppBalises = chaine
t = Split(chaine, "<")
If UBound(t) > 0 Then
    For i = 1 To UBound(t)
        If InStr(t(i), ">") > 0 Then SuppBalises = Replace(SuppBalises, "<" & Split(t(i), ">")(0) & ">", "")
    Next
End If
End Function
171boursorama-dom.xlsm (18.78 Ko)

Pour la version Google Sheets ... une seule ligne !

=importxml(url;"//div[@class='c-ticker__item c-ticker__item--value']")
Rechercher des sujets similaires à "recuperation cours bourse boursorama fonctionne"