Recupp cours de bourse dans Excel

Bonjour,

Merci de votre réponse.

Effectivement ça a marché mais que pour une seule ligne du portefeuille ... Je vais creuser le pourquoi.

Si quelqu'un a une idée ; je prends peut-être la mauvaise balise...

Cordialement.

j'ai l'impression que dans ta balise il y a des espaces et excel n'aime pas

"<div class=""c-ticker__item c-ticker__item--variation-percent u-color-stream-down"">"

bref ... dans cette balise je n'ai pas d'espace

<span class="c-instrument c-instrument--variation" data-ist-variation="">+0.91%

</span>

peu être qu'il serai préférable de le récupéré dans cette balise

j'éssai de mon coté ...

Ok merci beaucoup de votre aide.

Pour ma part cela ne fonctionne pas avec les 2 balises que vous avez données.

Je continue de chercher de mon côté également.

Bien cordialement.

Bonjour,

Tu peux prendre :

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

et tu as toujours la solution PowerQuery

341rprms.xlsx (17.57 Ko)

Effectivement ça a marché mais que pour une seule ligne du portefeuille ... Je vais creuser le pourquoi.

J'ai aussi remarqué que, parfois, le site pouvait donner une structure différente en fonction des valeurs, et en fonction du moment de la journée (bourse ouverte ou fermée).

Bonjour,

Un grand merci de votre aide.

Avec les "avant" et "après" que vous avez donnés, je n'ai que des cellules vides. C'est bizarre puisque dans le code HTML entre ces 2 balises j'ai bien une valeur.

Pour le Query ce serait idéal mais je ne peux malheureusement pas, je suis sur un ordi d'entreprise et je n'ai pas la main sur les install ...

Bien cordialement.

Voici le code (dont la quasi totalité a été écrit par Steelson) qui me donne des cellules vides.

Sub MajCotations()
Dim i%, k%, URL$, COT
k = Cells(Rows.Count, [REF].Column).End(xlUp).Row
Range(Cells(2, [Cotation].Column), Cells(k, [Cotation].Column)).Clear

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

On Error Resume Next
For i = 2 To k
    DoEvents
        ReDim COT(1 To k, 1 To 1)
        COT(1, 1) = Cells(i, [Cotation].Column).Value
        URL = Cells(i, [WWW].Column).Value
    Application.StatusBar = "Mise à jour des cotations 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, [Cotation].Column).Value = COT(i, 1)
Next

Dim a As String

a = InputBox("Souhaitez-vous archiver les données sur la base principal ? Tapez 'oui' ou 'non'")

If a = "oui" Then
Call Archives_princ

Else

End If

MsgBox ("La mise à jour des cotations est terminée")
End Sub

Regarde ici

le avant et apres sont dans la feuille paramètres

je pense que le problème venait du val dans :

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

qui ne doit pas être adapté pour la variation sans doute !

donc essaie aussi en enlevant val

Ça marche c'est parfait.

Je vais essayer de comprendre exactement le pourquoi du comment car ce code est vraiment intéressant et peut me servir pour bien d'autres choses.

Vraiment un grand grand merci.

Moi qui pensais me démerder pas trop mal en VBA je vois que je suis très très loin de certains

Bien cordialement.

je vais voir pour prélever en même temps plusieurs informations

Ok effectivement cela ralentirait le temps de traitement de la macro je suppose.

Sinon j'ai adapté le code, je me suis rendu que lorsque c'était un OPCVM, la variation obtenu n'était pas la bonne ... j'ai donc fait en sorte qu'il le détecte.

Fin de journée je commence à avoir mal au crane

Sans ralentir ... une autre version qui te donnera l'ensemble de la table historique

Je me suis trompé je voulais dire l'inverse justement (que ça allait accélérer la macro) ; vu qu'il va aller une seule fois dans le HTML.

Je vais tester votre nouveau doc.

Bien cordialement.

Hello ... c'est ce que j'allais dire

Sans passer par un tableau de données, voici ce que cela peut donner

Moi qui pensais me démerder pas trop mal en VBA je vois que je suis très très loin de certains

Ce n'est pas si complexe que cela in fine ...

  • d'abord l'interro du web, c'est un classique
  • ensuite pour récupérer les infos, je fais un double split :
> je découpe en 2 autour du terme "avant" recherché et je prends la seconde partie (indice 1),

> je redécoupe le résultat autour du terme "apres" recherché et je prends la première partie (indice 0)

Il existe d'autre méthodes : powerquery, getelementbyid, etc ... mais toutes ces méthodes consomment plus de ressources car in fine elles demandent une prédigestion du DOM par excel.

Ok merci j'ai compris le fonctionnement complet de la macro. Un grand merci de votre aide.

Je vais pouvoir m'en servir pour d'autres choses.

Concernant la dernière macro que tu as donnée, il y a un souci je crois.

A chaque fois il va récupérer que le CAC 40 ; peu importe le lien html donné.

En fait je crois qu'il y a une balise HTML en doublon dans le code. Pour ma part j'ai juste modifier les balises dans lesquels il va chercher l'info.

Bien cordialement.

En fait je crois qu'il y a une balise HTML en doublon dans le code.

Dans ce cas, il faut parfois remplacer l'indice (1) par (2) pour prendre le terme suivant du split

Bonne continuation, si tu as pigé, tu es autonome.

Parfait merci à vous !

Rechercher des sujets similaires à "recupp cours bourse"