Récupération Données Boursorama

Bonjour,

Si j'ai trouvé des solutions pour recueillir les cours de bourse sur boursorama via excel (merci au forum excel-pratique et à leurs contributeurs), je souhaiterai recueillir des informations supplémentaires, comme les prévisions de bénéfice (bénéficie net par action et PER) sur le lien .../cours/consensus/1rPSAF/, la description de l'activité (profil), les chiffres clés ou les principaux actionnaires sur le lien .../cours/societe/profil/1rPSAF/.

Ne maitrisant pas le HTML, je n'arrive pas à identifier comment recueillir les données qui semblent être sous forme de tableau ou de table, et non un simple élément d'une chaine de caractères comme pour le cours.

Merci par avance pour votre aide.

Bonjour TheGaut

La première solution consiste à utiliser PowerQuery ... tu as la table souhaitée (c'est la seconde ou troisième, je ne sais plus).

Il faudrait que tu indiques dans ton profil ta version d'excel.

Autre solution qui a ma préférence (PowerQuery n'étant pas très rapide sur ce coup), c'est celle que je décris ici : https://www.excel-pratique.com/fr/telechargements/macros/tables-html-site-excel-no432

Voici une application sur une valeur donnée. C'est hyper simple, je split responsetext sur le mot clé "<table"

Sub Maj()
Dim URL$, obj As New DataObject

    DoEvents
    URL = [www]
    'On Error Resume Next
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .Send
        If .Status = 200 Then
            For i = 1 To UBound(Split(.responseText, "<table"))
                txt = "<table" & Split(Split(.responseText, "<table")(i), "</table>")(0) & "</table>"
                obj.SetText txt
                obj.PutInClipboard
                ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
                ActiveSheet.Paste
                ActiveSheet.Name = "Table #" & i
            Next
        End If
    End With

End Sub

Si tu sélectionnes un tableau qui t'intéresse (donc l'indice le i utile), on peut enchaîner sur différentes valeurs.

Super, c'est exactement ce que je souhaitais faire. Effectivement j'avais été voir le lien que vous indiquez, mais étant complètement novice en HTML, je n'ai pas réussi comprendre l'identification des tableaux et la récupération des données.

Là je comprends que la macro va chercher tous les tableaux présents sur la page web. N'est-il pas possible d'aller chercher juste un élément d'un tableau, sans rajouter une macro excel pour récupérer uniquement les informations souhaitées ?

Pour récupérer un seul tableau, repère son indice sur le numéro d'onglet créé.

Dans ce cas, remplace ceci

            For i = 1 To UBound(Split(.responseText, "<table"))
                txt = "<table" & Split(Split(.responseText, "<table")(i), "</table>")(0) & "</table>"
                obj.SetText txt
                obj.PutInClipboard
                ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
                ActiveSheet.Paste
                ActiveSheet.Name = "Table #" & i
            Next

par ceci

            i = 3 ' par exemple
                txt = "<table" & Split(Split(.responseText, "<table")(i), "</table>")(0) & "</table>"
                obj.SetText txt
                obj.PutInClipboard
                ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
                ActiveSheet.Paste
                ActiveSheet.Name = "Table #" & i
            

et plutôt que de mettre

ActiveSheet.Name = "Table #" & i

autant mettre le code correspondant à l'action et itérer sur plusieurs codes

Exemple pour le tableau 3 en rafale sur plusieurs indices

Et pour la totalité des tableaux pour tous les cours ...

Sub Maj()
Dim URL$, obj As New DataObject

For n = 2 To Sheets("URL").Range("C" & Rows.Count).End(xlUp).Row
    DoEvents
    URL = Sheets("URL").Range("C" & n).Value
    ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = Sheets("URL").Range("A" & n)
    'On Error Resume Next
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .Send
        If .Status = 200 Then
            For i = 1 To UBound(Split(.responseText, "<table"))
                Range("A" & Rows.Count).End(xlUp).Offset(2, 0).Select
                txt = "<table" & Split(Split(.responseText, "<table")(i), "</table>")(0) & "</table>"
                obj.SetText txt
                obj.PutInClipboard
                ActiveSheet.Paste
            Next
        End If
        Range("A1").Select
    End With
Next

End Sub

Maintenant je me demande bien comment on peut le faire avec PowerQuery.

Merci beaucoup pour votre aide et votre souci du détail, cela va grandement me faciliter la vie et m'éviter de faire les recherches périodiquement de manière manuelle sur un très grand nombre de titres.

Bonjour,

Ca fonctionne super pour récupérer le cours et les informations présentes dans les tableaux, mais j'ai encore une dernière difficulté pour récupérer les informations telles que le secteur, l'indice de référence ou la valorisation (en haut de la page). Les méthodes utilisées pour récupérer le cours ou les tableaux ne fonctionnent pas ou alors je ne suis vraiment pas doué pour traiter du HTML via excel.

En effet, si ces informations ne sont pas dans des tables, il faudra décortiquer la .responsetext différemment. Je regarde demain à la fraîche.

J'ai ajouté cette partie qui est très spécifique ...

            ' valeur isolées
            Range("A1") = Split(Split(.responsetext, "Consulter les valeurs du secteur ")(1), """")(0)
            Range("A2") = Split(Split(.responsetext, "Consulter l&#039;indice de référence : ")(1), """")(0)
            temp = Split(Split(.responsetext, "valorisation")(1), "</li>")(0)
            Range("A3") = Split(Split(temp, """>")(1), "<")(0)

Merci beaucoup, je vois qu'il faut être super astucieux pour récupérer les informations sous HTML et l'utilisation du split est précieuse.

l'utilisation du split est précieuse.

Méthode rustique ... mais qui fait ses preuves !

Pour décortiquer le html, il suffit d'afficher la source et repérer les éléments de texte pertinents pour bien cadrer la valeur recherchée.

Bonjour

Beaucoup de developpement dans ce sujet j'aime bien.

Mais moi j'aimerai savoir si on peut avoir une macro qui te permet de recuperer des cours a une date specifique

Genre en rentrant peut-etre "13-02-2020" et je rentre l'action ou son lien html ca me recupere le cours a cette date precisement.

Merci ci quelqu'un a un lien qui traite du sujet

Bonjour,

ok, je répondrai dans la journée ici : https://forum.excel-pratique.com/viewtopic.php?p=840720#p840720

Rechercher des sujets similaires à "recuperation donnees boursorama"