Cours de Bourse dans feuille Excel

Bonjour et bienvenue,

Ouvre un nouveau sujet pour ta demande.

Tu joins aussi un fichier!...

Cdlt.

J'ai adapté ce code pour d'autres requêtes internet mais dont la solution doit donner plusieurs réponses ...

Comment faire "boucler ce code" pour me donner toutes les réponses à cette recherche ?

1- adopte plutôt cette solution plus "universelle"

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 = "<div class=""c-faceplate__price""><span class=""c-instrument c-instrument--last"" data-ist-last>"
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
End Sub

si tu as plusieurs réponses possibles ...

- soit elles sont encadrées des mêmes termes avant et après, et tu joues ensuite sur les indices ici :

Split(Split(.responseText, avant)(1), apres)(0)
Split(Split(.responseText, avant)(2), apres)(0)
Split(Split(.responseText, avant)(3), apres)(0)

- soit elles sont encadrées par d'autres termes et alors tu fais évoluer les valeurs de avant et après

2- maintenant il y a d'autres façon de capter les informations :

  • par POWER QUERY
  • en allant chercher une table entière contenue dans la page
  • par le biais de getElementById ou getElementsByTagName

dis moi quel(s) site(s) et quelles informations tu souhaites capter s tu veux aller plus loin ...

ps : bonjour Jean-Eric, je n'avais pas vu ta (sage) réponse

merci beaucoup Steelson

Je continue d'avancer et je reviens vers vous......

Bon weekend à tous

Bonjour à tous,

Le fichier "Cours action boursorama new.xlsm" fonctionne à merveille pour les cours de bourse, top ! Merci

Serait-il possible d'ajuster le code afin qu'il fonctionne aussi avec le CAC 40 :

https://www.boursorama.com/bourse/indices/cours/1rPCAC/

et les trackers, par exemple :

https://www.boursorama.com/bourse/trackers/cours/1rTLVC/

un grand merci encore

Jesch

Bonjour Jesch

Quelle est ta version d'excel : PC ou Mac, 2010? 2013? 2016?

Quelles informations veux-tu récupérer ?

Il y a plusieurs méthodes possibles :

Power Query est très adapté pour ces 2 sites, mais il faut avoir XL2016 ou XL2013 avec add-in

sinon, voici une version plus riche que celle que tu évoques (c'est du brut de forge)

Merci cher Steelson,

Serait-il possible d'ajuster le code du fichier "Cours action boursorama new.xlsm" pour qu'il fonctionne avec le CAC 40 (https://www.boursorama.com/bourse/indices/cours/1rPCAC/) et les trackers (https://www.boursorama.com/bourse/track ... rs/1rTLVC/)

J'ai XL 2016 sous PC, je serais aussi preneur de la méthode Power Query, désolé suis un peu débutant sur cet aspect d'Excel

Encore merci,

Jesch

Serait-il possible d'ajuster le code du fichier "Cours action boursorama new.xlsm" pour qu'il fonctionne avec le CAC 40 (https://www.boursorama.com/bourse/indices/cours/1rPCAC/) et les trackers (https://www.boursorama.com/bourse/track ... rs/1rTLVC/)

qu'est-ce que tu veux récupérer comme information ?

J'ai XL 2016 sous PC, je serais aussi preneur de la méthode Power Query, désolé suis un peu débutant sur cet aspect d'Excel

Rien de plus simple ... (je ne suis pas un spécialiste pourtant)

Power Query > A partir du web et tu indiques l'url

capture d ecran 443

ensuite tu choisis la table qui t'intéresse

capture d ecran 444

Merci,

Je voudrais récupérer le dernier cours comme dans le fichier "Cours action boursorama new.xlsm"

Je voudrais récupérer le dernier cours

Voici,

mais prends plutôt la version Power Query page suivante ...

116cac-40.xlsm (19.17 Ko)

Bonjour,

@ Steelson,

La version PQ.

L'actualisation s'effectue à l'ouverture du fichier puis toutes les 5 minutes (exemple).

Cdlt.

191steelson.xlsx (43.95 Ko)

Jean-Eric,

J'aurais bien aimé avoir ton expérience sur ce coup ... parce que je pense qu'on fait vraiment fausse route ! avis perso;

https://forum.excel-pratique.com/viewtopic.php?p=731374#p731374

Merci !

Merci beaucoup Steelson,

Penses-tu qu'il soit possible d'avoir dans un même onglet :

avec le rappel du cours de la veille

Merci !!

Tout est possible ... il suffit de paramétrer quelles valeurs de "découpage" de .responseText à prendre selon la page web interrogée !

Tu veux que je mette mes mains dans le cambouis ?

Avec plaisir, je tenterai de me débrouiller tout seul ensuite..

merci

Bonjour,

Ctrl+Maj+E pour exécuter la macro

193web-multisites.xlsm (18.06 Ko)

Merci beaucoup Steelson, très utile !

Je ne comprends pas pourquoi le module ne fonctionne pas pour L’OREAL, sans doute raison de l’apostrophe, j’ai tout essayé sans réussir.

Pour info, à quoi correspondent les « 1 » et « 2 » en colonnes B et C ?

Comment pourrais-je facilement ajouter une troisième donnée, le « volume » ou le « dividende » (présent dans le bas de la page HTML) par exemple ?

J’ai essayé de faire évoluer le code avec un debut3 et une fin3 et en ajoutant les paramètres en colonne C de l’onglet, mais sans succès.

Encore merci !

En effet, , il faut écrire L&#039;OREAL, l'apostrophe étant le 39ème caractère ascii.

Colonnes B et C ... c'est un peu complexe (et c'est lié au fait qu'on m'a demandé de mixer les sites) ... dans le code source il s'agit de la première ou seconde occurrence du terme trouvé pour découper la réponse (texte) du site.

Je regarde pour le « volume » ou le « dividende » ...

135web-multisites.xlsm (18.26 Ko)

@ Jesch

Oublie la version polymorphe précédente, c'était plus un exercice de style, mais les sites ont des écritures différentes et cela devient complexe de leur trouver des points communs.

Pour reprendre ta question sur l'intégration d'autres valeurs, tu as plusieurs méthodes à ta disposition

1- Power Query

je ne connais pas ta version d'excel ... si c'est possible, reprends la réponse de Jean-Eric https://forum.excel-pratique.com/viewtopic.php?p=731484#p731484

2- tu peux aussi un équivalent à PowerQuery que j'avais développé pour capter l'ensemble des tables du site, tu as ainsi toutes les informations pour peu qu'elles soient contenues dans des tables html

Sub Maj()
Dim URL$, obj As New DataObject
MsgBox "interro web ..."
On Error Resume Next
    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
MsgBox "Fin !"
End Sub
63l-oreal.xlsm (91.43 Ko)

3- utiliser les DOM et décoder la page html par le biais de getelementbyid ... pour ici je n'ai pas vu la structuration suffisante des données de la page web pour l'utiliser

4- à défaut d'utiliser les DOM, et si tu veux interroger en rafale plusieurs pages en ciblant certaines données, tu peux utiliser un traitement via split de la réponse en texte du site web

Sub MajCotations()
Dim i%, k%, URL$, avant1$, avant2$, apres1$, apres2$, indice%

'On Error Resume Next
    For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row

        DoEvents
        URL = Cells(i, "B").Value

        With CreateObject("MSXML2.XMLHTTP")
            .Open "GET", URL, False
            .Send
            If .Status = 200 Then
                For k = 1 To 4
                    avant1 = Replace(Replace(Sheets("paramètres").Range("avant1").Offset(0, k).Value, "XXXXX", Cells(i, "A").Value), "'", "&#039;")
                    apres1 = Sheets("paramètres").Range("apres1").Offset(0, k).Value
                    avant2 = Sheets("paramètres").Range("avant2").Offset(0, k).Value
                    apres2 = Sheets("paramètres").Range("apres2").Offset(0, k).Value
                    Cells(i, "B").Offset(0, k).Value = Val(mydata(.responseText, avant1, apres1, avant2, apres2))
                Next
            End If
        End With
    Next

End Sub

Function mydata(texte As String, debut1 As String, fin1 As String, debut2 As String, fin2 As String)
    mydata = Split(Split(texte, debut1)(1), fin1)(0)
    mydata = Split(Split(mydata, debut2)(1), fin2)(0)
End Function

ps : j'ai intégré dans l'interrogation la transformation de l'apostrophe !

Rechercher des sujets similaires à "cours bourse feuille"