VBA pour importer des données boursières

Salutations ,

J'ai besoin d'importer toutes les données des 10 colonnes d'informations boursières contenues dans ce

.

sur le côté gauche de la page, vous trouverez un bouton appelé "Filtres", alors appuyez sur ce bouton pour pouvoir sélectionner "Toutes les actions" et également "Tout" , puis appuyez sur le bouton "Appliquer les filtres" , alors vous aurez toutes les actions informées dans 10 colonnes .

De plus, pour chaque action en bourse, il y a un historique avec 7 colonnes, par exemple, pour le premier action de la liste, nous avons cet

.

J'ai également besoin d'importer dans Excel l'historique de tout boursières contenue dans la liste , donc il y aura beaucoup d'historique .

Pour afficher tout l'historique qui contient 2 ans avec des informations précédentes, vous devez appuyer sur le bouton "Voir tout" .

J'ai trouvé un excellent modèle à appliquer à mon besoin dans ce sujet ici , Je crois que ce modèle peut être très utile pour résoudre mon besoin .

Merci d'avance pour toute l'aide .

Bonjour,

J'ai besoin d'importer toutes les données des 10 colonnes d'informations boursières contenues dans ce

.

sur le côté gauche de la page, vous trouverez un bouton appelé "Filtres", alors appuyez sur ce bouton pour pouvoir sélectionner "Toutes les actions" et également "Tout" , puis appuyez sur le bouton "Appliquer les filtres" , alors vous aurez toutes les actions informées dans 10 colonnes .

Si je sélectionne Todas as Ações puis Todos je ne vois pas réellement de diférences ... néanmoins j'ai quand même sur la page de ADHM3 à YCHY11

Par contre, la grande difficulté que l'on rencontre est que, lorsqu'on affiche le code source, on ne trouve pas les valeurs. Le chargement se fait en asynchrone (ajax).

var data = {"ajax_url":"https:\/\/www.infomoney.com.br\/wp-admin\/admin-ajax.php"};

J'ai quand même regardé comment PowerQuery pouvait être mis à profit ... échec de ce côté.

capture d ecran 502

Il est donc assez probable qu'il faille simuler un navigateur pour en récupérer les données.

Je vais regarder.

De plus, pour chaque action en bourse, il y a un historique avec 7 colonnes, par exemple, pour le premier action de la liste, nous avons cet

.

En appuyant sur Ver tudo le site se met en boucle sans répondre.

Je pense aussi que la réponse sera en asynchrone (ajax). Impossible via PowerQuery. Il faudra aussi simuler un navigateur.

Question : y a t-il d'autres sites pour voir cet historique ?

Une solution bien dégradée (il faut laisser tourner jusqu'à la fin).

Pas facile de travailler avec l' ajax

Fonctionne au moins avec chrome !

#If VBA7 Then
    Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#Else
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#End If

Sub telecharger()
Dim nav As Long, url$, compteur%, ligne As Long

    url = Sheets("url").Cells(1, 1)
    Sheets.Add After:=Worksheets(Worksheets.Count)

    nav = ShellExecute(0, "open", url, 0, 0, 1)

    Application.Wait (Now + TimeValue("00:00:05"))
    For compteur = 1 To 5
        SendKeys "{PGDN 3}"
        Application.Wait (Now + TimeValue("00:00:01"))
    Next

    ' envoi de Ctrl+a (tout sélectionner)
    SendKeys "^a"
    Application.Wait (Now + TimeValue("00:00:01"))
    ' envoi de Ctrl+c (copier)
    SendKeys "^c"
    Application.Wait (Now + TimeValue("00:00:01"))
    SendKeys "%{F4}"

    ActiveSheet.Paste

    For ligne = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
        If Cells(ligne, 2) = "" Then Rows(ligne).Delete Shift:=xlUp
    Next

    Dim Img As Object
    For Each Img In ActiveSheet.Pictures
        Img.Delete
    Next

    Cells(1, 1).Select

End Sub

Salutations monsieur Steelson ,

Une solution bien dégradée (il faut laisser tourner jusqu'à la fin)

J'ai commencé à exécuter la macro du fichier que vous avez présenté comme solution, mais la macro n'a pas pu importer toutes les données "Actions" de la page mentionnée .

J'ai remarqué que la macro fonctionnait sans afficher d'erreur, mais elle n'a pas pu présenter dans le tableur le tableau avec toutes les données des "Actions" .

J'ai joint le fichier avec les seules données qui m'ont été présentées ici, je l'ai placé avec un fond rouge pour les mettre en valeur .

Attention:

Si vous souhaitez utiliser la méthode "JSON", vous pouvez l'utiliser pacifiquement, car j'ai déjà résolu le problème de mon sujet ici .

j'utilise le navigateur chrome , et aussi le même Excel 2010 mentionné dans l'ancien sujet .

Si vous souhaitez utiliser la méthode "JSON", vous pouvez l'utiliser pacifiquement, car j'ai déjà résolu le problème de mon

Ah en effet, on s'était déjà rencontrés.

Si on peut avoir les données en json, ce serait magnifique, mais ce n'est pas le cas ici !

La table dans le code source est vide

                    <div id="container_table" class="container-default-table">
                        <table id="altas_e_baixas" class="default-table">
                        </table>
                    </div>

elle est alimentée après chargement en ajax

https://www.infomoney.com.br/wp-admin/admin-ajax.php

Au passage, ton fichier est vide, voici ce que j'ai aujourd'hui

Il a quelque chose potentiellement intéressant ici :

        <script type="text/javascript">
        //<![CDATA[
        var infiniteScroll = JSON.parse( decodeURIComponent( '%7B%22settings%22%3A%7B%22id%22%3A%22infiniteScroll%22%2C%22ajaxurl%22%3A%22https%3A%5C%2F%5C%2Fwww.infomoney.com.br%5C%2F%3Finfinity%3Dscrolling%22%2C%22type%22%3A%22click%22%2C%22wrapper%22%3Afalse%2C%22wrapper_class%22%3A%22infinite-wrap%22%2C%22footer%22%3A%22footer%22%2C%22click_handle%22%3A%221%22%2C%22text%22%3A%22Carregar%20mais%22%2C%22totop%22%3A%22Scroll%20back%20to%20top%22%2C%22currentday%22%3A%2208.04.20%22%2C%22order%22%3A%22DESC%22%2C%22scripts%22%3A%5B%5D%2C%22styles%22%3A%5B%5D%2C%22google_analytics%22%3Atrue%2C%22offset%22%3A1%2C%22history%22%3Afalse%2C%22query_args%22%3A%7B%22tool-altas-e-baixas%22%3A%22true%22%2C%22error%22%3A%22%22%2C%22m%22%3A%22%22%2C%22p%22%3A0%2C%22post_parent%22%3A%22%22%2C%22subpost%22%3A%22%22%2C%22subpost_id%22%3A%22%22%2C%22attachment%22%3A%22%22%2C%22attachment_id%22%3A0%2C%22name%22%3A%22%22%2C%22pagename%22%3A%22%22%2C%22page_id%22%3A0%2C%22second%22%3A%22%22%2C%22minute%22%3A%22%22%2C%22hour%22%3A%22%22%2C%22day%22%3A0%2C%22monthnum%22%3A0%2C%22year%22%3A0%2C%22w%22%3A0%2C%22category_name%22%3A%22%22%2C%22tag%22%3A%22%22%2C%22cat%22%3A%22%22%2C%22tag_id%22%3A%22%22%2C%22author%22%3A%22%22%2C%22author_name%22%3A%22%22%2C%22feed%22%3A%22%22%2C%22tb%22%3A%22%22%2C%22paged%22%3A0%2C%22meta_key%22%3A%22%22%2C%22meta_value%22%3A%22%22%2C%22preview%22%3A%22%22%2C%22s%22%3A%22%22%2C%22sentence%22%3A%22%22%2C%22title%22%3A%22%22%2C%22fields%22%3A%22%22%2C%22menu_order%22%3A%22%22%2C%22embed%22%3A%22%22%2C%22category__in%22%3A%5B%5D%2C%22category__not_in%22%3A%5B%5D%2C%22category__and%22%3A%5B%5D%2C%22post__in%22%3A%5B%5D%2C%22post__not_in%22%3A%5B%5D%2C%22post_name__in%22%3A%5B%5D%2C%22tag__in%22%3A%5B%5D%2C%22tag__not_in%22%3A%5B%5D%2C%22tag__and%22%3A%5B%5D%2C%22tag_slug__in%22%3A%5B%5D%2C%22tag_slug__and%22%3A%5B%5D%2C%22post_parent__in%22%3A%5B%5D%2C%22post_parent__not_in%22%3A%5B%5D%2C%22author__in%22%3A%5B%5D%2C%22author__not_in%22%3A%5B%5D%2C%22posts_per_page%22%3A10%2C%22ignore_sticky_posts%22%3Afalse%2C%22suppress_filters%22%3Afalse%2C%22cache_results%22%3Afalse%2C%22update_post_term_cache%22%3Atrue%2C%22lazy_load_term_meta%22%3Atrue%2C%22update_post_meta_cache%22%3Atrue%2C%22post_type%22%3A%22%22%2C%22nopaging%22%3Afalse%2C%22comments_per_page%22%3A%2250%22%2C%22no_found_rows%22%3Afalse%2C%22order%22%3A%22DESC%22%7D%2C%22query_before%22%3A%222020-04-08%2012%3A03%3A42%22%2C%22last_post_date%22%3A%222020-04-08%2010%3A15%3A24%22%2C%22body_class%22%3A%22infinite-scroll%22%2C%22stats%22%3A%22blog%3D161989173%26host%3Dwww.infomoney.com.br%26v%3Dext%26j%3D1%3A8.3%26x_pagetype%3Dinfinite-click-jetpack%22%7D%7D' ) );
        //]]>
        </script>

Voici le décodage

{"settings":{"id":"infiniteScroll","ajaxurl":"https:\/\/www.infomoney.com.br\/?infinity=scrolling","type":"click","wrapper":false,"wrapper_class":"infinite-wrap","footer":"footer","click_handle":"1","text":"Carregar mais","totop":"Scroll back to top","currentday":"08.04.20","order":"DESC","scripts":[],"styles":[],"google_analytics":true,"offset":1,"history":false,"query_args":{"tool-altas-e-baixas":"true","error":"","m":"","p":0,"post_parent":"","subpost":"","subpost_id":"","attachment":"","attachment_id":0,"name":"","pagename":"","page_id":0,"second":"","minute":"","hour":"","day":0,"monthnum":0,"year":0,"w":0,"category_name":"","tag":"","cat":"","tag_id":"","author":"","author_name":"","feed":"","tb":"","paged":0,"meta_key":"","meta_value":"","preview":"","s":"","sentence":"","title":"","fields":"","menu_order":"","embed":"","category__in":[],"category__not_in":[],"category__and":[],"post__in":[],"post__not_in":[],"post_name__in":[],"tag__in":[],"tag__not_in":[],"tag__and":[],"tag_slug__in":[],"tag_slug__and":[],"post_parent__in":[],"post_parent__not_in":[],"author__in":[],"author__not_in":[],"posts_per_page":10,"ignore_sticky_posts":false,"suppress_filters":false,"cache_results":false,"update_post_term_cache":true,"lazy_load_term_meta":true,"update_post_meta_cache":true,"post_type":"","nopaging":false,"comments_per_page":"50","no_found_rows":false,"order":"DESC"},"query_before":"2020-04-08 12:03:42","last_post_date":"2020-04-08 10:15:24","body_class":"infinite-scroll","stats":"blog=161989173&host=www.infomoney.com.br&v=ext&j=1:8.3&x_pagetype=infinite-click-jetpack"}}

Donc ce ne sont pas les données en json.

Au passage, ton fichier est vide, voici ce que j'ai aujourd'hui

J'ai téléchargé votre fichier joint ici .

Mais pour moi, la macro ne peut toujours pas charger les mêmes données que celles chargées dans votre fichier .

la macro n'affiche aucune erreur lors de l'exécution, mais ne charge pas les données pour moi dans la feuille de calcul (Plan1) .

ci-joint est une image des données que vous transportez pour moi, seulement sur la ligne 1 il y a des données .

image 1

Est-ce que c'est pareil avec cet historique ?

Est-ce que lors de l'affichage de la page une popup se met en place qui b loquerait la recopie (genre demande de traduction) ?

Est-ce que c'est pareil avec cet historique ?

Oui, la même chose s'est produite avec la page Historique , L'historique n'a pas été chargé, seuls les titres de la ligne 1 ont été importés .

Est-ce que lors de l'affichage de la page une popup se met en place qui b loquerait la recopie (genre demande de traduction) ?

Non, aucune fenêtre contextuelle ne bloque la copie (comme une demande de traduction) .

La macro ouvre la page, continue de fonctionner, elle passe 20 secondes, puis la macro ferme toutes les pages que j'ai ouvertes sur Internet .

donc seuls les titres de la ligne 1 ont été chargés .

le fichier avec les données chargées sur fond rouge est joint .

Bon ben c'est dommage, je ne sais pas ce qui se passe, une histoire de cookie peut-être ... ? Mais sans tester sur ta machine, je ne sais plus trop quelle direction prendre.

Reste une solution très dégradée mais qui apporte un certain confort ...

capture d ecran 507

ça n'a pas vraiment marché pour moi .

Je pense que la page Web que j'ai choisie pour importer les données n'était pas une bonne page .

Je vais faire une recherche Google pour trouver une autre page Web qui contient également les mêmes données que je veux récupérer .

dès que je trouve une autre page Web contenant les mêmes données, je publierai la nouvelle page Web ici, afin que vous puissiez appliquer les codes VBA .

un modèle de code VBA qui a parfaitement fonctionné pour moi est dans ce sujet ici..(du 2 mars 2020, 05:42)

Mais je ne sais pas si ce modèle de code VBA peut être utilisé dans mon besoin ????

La captation des données dépend beaucoup de la façon dont a été rédigé la page web et l'appel des données. Il y a une course à la protection des données (c'est louable) qui fait que les sites bourse ou enchères ou paris font preuve de créativité pour se protéger (pourtant les données sont publiques et dans la mesure où l'internaute n'a pas signé de charte contraire, ces données peuvent être copiées à des fins personnelles).

La plus grande difficulté, c'est ce cas-ci : lorsque les données sont rappelées en ajax après chargement des pages.

J'ai trouvé une autre page web

, cette fois nous allons marcher un peu plus lentement, jusqu'à ce que j'atteigne tous les objectifs .

sur la page web citée, il y a un tableau avec 8 colonnes de données, mais pas toutes les données sont toujours là .

juste au-dessus de la première colonne, il y a une liste dropdown , dans cette liste dropdown vous devez sélectionner Brésil toutes les actions (Brasil: todas as ações) .

il est important que la sélection de toutes les actions dans la liste dropdown se fasse également automatiquement par le code VBA (macro) .

ce n'est qu'après avoir sélectionné toutes les actions que vous pourrez analyser s'il est possible cette fois d'utiliser JSON pour importer toutes les données des 8 colonnes dans excel .

Si nous passons cette première phase, nous pouvons avancer avec les prochains objectifs à atteindre .

Je tiens également à vous remercier sincèrement pour toute votre aide .

Là encore, le problème de la sélection est que l'on ne fait pas appel à une form de type get ou post ! mais à une fonction qui interagit avec le serveur :

<div class="buttonLine">
            <select class="selectBox" id="stocksFilter" onchange="doStocksFilter('select',this);">
                    <option id="all">Brasil: todas as ações</option>

et je ne vois pas bien comment via excel inter-agir avec le serveur de données.

    function doStocksFilter(objtype,obj) {
        var tabletype="price";
        if (objtype=='btn') {
            if ($(obj).hasClass('toggled')) return;
            $(obj).addClass('toggled').siblings().each(function() { if ($(this).hasClass('toggled')) $(this).removeClass('toggled'); });
        }
        $('#marketInnerContent').html('<div style="margin:100px 130px 60px 130px; text-align:center; min-height:470px;"><img src="https://i-invdn-com.akamaized.net/fx_loading.gif"></div>');
        if ($('#filter_price').hasClass('toggled')) tabletype="price";
        if ($('#filter_performance').hasClass('toggled')) tabletype="performance";
        if ($('#filter_technical').hasClass('toggled')) tabletype="technical";
        if ($('#filter_fundamental').hasClass('toggled')) tabletype="fundamental";

        $.get('/equities/StocksFilter',
            {
                noconstruct:1,
                smlID:$('#smlID').val(),
                sid:$('#sid').val(),
                tabletype: tabletype,
                index_id: $('#stocksFilter option:selected').attr("id")
            },
            function(data) {
                $('#marketInnerContent').html(data);
            }
        );
    }

Donc soit la réponse qui précède est suffisante (mais je ne pense pas), soit il faut repasser par cette solution

Nota : les données ne sont pas sous forme json.

Bonjour ,

Cette fois, Macro a réussi à transporter les données, le modèle qui a fonctionné pour moi était celui-ci . (Aujourd’hui, 04:00)

Je ne sais pas si elle a été exécutée comme vous avez conçu la macro pour qu'elle fonctionne? mais au moins cette fois, la macro a réussi à transporter les données .

Nota1: J'ai mis votre feuille de calcul attachée avec les données sous la forme que la macro a importée ici pour moi .

Nota2: J'ai fait une feuille de calcul manuellement, que j'ai appelée le modèle idéal, où j'ai mis toutes les données des 8 colonnes de la page Web . (est également attaché)

J'aurais besoin que les données de toutes les actions soient organisées verticalement dans la séquence comme dans ma feuille de calcul modèle idéale .

12modele-ideale.xlsm (59.88 Ko)

Oui, mais les données ne sont pas les mêmes, dans ce cas tu n'as qu'une partie et j'avais noté que tu voulais la totalité.

sur la page web citée, il y a un tableau avec 8 colonnes de données, mais pas toutes les données sont toujours là .

juste au-dessus de la première colonne, il y a une liste dropdown , dans cette liste dropdown vous devez sélectionner Brésil toutes les actions (Brasil: todas as ações)

As-tu essayé cette version, moins automatisée ? https://forum.excel-pratique.com/viewtopic.php?p=856920#p856920

As-tu essayé cette version, moins automatisée ?

Oui, je l'ai déjà testé, mais ça ne marche pas pour moi . Vous avez déjà fait cette proposition auparavant, mais cela n'a pas fonctionné pour moi .

la proposition que Macro parvient à importer les données est celle-ci (Aujourd’hui, 09:00) . comme j'ai joint le fichier montrant le résultat final de la macro .

juste au-dessus de la première colonne, il y a une liste dropdown , dans cette liste dropdown vous devez sélectionner Brésil toutes les actions (Brasil: todas as ações)

il est possible de sélectionner toutes les actions dans la liste dropdown en utilisant le code VBA ?

Parce que vous devez d'abord sélectionner toutes les actions, nous aurons ensuite toutes les données sur 811 lignes telles qu'elles se trouvent dans le fichier de modèle idéale.xlsm

Je dois vous remercier beaucoup pour l'aide que vous consacrez .

Oui, je l'ai déjà testé, mais ça ne marche pas pour moi .

Il s'agissait d'une version encore plus allégée. Je suis vraiment surpris que cela ne fonctionne pas ! dommage, je ne sais pas pourquoi. Pourtant tu arrives bien à afficher manuellement une page ? Si c'est le cas, tu dois pouvoir faire Ctrl+a puis Ctrl+c, revenir sur excel et dans une nouvelle feuille faire Ctrl+v puis Ctrl+e. C'est rudimentaire mais efficace. Je t'en redonne une encore plus allégée. L'ouverture du site est à faire manuellement.

33coller-page-web.xlsm (104.02 Ko)

juste au-dessus de la première colonne, il y a une liste dropdown , dans cette liste dropdown vous devez sélectionner Brésil toutes les actions (Brasil: todas as ações)

il est possible de sélectionner toutes les actions dans la liste dropdown en utilisant le code VBA ?

malheureusement on, je n'ai pas réussi à le faire en utilisant des fonctions de type sendkeys ou en allant chercher directement le "sélecteur"; ensuite la second problème sera de relancer l'interrogation car elle se fait via une fonction javascript.

Il existe des sites comme boursorama encore accessible. Ici, il s'agit d'un site également utilisé en France https://fr.investing.com/equities/france , qui a strictement la même structure, et a bien été travaillé dans l'optique de protéger de la captation des données.

Rechercher des sujets similaires à "vba importer donnees boursieres"