IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Selections de valeurs sur explorer depuis vba


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous,

    Je débute dans la manipulation d'explorer via VBA et voici mon souci : je dois etraire des données sur ce site http://www.swapsinfo.org/charts/swap...-risk-activity
    Dans la barre de recherche, par exemple, je veux selectionner les nominaux d'ARCELORMITTAL, il faut donc le taper, puis appuyer sur entréE de sorte que les valeurs que propose le site soit selectionnables, icI on aura ARCELORMITTAL et ARCELORMITTAL FINANCE.

    Mais depuis VBA impossible de faire apparaitre la liste de valeur disponibles, pourtant je simule les meme commande que sur le site directement : on tape la valeur ARCELORMITTAL, on clique sur la même barre de recherche, puis sur entrée et les deux valeurs apparaissent.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Sub connexion()
     
        Dim IE As InternetExplorer
        Dim IEdoc As Object
        Dim DOCelement As Object
        Dim InputISDAZoneTexte As HTMLInputElement
        Dim InputISDA1Bouton As HTMLInputElement
        Dim InputISDA2Bouton As HTMLInputElement
     
     
        Set IE = New InternetExplorer
        IE.navigate ("http://www.swapsinfo.org/charts/swaps/market-risk-activity")
        IE.Visible = True
     
         ' attente de fin de chargement
        Do Until IE.readyState = 4
            DoEvents
        Loop
     
        Set IEdoc = IE.Document
     
     
        Set InputISDAZoneTexte = IEdoc.all("suggest")
     
     
     
       'On définit le texte que l'on souhaite placer à l'intérieur
     
       InputISDAZoneTexte.Value = "ARCELORMITTAL"
       InputISDAZoneTexte.Focus
       InputISDAZoneTexte.Click  ' c'est ici que ça cloche
       Application.SendKeys "{ENTER}", True
       Application.Wait Now + TimeValue("0:0:2")
       Application.SendKeys "{ENTER}", True
     
     
        Do Until IE.readyState = 4
        DoEvents
        Loop
     
       Set InputISDA1Bouton = IEdoc.all("submit")
       InputISDA1Bouton.Click
     
       Set InputISDA2Bouton = IEdoc.all("export-data")
       InputISDA2Bouton.Click
     
    IEdoc.Focus
     
    Application.Wait Now + TimeValue("0:0:2")
    Application.SendKeys "%{S}"
     
    Set IE = Nothing
    Set IEdoc = Nothing
     
     
    End Sub
    Si quelqu'un peut m'aider ce serait super, car même en utiliant les sendkeys il ne se passe rien. Je n'ai pas mis le code html qui est disponible sur le site.

    Merci d'avance.

    Pour plus de précisions, il y a deux solutions possibles :

    - passer par les sendkeys pour répliquer les actions souris/clavier depuis vba
    - passer par le code javascript et récuperer les clés associées au string, par exemple pour arcelormittal c'est 82. Quand on clique sur "update data" on executela requete suivante : http://www.swapsinfo.org/charts/swap...it=Update+Data où l'on voit bien le "82" mais à ce moment j'aurais besoin d'une transco de tous les string en clés et je ne sais pas comment faire non plus.

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu peux construire ta recherche directement sur l'url après avoir construit une base de n° des actions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Url="http://www.swapsinfo.org/charts/swaps/market-risk-activity?date_start=" & Format(DteDebut,"yyyy-mm-dd") &"&date_end=" & Format(DteFin,"yyyy-mm-dd") &"&products=snre%2Cindex&suggest=&search=" & NumAction &"&type=&submit=Update+Data
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Hello, merci pour ta réponse.
    Justement j'ai besoin d'automatiser donc je suis à la recherche de la liste des nombres qui correspondent aux différents titres, comme arcelormittal qui vaut 82 mais ca serait trop long de les obtenir en rentrant a chaque fois sur le site le nom du titre en question (j'ai plus de 200 titres a extraire).
    Sais-tu comment je peux obtenir la liste de tous les titres avec leur numéros associés, ce que tu nommes base avec numéro des actions, de façon rapide ?

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub Remplissage()
    Dim IE As Object, Choix As Object
    Dim S As String
    Dim i As Integer
     
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
     
    For i = 1 To 200
        DoEvents
        IE.navigate "http://www.swapsinfo.org/charts/swaps/market-risk-activity?date_start=2016-02-15&date_end=2017-02-15&products=snre%2Cindex&suggest=&search=" & i & "&type=&submit=Update+Data"
        Do Until IE.readyState = 4
            DoEvents
        Loop
        Set Choix = IE.document.getElementsByClassName("wrapper charts")
        Set Choix = Choix(0).getElementsByTagName("aside")
        Set Choix = Choix(0).getElementsByTagName("fieldset")
        Set Choix = Choix(2).getElementsByTagName("div")
        Set Choix = Choix(6).getElementsByTagName("ul")
        Set Choix = Choix(0).getElementsByTagName("li")
        If Not Choix Is Nothing Then S = Choix(0).innertext
        Feuil1.Cells(i, 1).Resize(, 2) = Array(i, S)
    Next i
    IE.Quit
    Set IE = Nothing
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Merci encore pour ta réponse, mais le souci c'est que je ne connais pas les titres associés au numéro et les titres que je recherche ne sont pas ceux associés au numéro de 1 à 200, j'ai seulement les noms et je dois associer les numéros. En fait c'est l'opération inverse qu'il faudrait : entrer une liste de titre en input et obtenir une liste de numéros en output :-)
    Je pourrais aussi utiliser ton code mais le site contient surement plus de 10000 titres et le programme risque de tourner tres tres longtemps. Pense tu que l'opération inverse est réalisable ?


    Finalement le code tourne très vite, c'est super, merci beaucoup pour le temps que tu as pu me consacrer, c'est vraiment enorme. Je vais obtenir toute la base de données comme ça.

    Bien cordialement.

    Juste pourrais-tu stp m'expliquer à quoi correspondent les parametres 0, 2 et 6 dans "choix" ?

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Le 0,2 et 6, il faudra analyser le code source de la page pour retrouver le nom de l'action (entreprise)

    Sinon, on peut grignoter encore du temps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub Remplissage2()
    Dim N As Integer, i As Integer
    Dim Tb() As String
    Dim Req As Object
     
    N = 2000
    ReDim Tb(1 To N, 1 To 2)
    Set Req = CreateObject("microsoft.xmlhttp")
    With Req
        For i = 1 To N
            DoEvents
            .Open "GET", "http://www.swapsinfo.org/charts/swaps/market-risk-activity?date_start=" & Format(Now, "yyyy-mm-dd") & "&date_end=" & Format(Now, "yyyy-mm-dd") & "&products=snre%2Cindex&suggest=&search=" & i & "&type=&submit=Update+Data", False
            .Send
            If .Status = 200 Then
                With CreateObject("htmlfile")
                    .Body.InnerHtml = Req.Responsetext
                    Tb(i, 1) = i
                    Tb(i, 2) = .getelementsbytagname("div")(7).getelementsbytagname("li")(8).innertext
                End With
            End If
        Next i
    End With
    Set Req = Nothing
    Feuil1.Cells(1, 5).Resize(N, 2) = Tb
    End Sub
    Le 7 et le 8 découlent aussi du code html de réponse à la requête
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Février 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Février 2017
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup,

    J'ai en effet analysé le code HTML pour comprendre les index c'est parfait pour la premiere sub :-) La seconde j'ai un peu plus de mal, que fait exactement .Body.InnerHtml = Req.Responsetext on pointe sur body et toutes ses balises et... ?
    Puis ici .getelementsbytagname("div")(7).getelementsbytagname("li")(8).innertext on prend le texte de l'objet contenu dans la 9e balise li depuis la 8e balise div, elle même depuis la balise body ?

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Oui c'est ça. Mais attention si la structure de la page change d' un iota, le code retournerait autre chose que maintenant. Très dangereuse comme approche. Les 2 méthodes
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Selection plusieurs valeurs sur formulaire
    Par hboisteau dans le forum IHM
    Réponses: 6
    Dernier message: 06/05/2015, 09h32
  2. Select 10 valeurs sur la même colonne
    Par Ticoche dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/01/2009, 17h47
  3. [VBA] Selected et requery sur zone de liste
    Par Mig21 dans le forum VBA Access
    Réponses: 2
    Dernier message: 16/04/2007, 21h26
  4. [VBA-E] RechercheV si changement de valeur sur une cellule
    Par bonilla dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/01/2007, 16h22
  5. [VBA-E] Selection de valeur uniquement
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/05/2006, 23h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo