Recupp cours de bourse dans Excel

tu saurais m'expliquer pourquoi lorsque c'est un pourcentage il ne me sort pas le chiffre dans excel ? le symbol % qui se trouve collé au chiffre doit etre découpé j'imagine ?

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 VALOR(1 To k, 1 To 1)

VALOR(1, 1) = Cells(i, [rend2019].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 VALOR(i, 1) = Val(Split(Split(.responseText, avant)(5), apres)(0))

End With

Application.StatusBar = False

Cells(i, [rend2019].Column).Value = VALOR(i, 1)

Est-ce normal qu'on ait la valeur arrondie ? J'aimerai avoir la valeur avec les 4 décimales... c'est possible ?

mt

tu saurais m'expliquer pourquoi lorsque c'est un pourcentage il ne me sort pas le chiffre dans excel ? le symbol % qui se trouve collé au chiffre doit etre découpé j'imagine ?

html c'est tout simplement du texte, il faut donc triturer le texte pour en tirer la valeur voulue

Est-ce normal qu'on ait la valeur arrondie ? J'aimerai avoir la valeur avec les 4 décimales... c'est possible ?

MT.png

Bonjour Hiroki d'abord et bienvenue
Option Explicit

Sub interro()
Dim contenu$, avant$, apres$
    contenu = pageHTML([www])
    avant = "data-ist-last>": apres = "</span>"
    Cells(1, 3) = "'" & Split(Split(Split(contenu, Cells(1, 1))(7), avant)(1), apres)(0)
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
66arcelormittal.xlsm (20.21 Ko)

Ah désolé de mon impolitesse ! Bonjour à tous

Ca fonctionne très bien merci !

Cependant, j'ai regardé le code et j'avoue n'avoir pas compris grand chose. Peux-tu expliquer ce que tu fais ?

EDIT: Pour préciser ma question, il me semble que la donnée que tu extrais est dans mon cas 8.34. Or j'ai bien 8.3370 dans le résultat.

Car j'aimerai récupérer la variation J-1 :

mtvarjm1

Et aussi la variation au 1er janvier et celle d'il y a une semaine :

mtvarhist

Merci de ton aide et de ta réactivité en tout cas.

Je vais être un peu moins réactif car je vais te répondre plus complètement ce soir (ou cette nuit).

La façon de récupérer des informations dépend beaucoup de la structure du site.

Voir topo ici https://forum.excel-pratique.com/viewtopic.php?p=838401#p838401 si tu as le courage de lire et l'envie de comprendre.

La première des choses et de regarder la source du document html.

Dans le cas de boursorama, les données sont parfois "en vrac" et il faut donc traiter directement le texte html. Ce que je fais en splittant le texte, c'est à dire en le coupant selon des éléments de texte que j'ai pu repérer dans le code source.

Pour l'historique on doit pouvoir faire de façon un peu plus "pro".

Quelle est ta version d'excel ? Est-ce que tu travailles sur PC ou sur MAC ? Renseigne ton profil.

Pour les données historiques, c'est plus simple car il y a une table ... on peut la récupérer avec PowerQuery.

Brut de forge ... je t'expliquerai plus tard

49arcelormittal.xlsm (20.58 Ko)

Explications ...

1-

L'historique est bien structuré (voir dans le fichier source view-source:

) puisqu'il y a une table ...

capture d ecran 457

De ce fait il est possible de récupérer les données de la table en bloc

  • soit par PowerQuery
  • soit par GetElementByTagName("table")
  • soit en copiant toute la table dans le presse-papier et en collant sur la feuille (excel fait de lui-même la mise en forme), c'est cette voie que j'utilise après avoir extrait la table ... voir ci-dessous avec split

2-

A contrario les valeurs que tu demandes sont définies dans des balises <div> génériques et sans identifiant !

capture d ecran 458

Dans ce cas, je charge le texte source de la page web et je découpe de sorte à ne retenir que le texte souhaité (ou la table comme indiqué précédemment).

Pour cela, split va découper le texte en un tableau dont les indices vont de 0 (donc avant le critère de découpe), jusque n.

En reproduisant plusieurs fois ceci, voire comme je le fais en imbriquant les split, j'arrive au résultat.

Exemple simple ....

texte = "ABCDEDIDFGHIJKLKIHYTM"

Je veux retenir ce qui se trouve entre D et K

resultat = split ( split ( texte , "D" ) (1) , "K" ) (0)

L'indice (1) signife donc juste après le premier D rencontré > résultat intermédiaire, l'indice (0) signifiera juste avant le premier K rencontré du résultat intermédiaire.

Le résultat sera EDIDFGHIJ

Quelle est ta version d'excel ? Est-ce que tu travailles sur PC ou sur MAC ? Renseigne ton profil.

Je suis sur PC et Office 365 (Excel v2002).

J'ai parcouru ton code, ça m'a paru plus clair. Je regarderai plus en détail ce soir ou demain.

Merci pour tes explications.

Bonjour à tous,

Merci pour ce partage d'informations. J'ai réussi à m'en sortir pour plusieurs cas d'utilisations, en revanche je bloque sur l'un d'entre eux. Notamment j'utilise les fonctions split pour extraire la partie d'un code html qui m'intéresse.

Le problème se pose sur le site suivant :

www. investing. com/equities/gaya-abadi-sempurna-consensus-estimates

Avec le code suivant :

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

On Error Resume Next
For i = 2 To k
    DoEvents
        ReDim COT(1 To k, 1 To 2)
        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(Split(.responseText, "Moves below")(1), "placeholder=""")(1), "")(0))
        End If
    End With
    Application.StatusBar = False
        Cells(i, [Cotation].Column).Value = COT(i, 1)
        Cells(i, [Cotation].Column + 1).Value = COT(i, 2)
Next
End Sub

Je souhaiterais obtenir le cours de bourse qui est actuellement de 5,XXX IDR MAIS le programme me renvoit seulement le 5 et pas ce qu'il y a après la virgule. Alors que si j'effectue la même opération pour une action côtée comme peugeot, je récupère le string complet. J'imagine que le spit doit séparer les deux parties du chiffre avant et après la virgule dans deux cellules différentes, mais je n'arrive à afficher les deux..

Dans un soucis d'équité, le must serait d'avoir un code qui permettrait de sortir les cours de bourse complets qu'il ait une virgule ou non dans le string extrait.

Aussi, il m'arrive quelque fois d'avoir une erreur de type '424' (object required) sur les lignes suivantes:

k = Cells(Rows.Count, [www].Column).End(xlUp).Row

Range(Cells(2, [Cotation].Column), Cells(k, [Cotation].Column + 1)).ClearContents

Merci,

Bonjour,

edit : corrections ci-dessous

Bonjour,

Merci d'avoir répondu aussi rapidement à la question sur le forum pour les boîtes côtées à 4 chiffres. Malheuresement, je ne peux vérifier cette performance.

En effet, depuis quelques heures et je ne sais pas pourquoi, je n'arrive plus à lancer le code sans avoir une erreur '424' impliquant à la non création d'objet.. J'ai beau recopier le tout dans un autre excel, rien ne se fait. Puis en posant k=9, il initie l'erreur à la ligne suivante. Et même en la supprimant, il reprend une erreur d'array à la prochaine occurence de COT..

Auriez vous une idée ?

Bien à vous,

Bonjour ,

Je suis très intéressé à trouver une solution pour le dernier message du ami StarkFairness affiché ci-dessus .

StarkFairness a publié un problème qui, je crois, est la même Erreur que j'ai lorsque j'exécute la macro à partir de son fichier joint .

J'ai publié une image de l'erreur qui se produit lorsque j'exécute la macro de fichier (l'erreur a un fond jaune) .

Je voudrais pouvoir exécuter cette macro à partir du fichier qui importe ces données du site:

https://www.investing.com/

câlins .

image 1

Le premier problème était lié au caractère , qui est le séparateur des milliers et est interprété par excel comme virgule décimale. Il fallait le supprimer (mes réponses étaient incomplètes)

Val(Replace(Split(Split(.responseText, "id=""last_last"" dir=""ltr"">")(1), "</span>")(0), ",", ""))

Le second problème est que les noms des cellules avaient disparu. J'ai modifié le code :

Sub MajCotations()

    Dim i%, k%, URL$
    k = Cells(Rows.Count, 1).End(xlUp).Row
    Range(Cells(2, 3), Cells(k, 3)).ClearContents

    On Error Resume Next

    For i = 2 To k
        DoEvents
            URL = Cells(i, 2).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
                Cells(i, 3).Value = Val(Replace(Split(Split(.responseText, "id=""last_last"" dir=""ltr"">")(1), "</span>")(0), ",", ""))
            End If

        End With

        Application.StatusBar = False

    Next

End Sub

Salutations ami Steelson ,

merci beaucoup pour votre réponse, maintenant la macro fonctionnait parfaitement .

Je vais vous demander une autre faveur: est-il possible de racheter les données que j'ai diffusées en rouge dans l'image jointe pour chaque adresse de la colonne B du fichier ?

si vous voyez dans l'image jointe, il y a 4 (quatre) données que je voudrais récupérer, mais actuellement seulement 1 (une) donnée est importée par la macro actuelle .

est-il possible de créer 3 (trois) colonnes supplémentaires pour récupérer les données que j'ai fait circuler en rouge dans l'image ?

J'ai suggéré 3 (trois) autres colonnes pour ces données, mais si vous avez une meilleure idée, n'hésitez pas à exposer votre idée .

Peut-être que seulement 2 (deux) autres colonnes répondent déjà à mon besoin . merci pour toute votre aide .

image 2

monsieur Steelson , c'est exactement ce que je voulais réaliser .

Mais je veux expliquer un problème (erreur dans la macro) qui s'est produit ici pour moi lorsque j'ai exécuté la macro pour site do brésil ( l'image d'erreur est jointe ) :

contenter parfois du certaines actions ici au brésil N'ayant pas de valeur pour une certaine variable ( attaché à l'image du site que cela s'est produit cerclé de rouge ) .

J'ai également joint le fichier, vous pouvez voir dans la cellule D7 qu'il n'a pas trouvé de valeur . Ensuite, l'erreur s'est produite dans la macro comme indiqué dans l'image .

Il serait possible d'ajouter dans la macro une "condition IF" si il n'y a pas de valeur, puis mettre un signe ífen ( - ) ?

nous pourrions récupérer la valeur trouvée dans l'image pour la cellule E7 , alors la macro suivra son exécution aux autres valeurs comme elle le fait déjà correctement .

merci pour votre attention ami .

image site image erreur

Ce sont les aléas des sites web dont la configuration peut changer selon les valeurs boursières, voire même selon l'heure de la journée selon que la cotation est terminée ou pas !

c'était parfait .

merci beaucoup pour toute votre aide .

câlins .

Rechercher des sujets similaires à "recupp cours bourse"