Recupp cours de bourse dans Excel

Bonjour,

Merci à vous deux pour vos éclaircissements sur le sujet. C'est ok pour la gestion des virgules, ainsi que la gestion des noms de cellules (j'y ai passé le temps cette nuit pour finalement avoir pu le comprendre).

Nous voilà maintenant avec un fichier plutôt bien rempli, j'y ai ajouté le nom de la monnaie de l'action souhaitée ainsi que la cible visée par le consensus.

Maintenant, j'aimerais récupérer quelques données historiques sur ces valeurs. Peut-être est-il plus simple de les faire afficher dans plusieurs onglets sinon le mieux serait qu'il s'affiche dans les collones suivantes du fichier principale (un peu plus loin) histoire de bosser sur un seul onglet et ensuite faire de la visualisation de données sur un autre onglet "output".

Tout d'abord, la macro de l'affichage de l'historique de foncitonne pas, je sens qu'il ne manque pas grand chose. Deuxièmement il arrive que la macro tourne dans le vide et qu'elle ne produise rien comme si le site 'investing. com" bloquait l'envoi de données finalement...

L'erreur que j'ai quand je vais sur le site web directement via le navigateur est : 406 Not Acceptable nginx/1.16.1

Chose assez étonante, quand je change la langue du site, par exemple mettre investing en français, alors j'arrive à récupérer la data..

Sachant qu'il n'y a pas besoin d'être connecté à son compte sur le site pour avoir accès aux données, existe t'il un moyen facile comme par exemple l'envoi de paquet ou une modification d'adresse IP afin de passer outre ? (si c'est bien le problème que je note évidemment).

Bien à vous,

L'erreur que j'ai quand je vais sur le site web directement via le navigateur est : 406 Not Acceptable nginx/1.16.1

Parce que tu es repéré par le robot et tu est mis en quarantaine pendant un moment !

Boursorama est plus souple.

Merci Steelson.

C'était bien ça alors. Bon après, en l'utilisant à bon escient, ça devrait aller. Pour les tests de code c'est vrai que c'est plus délicat.

Rien que de changer de wifi 4g à wifi box suffirait.. Cela refonctionne de nouveau.

En restant sur le site investing, auriez vous la solution pour le code de rapatriement des données historiques des cours des actions mentionnées ?

Bien à vous,

avec modération

un onglet par historique

Bonsoir,

C'est parfait, j'ai pu l'adapter pour le fichier concerné.

Sincèrement,

Bonjour,

je récupére sur cette page la valeur PER 2020

https://www.boursorama.com/cours/1zMSF/

image

à l'aide du bloc ci-dessous et cela fonctione tres bien :

avant = "<td class=""c-table__cell c-table__cell--dotted c-table__cell--inherit-height c-table__cell--align-top / u-text-left u-text-right u-ellipsis"">"
apres = "</td>"

On Error Resume Next
For i = 2 To k
DoEvents
ReDim PER(1 To k, 1 To 1)
PER(1, 1) = Cells(i, [per2k20].Column).Value
URL = Cells(i, [www].Column).Value
Application.StatusBar = "Mise à jour du PER 2021 en cours …"
On Error Resume Next
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", URL, False
.Send
If .Status = 200 Then PER(i, 1) = Val(Split(Split(.responseText, avant)(12), apres)(0))
End With
Application.StatusBar = False
Cells(i, [per2k20].Column).Value = PER(i, 1)

Next

je souhaite maintenant récupérer , toujours sur la même page la valorisation :

image

j'utilise pour cela le même bloque de texte que précédement mais je l'ai modifié pour chercher la bonne clée ( enfin disons que j'ai éssayé )

avant = "<div class=""c-list-info c-list-info--bottom-separator@sm-max c-list-info--left-separator@lg-min c-list-info--no-gutter@md-min"">""<ul class=""c-list-info__list c-list-info__list--split-half"">""<li class=""c-list-info__item c-list-info__item--no-padding@md"">""<p class=""c-list-info__heading u-color-neutral"">"
apres = "</td>"

On Error Resume Next
For i = 2 To k
DoEvents
ReDim PER(1 To k, 1 To 1)
COT(1, 1) = Cells(i, [valorisation].Column).Value
URL = Cells(i, [www].Column).Value
Application.StatusBar = "Mise à jour de la valorisation en cours …"
On Error Resume Next
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", URL, False
.Send
If .Status = 200 Then COT(i, 1) = Val(Split(Split(.responseText, avant)(1), apres)(0))
End With
Application.StatusBar = False
Cells(i, [valorisation].Column).Value = COT(i, 1)

Next

je ne récupere rien , j'ai donc écris une mauvaise syntaxe entre AVANT et APRES

quelqu'un sourait il m'aider à modifier ma syntaxe ?

d'avance merci pour votre soutien

Sub Maj()

    DoEvents
    URL = Range("A2").Value
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .Send
        If .Status = 200 Then
            avant = "valorisation"
            apres = "MEUR"
            donnee = Split(Split(.responsetext, avant)(1), apres)(0)
            avant = "<p class=""c-list-info__value u-color-big-stone"">"
            donnee = Split(donnee, avant)(1)
            Range("B2").Value = Val(donnee)
        End If
    End With

End Sub

bonjour,

merci pour ta réponse , je ne souhaite pas changer encore une fois la syntaxe , je souhaiterais uniquement changer les deux lignes "avant" et "apres" , comme je l'ai écris dans mon texte précédent.

est ce possible que je modifie uniquement ces deux lignes ?

avant = "<td class=""c-table__cell c-table__cell--dotted c-table__cell--inherit-height c-table__cell--align-top / u-text-left u-text-right u-ellipsis"">"
apres = "</td>"

j'ai tenté de remplacer par tes infos mais tu a 2 fois le mot avant dans ton bloc donc je ne sais pas trop comment l'écrire

merci

attention au nombre d'espaces !! et aux sauts de ligne

avant = "valorisation" & Chr(10) & "                                                                    </p><p class=""c-list-info__value u-color-big-stone"">" & Chr(10) & "                                    "

apres = "MEUR"

merci Steelson , ca ne fonctionai pas , j'ai fini par réussir à récuperer mon info de la valorisation en écrivant cette syntaxe , apres le avant j'ai testé le 1, le 2, le 3 ...et ainsi de suite ,, au 6eme il m'a sorti mon chiffre : ( le 6 eme argument de la clée list info value u color big stone )

avant = "<p class=""c-list-info__value u-color-big-stone"">"
apres = "/p"

On Error Resume Next
For i = 2 To k
DoEvents
ReDim PER(1 To k, 1 To 1)
PER(1, 1) = Cells(i, [valorisation].Column).Value
URL = Cells(i, [www].Column).Value
Application.StatusBar = "Mise à jour de la valorisation en cours …"
On Error Resume Next
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", URL, False
.Send
If .Status = 200 Then PER(i, 1) = Val(Split(Split(.responsetext, avant)(6), apres)(0))
End With
Application.StatusBar = False
Cells(i, [valorisation].Column).Value = PER(i, 1)

Next

j'éssai maintenant de récuperer le PER , toujours sur la même page , toujours avec la même synthese histoire que je comprenne ce que je fais :-)

le problême que je rencontre c'est que le PER est en % , et l'intérogation d'une valeur en % ne fonctione pas , je présume qu'il manque un élémént dans ma syntaxe pour lui dire d'ignorer le % ...

une idée je suis preneur !!

voisi ma ligne pour le moment

avant = "<td class=""c-table__cell c-table__cell--dotted c-table__cell--inherit-height c-table__cell--align-top / u-text-left u-text-right u-ellipsis"">"
apres = "</td>"

grand merci

padon ce n'est pas le PER le problême , celui -ci fonctione il n'est pas en %

c'est le RENDEMENT

image

merci Steelson , ca ne fonctionai pas ,

pourquoi ?

as-tu fait fonctionner le fichier ? chez moi il fonctionne

as-tu copié correctement jusqu'au bout la valeur de avant ?

je l'ai écrit pour respecter ta demande ! sinon bien sûr la 6ème valeur après <p class="c-list-info__value u-color-big-stone">

c'est plus simple

Regarde pourquoi cela ne fonctionnait pas chez toi ! je ne ferai pas le rendement si c'est pour lire que cla ne fonctionne pas !

désolé si ma réponse t'a gêné , tu ne fais que nous aider et sans des personnes comme toi nous ne pourrions pas progresser , je n'avais en aucun cas l'intention de te blessé.

je vais t'envoyer la macro dans laquelle j'ai copié / collé tes infos , l'interrogation ne me renvois rien , je sais bien que ça ne vient pas de toi , mais comme je l'ai déjà dit dans nos échanges précédents je ne connais rien en macro et je passe des heures a essayer de comprendre comment ca fonctione pour ensuite essayer d'être autonome , mais ce qui paraît simple pour toi par écrit est très difficile pour un mec comme moi qui n'y connaît rien.

N'arrivant pas à récup les infos suite a ton dernier message je suis resté sur la macro originale que tu a réalisé au début de ce forum Et que j'utilise quotidiennement , je joue avec en essayant de comprendre comme je peux pour récupérer d'autres infos supplémentaires par moi même sans vous solliciter tout le temps , contant parfois d'arriver à la modifier et d'obtenir l'info qui m'intéresse....

voila le fichier comme demandé , ne pouvant pas envoyer le fichier original j'ai fais un copier / collé de la feuille concernée ainsi que de la macro , la macro ne fonctione plus sur ce nouveau fichier je pense que je ne met pas les bonnes references de colonne ou il faut dans excel , je pense que ca ne posera pas de problêmes pour toi de toute facon

17rendements.xlsx (15.18 Ko)

voila le fichier le premier n'est pas en format avec macro , désolé

et voila celui que j'ai écrit en copie / coller avec ton avant / apres

désolé si ma réponse t'a gêné , tu ne fais que nous aider et sans des personnes comme toi nous ne pourrions pas progresser , je n'avais en aucun cas l'intention de te blessé.

tu dis que cela ne fonctionne pas mais le fichier n'a jamais été téléchargé !

capture d ecran 733

Bon, passons ...

N'arrivant pas à récup les infos suite a ton dernier message je suis resté sur la macro originale que tu a réalisé au début de ce forum Et que j'utilise quotidiennement , je joue avec en essayant de comprendre comme je peux pour récupérer d'autres infos supplémentaires par moi même sans vous solliciter tout le temps , contant parfois d'arriver à la modifier et d'obtenir l'info qui m'intéresse....

C'est bien d'essayer par toi-même ... mais en effet, le découpage (split) avec repérage d'un terme "avant" et d'un terme "apres" ne suffit pas toujours, il faut parfois répéter l'opération pour d'abord découper large puis plus étroit, voire également ne pas prendre le premier mais le n ième terme (ce que tu as fait avec 6). Pour ce qui concerne la macro j'ai juste simplifié ce que j'avais fait au début en m'inspirant de ce que j'avais trouvé à l'époque. Cela donne ceci avec une seule itération sur avant/apres :

        URL = Range("A1")
        With CreateObject("MSXML2.XMLHTTP")
            .Open "GET", URL, False
            .Send
            If .Status = 200 Then
                avant = "xxxx"
                apres = "yyyy"
                indice = n
                Range("B1") = Split(Split(.responsetext, avant)(indice), apres)(0)
            End If
        End With

on peut itérer sur les valeurs de l'URL

et avec une double itération parfois nécessaire

        URL = Range("A1")
        With CreateObject("MSXML2.XMLHTTP")
            .Open "GET", URL, False
            .Send
            If .Status = 200 Then
                donnee = .responsetext

                avant = "xxxx"
                apres = "yyyy"
                indice = n
                donnee = Split(Split(donnee, avant)(indice), apres)(0)

                avant = "aaaa"
                apres = "bbbb"
                indice = n
                donnee = Split(Split(donnee, avant)(indice), apres)(0)

                Range("B1") = donnee
            End If
        End With

et voila celui que j'ai écrit en copie / coller avec ton avant / apres

voila le fichier le premier n'est pas en format avec macro , désolé

je ne vois aucune différence entre les 2 !

Rechercher des sujets similaires à "recupp cours bourse"