Lien direct page web

Bonjour,

Je souhaite recuperer le lien direct (

. com/equities/france ) pour afficher toutes les valeurs de France or ce lien affiche uniquement les valeurs du CAC40. Dans le formulaire menu deroulant coté gauche, il faut choisir "Toutes les actions de France" mais l'URL ne change pas. J'ai aussi inspecter la page mais je ne trouve pas...

Le but c'est d'affiché la liste de toutes les actions françaises dans un excel (actellement j'ai que celle du CAC40) sauf que je ne sais pas comment m'y prendre en plus je suis sous Mac. J'ai rien comme vous.

Comment m'y prendre vous avez des pistes à me conseiller ?

Merci pour votre aide. Je suis bloqué depuis 3 jours.

Quelqu'un aurait une piste à me proposer pour recuperer le tableau avec toutes les valeurs frances, le lien fonctionne uniquement avec les valeurs du cac

Bonjour VincentBD

Le changement de l'option fait appel à un script, la liste déroulante s'appelle "buttonline"

Alors peut-être en pilotant le navigateur et en envoyant le choix "all" à la liste, avant la récupération de tes données

Salut merci pour ta reponse,

J'ai inspecté les elements de la page et j'ai fait le meme constat que toi.

Il faut déplacer

selected="selected"

avant de la charger la page

Je dois passer de ça

<div class="buttonLine">
            <select class="selectBox" id="stocksFilter" onchange="doStocksFilter(&#39;select&#39;,this);">
                    <option id="all">toutes les actions de France</option>
                    <option selected="selected"  id="167">CAC 40</option>
                    <option id="14796">CAC All-Share</option>

À ça

<div class="buttonLine">
            <select class="selectBox" id="stocksFilter" onchange="doStocksFilter(&#39;select&#39;,this);">
                    <option selected="selected" id="all">toutes les actions de France</option>
                    <option id="167">CAC 40</option>
                    <option id="14796">CAC All-Share</option>

Cependant je ne comprend pas quand tu dis en pilotant et je ne vois pas du tout comment m'y prendre. J'ai pas trouvé de sujet similaire. J'ai meme eu l'idée de charger un fichier HTML sur Excel mais ça ne donne pas le bon resultat.

Pour le moment j'utilise un fichier bourse.iqy

WEB
1
https://fr.investing.  com/equities/france

Selection=1
Formatting=None
PreFormattedTextToColumns=True
ConsecutiveDelimitersAsOne=True
SingleBlockTextImport=False
DisableDateRecognition=False
DisableRedirections=False

Voici le debut de mon travail, pour le moment j'arrive que à mettre le CAC 40 et la colonne de gauche est vide je pense que ça correspond au drapeau français. Je vais trouver un moyen de charger les données sans cette colonne mais le plus important c'est de trouver comment afficher toutes les valeurs du Française.

11cotation.xlsx (12.78 Ko)

Bonjour à tous ...

Vu le code source sur lequel j'avais déjà tenté de travailler ... hé bien c'est pas gagné du tout !

J'avais aussi essayé la solution proposée par Bruno

Alors peut-être en pilotant le navigateur et en envoyant le choix "all" à la liste, avant la récupération de tes données

mais le changement de l'option ne se fait pas par une form en get ou post mais via une fonction javascript
doStocksFilter
<div class="buttonLine">
            <select class="selectBox" id="stocksFilter" onchange="doStocksFilter('select',this);">
                    <option id="all">toutes les actions de France</option>
    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);
            }
        );
    }

Le code est strictement le même que celui utilisé ici https://forum.excel-pratique.com/viewtopic.php?p=856920#p856920

Bref, la seule solution que je proposerais, certes dégradée mais relativement fiable et "aidée" est :

capture d ecran 507

Rudimentaire mais efficient !

Sub telecharger()

    Sheets.Add

    MsgBox "Après ouverture complète de la page web, faire" & vbCrLf & _
        "1- renseigner les champs éventuels " & vbCrLf & _
        "2- scrolldwn autant de fois que nécessaire pour avoir les informations souhaitées" & vbCrLf & _
        "3- Ctrl+a et Ctrl+c pour copier la totalité de la page" & vbCrLf & _
        "4- revenir sur excel et faire Ctrl+v puis Ctrl+e"

End Sub
Sub epurer()

    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

    With Cells.Font
        .Name = "Calibri"
        .Size = 11
    End With

    Cells(1, 1).Select

End Sub
17coller-page-web.xlsm (104.02 Ko)

Jolie travail mais maintenant il faut que je le comprenne.

Je repond pas tout de suite mais je prend note de tout ça. J'essaie avant de poser des questions surement idiotes ou deja posé de bien comprend comment les choses ont ete faite.

Surtout trouver une explication pourquoi les valeurs sont en puissance de 10 alors que se sont des valeurs prix, des pourcentages ou des dates ou heures.

Hello je reviens sur ce qui a ete fait.

Parce que je vois plusieurs difficultés avec cette solution tout d'abord je pensais avoir juste besoin de cliquer sur actualisé ou alors parametrer pour que la page s'actualise tout les X minutes.

Si je comprend à chaque nouvelle version je dois faire un copier coller ? (pas tres pratique surtout que les valeurs changent constamment)

Le copie coller n'est pas tres propre en bas de la liste. Tu as deux petits tableau qui ne devrait pas etre là. C'est le genre de chose qui risque d'arriver souvent quand je ferai des copier coller.

A la base j'ai besoin d'un tableau de toutes les actions car je vais m'en servir comme une source donc elle doit etre à jour.

Sur une autre feuille je vais appeler l'action que j'ai besoin.

Excel n'a pas de commande integrer pour la finance, c'est bien dommage... C'est pour ça que je m'y prend de cette façon.

Le copie coller n'est pas tres propre en bas de la liste. Tu as deux petits tableau qui ne devrait pas etre là. C'est le genre de chose qui risque d'arriver souvent quand je ferai des copier coller.

Ceci pourrait se corriger.

Si je comprend à chaque nouvelle version je dois faire un copier coller ? (pas tres pratique surtout que les valeurs changent constamment)

A la base j'ai besoin d'un tableau de toutes les actions car je vais m'en servir comme une source donc elle doit etre à jour.

Excel n'a pas de commande integrer pour la finance, c'est bien dommage

Le problème n'est pas d'avoir un outil intégré à excel, c'est la façon de coder les sites web pour en éviter l'exploitation. Excel possède aujourd'hui PowerQuery.

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).

Je viens de découvrir que (fait rare) ce site est aussi utilisé sous un autre nom

toujours en finance pour le Brésil. Les fonctions sont les mêmes. On atteint ici les limites de ce que l'on peut faire. Tu peux aussi regarder par ici toutes les gymnastiques possibles https://forum.excel-pratique.com/viewtopic.php?p=838401#p838401

Quelle est la solution ? il faut s'abonner à Bloomberg par exemple ! ... ou recopier à la main les informations dans un tableau !

Le copie coller n'est pas tres propre en bas de la liste. Tu as deux petits tableau qui ne devrait pas etre là. C'est le genre de chose qui risque d'arriver souvent quand je ferai des copier coller.

Ceci pourrait se corriger.

Dans ce cas ...

Sub telecharger()

    Sheets.Add

    MsgBox "Après ouverture complète de la page web, faire" & vbCrLf & _
        "1- renseigner les champs éventuels " & vbCrLf & _
        "2- scrolldwn autant de fois que nécessaire pour avoir les informations souhaitées" & vbCrLf & _
        "3- Ctrl+a et Ctrl+c pour copier la totalité de la page" & vbCrLf & _
        "4- revenir sur excel et faire Ctrl+v puis Ctrl+e"

End Sub
Sub epurer()

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

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

    With Cells.Font
        .Name = "Calibri"
        .Size = 11
    End With

    Cells(1, 1).Select

End Sub

C'est rudimentaire je l'avoue, mais efficace pour ne pas recopier à la main !

12coller-page-web.xlsm (104.71 Ko)

In fine, j'ai peut-être une solution !

Pourrais-tu lancer la macro, ne rien toucher pendant 15 secondes et me faire une copie d'écran sans balayer la page web avec la souris.

Je voudrais savoir si tu obtiens la m^me chose que moi dans l'ovale rouge

capture d ecran 510
9investing.xlsm (21.31 Ko)

En parallèle j'explore des voies permettant de piloter la souris à partir d'excel pour pointer sur le menu déroulant ("dropdown") ...

Cette voie semble très prometteuse ... à voir demain matin.

Nouvelle version : Elle exploite le positionnement de la souris par excel.

ATTENTION : il ne faut surtout pas toucher à la souris et laisser le process se dérouler jusqu'au bout (~20 secondes)

NOTA : il faut d'abord calibrer la position à atteindre,en faisant une copie d'écran du site et une exploitation de la position du menu déroulant ("dropdown") par paint par exemple.

Sub telecharger()
Dim nav As Long, url$, ligne%, posX%, posY%, Img As Object, fenetre As String

    fenetre = ThisWorkbook.Name & " - Excel"
    posX = Sheets("url").Cells(1, 2)
    posY = Sheets("url").Cells(2, 2)

    ligne = Selection.Row
    If Left(Sheets("url").Cells(ligne, 1), 4) <> "http" Then
        MsgBox "Sélectionner une url !"
        Exit Sub
    End If

    Sheets.Add After:=Worksheets(Worksheets.Count)
    MsgBox "Ne pas toucher à la souris ou au pad, le curseur va se positionner à l'endroit du menu déroulant de la page web !"
    Call SetCursorPos(posX, posY)

    url = Sheets("url").Cells(ligne, 1)
    nav = ShellExecute(0, "open", url, 0, 0, 1)
    Application.Wait (Now + TimeValue("00:00:05"))
    Call SetCursorPos(posX, posY)
    mouse_event MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, posX, posY, 0, 0
    SendKeys "{UP}"
    SendKeys "{ENTER}"
    Application.Wait (Now + TimeValue("00:00:10"))
    SendKeys "^a"
    Application.Wait (Now + TimeValue("00:00:01"))
    SendKeys "^c"
    Application.Wait (Now + TimeValue("00:00:03"))
    'SendKeys "%{F4}"
    AppActivate fenetre
    Application.Wait (Now + TimeValue("00:00:01"))

    ActiveSheet.Cells(1, 1).Select
    ActiveSheet.Paste
    For ligne = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
        If Cells(ligne, 6) = "" Then Rows(ligne).Delete Shift:=xlUp
    Next
    For Each Img In ActiveSheet.Pictures
        Img.Delete
    Next
    With Cells.Font
        .Name = "Calibri"
        .Size = 11
    End With
    Cells(1, 1).Select

End Sub

Cela est plus fiable, mais pas garanti 100%, car dépend de beaucoup de facteurs, notamment la vitesse de connexion internet, la rapidité des processeurs, etc.

NOTA : Il est important que dans fenetre on trouve bien le nom affiché en haut de ton application excel.

Il est possible qu'il faille changer

fenetre = ThisWorkbook.Name & " - Excel"

en

fenetre = ThisWorkbook.Name & " - Microsoft Excel"

ou

fenetre = split(ThisWorkbook.Name,".")(0) & " - Microsoft Excel"

ou manuellement

fenetre = "bla bla bla"

car d'une version à l'autre c'est différent.

Sinon, voici un outil qui permet d'indiquer exactement le nom, de la fenêtre à reprendre dans la macro

5liste-fenetres.zip (413.06 Ko)

In fine, j'ai peut-être une solution !

Pourrais-tu lancer la macro, ne rien toucher pendant 15 secondes et me faire une copie d'écran sans balayer la page web avec la souris.

Je voudrais savoir si tu obtiens la m^me chose que moi dans l'ovale rouge Capture d’écran (510).png

Je viens d'essayer je ne peux utiliser ta macro je n'ai pas de fichier shell32 ...

Je cherche une solution en parallele.

Je regarde s'il n'y pas un truc a faire avec la fonction stockfilter

    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);
            }
        );
    }

Ah oui, en effet, je n'avais pas vu que tu étais sous Mac !

Une des solution à laquelle je réfléchis aussi est d'envoyer dans la barre d'adresse du navigateur

"javascript:doStocksFilter('select',this);"

mais je ne sais pas par quoi remplacer this (all ? non car this représente un objet qui a pour valeur all) je vais creuser la question !

ou alors, travailler plus directement sur

        $.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);
            }
        );

Si de ton côté tu as une réponse, je suis intéressé.

On peut inter-agir avec le sélecteur en écrivant dans la barre d'adresse

javascript:document.getElementById('stocksFilter').selectedIndex=0

puis

javascript:doStocksFilter('select',document.getElementById('stocksFilter'))

Sous excel, pour accéder à la barre d'adresse et écrire dans cette dernière j'utilise :

edit : correction ci-après

Cela fonctionne sur un bout de page html reconstitué, mais pas sur le site lui-même, même en ajoutant des temporisations !

Nouvelle version : Elle exploite le positionnement de la souris par excel.

ATTENTION : il ne faut surtout pas toucher à la souris et laisser le process se dérouler jusqu'au bout (~20 secondes)

NOTA : il faut d'abord calibrer la position à atteindre,en faisant une copie d'écran du site et une exploitation de la position du menu déroulant ("dropdown") par paint par exemple.

Sub telecharger()
Dim nav As Long, url$, ligne%, posX%, posY%, Img As Object, fenetre As String

    fenetre = ThisWorkbook.Name & " - Excel"
    posX = Sheets("url").Cells(1, 2)
    posY = Sheets("url").Cells(2, 2)

    ligne = Selection.Row
    If Left(Sheets("url").Cells(ligne, 1), 4) <> "http" Then
        MsgBox "Sélectionner une url !"
        Exit Sub
    End If

    Sheets.Add After:=Worksheets(Worksheets.Count)
    MsgBox "Ne pas toucher à la souris ou au pad, le curseur va se positionner à l'endroit du menu déroulant de la page web !"
    Call SetCursorPos(posX, posY)

    url = Sheets("url").Cells(ligne, 1)
    nav = ShellExecute(0, "open", url, 0, 0, 1)
    Application.Wait (Now + TimeValue("00:00:05"))
    Call SetCursorPos(posX, posY)
    mouse_event MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, posX, posY, 0, 0
    SendKeys "{UP}"
    SendKeys "{ENTER}"
    Application.Wait (Now + TimeValue("00:00:10"))
    SendKeys "^a"
    Application.Wait (Now + TimeValue("00:00:01"))
    SendKeys "^c"
    Application.Wait (Now + TimeValue("00:00:03"))
    'SendKeys "%{F4}"
    AppActivate fenetre
    Application.Wait (Now + TimeValue("00:00:01"))

    ActiveSheet.Cells(1, 1).Select
    ActiveSheet.Paste
    For ligne = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
        If Cells(ligne, 6) = "" Then Rows(ligne).Delete Shift:=xlUp
    Next
    For Each Img In ActiveSheet.Pictures
        Img.Delete
    Next
    With Cells.Font
        .Name = "Calibri"
        .Size = 11
    End With
    Cells(1, 1).Select

End Sub

Cela est plus fiable, mais pas garanti 100%, car dépend de beaucoup de facteurs, notamment la vitesse de connexion internet, la rapidité des processeurs, etc.

J'ai fourni le fichier Excel a quelqu'un sur Windows, apres avoir cliquer sur telecharger il a ce message

l2k3

Et quand il clique sur débogage, cela indique quoi ?

Quelle sa version de windows et d'excel ? est-ce qu'il est en 32 ou 64bits ?

Je l'ai développée chez moi et j'ai un taux de réussite proche de 100%, mais là c'est VBA qui semble coincer sur une fonction !

A-t-il juste copié la macro ou a-t-il utilisé le fichier fourni qui comporte d'autres fonctions ?

Il a Office 2016 en 64bit j'ai pas demandé le debogage.

Il a clique sur la case qui contient URL investing FR puis Telecharger.

Il a telechargé le fichier sans le modifier il n'a rien copié juste essayer le fichier fourni.

Par contre pour le deuxieme fichier où il faut donner les coordonnées de la souris pour le clique je ne sais pas comment lui expliquer pour qu'il fasse le test.

Rechercher des sujets similaires à "lien direct page web"