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 :

recup donnée internet transfert de question de THAHARDY [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut recup donnée internet transfert de question de THAHARDY
    Bonjour thahardy
    je post la réponse a ta demande sur un nouveau post
    et a l'avenir évite de polluer le fil d'une autre discussion
    merci de ta compréhension

    voila ton code
    j'ai modifié la wait IE ,on oublie souvant le "IE.busy"
    en effet parfois le readystate nous donne la main mais la page travaille encore

    j'ai modifié l'utilisation de l'object IE maintenant en late binding afin d'avoir un fichier transportable et utilisable sur tout ordi avec exel 2003 minimum sans avoir de références a activer
    j'ai tronqué aussi l'utilisation de variable object (famille "IE") pas necessaire dans ce cas présent

    j'ai mis quelques commentaire qui t'aideront a comprendre le fonctionnement
    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
    Option Explicit
    Sub WaitIE(IE As Object)
    'On boucle tant que la page n'est pas totalement chargée
        Do: DoEvents: Loop While IE.readystate <> 4 Or IE.busy
    End Sub
    Sub RechercheVBAExcel()
    'Déclaration des variables
        Dim IE As Object, matable As Object, i As Long, lignes As Object, valeur As String
        Set IE = CreateObject("internetexplorer.application")
        IE.navigate "www.google.com/finance"    'Chargement d'une page Web Google
        IE.Visible = True
        'Affichage de la fenêtre IE
        WaitIE IE    'On attend le chargement complet de la page
        With IE.document
            .all("q").Value = "VSAR"    'on inscrit le texte dans le textbox "q"
            .all("gbqfb").Click    'On click sur le  bouton
            WaitIE IE
            Set matable = .getelementsbyclassname("snap-data")(0)    'on recupere la table concernée par sa classe ,c'est la 1 ere donc l'index 0  !!!
            Set lignes = matable.getelementsbytagname("tr")    'on prent les lignes complete du tableau
            For i = 0 To lignes.Length - 1
                'on test si la premiere cellule de chaque ligne est ecrit "Mkt cap" si oui la valeur est la 2 eme cellule  de la meme ligne
                If RTrim(lignes(i).Children(0).innertext) = "Mkt cap" Then valeur = lignes(i).Children(1).innertext
            Next
        End With
        IE.Quit
        Set IE = Nothing 'On libère la variable "IE"
     
        MsgBox valeur
        End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    quand on utilise l'espion f12 de IE on remarque quelques petits détails for intéressants

    il y a moyen de simplifier ta procédure
    en effet plutôt que d'aller sur la page d'accueil "finance "
    on peut mettre les argument directement dans l'url avec Google c'est souvent comme ca
    donc on peut utiliser l'url comme ceci:
    ainsi on a plus a marquer et cliquer puisque l'on tombe sur la page de "VSAR" directement
    ensuite dans le précèdent exemple je prenais la table puis disséquais les lignes
    maintenant on prend toutes les lignes de toutes les table de la page web
    et on teste son intitulé
    et le tour est joué
    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
    Sub test()
        Dim IE As Object, matable As Object, i As Long, lignes As Object, valeur As String
        Set IE = CreateObject("internetexplorer.application")
        IE.navigate "http://www.google.com/finance?q=VSAR"   'Chargement d'une page Web Google"
        IE.Visible = True    'Affichage de la fenêtre IE
        WaitIE IE    'On attend le chargement complet de la page
     
        With IE.document
             Set lignes = .getelementsbytagname("tr")    'on prend toutes les lignes de toutes les tables de la page web
            For i = 0 To lignes.Length - 1
                'on test si la premiere cellule de chaque ligne est ecrit "Mkt cap" si oui la valeur est la 2 eme cellule  de la meme ligne
                If RTrim(lignes(i).Children(0).innertext) = "Mkt cap" Then valeur = lignes(i).Children(1).innertext
            Next
        End With
        IE.Quit
        Set IE = Nothing    'On libère la variable "IE"
        MsgBox valeur
    End Sub
    Sub WaitIE(IE As Object)
    'On boucle tant que la page n'est pas totalement chargée
        Do: DoEvents: Loop While IE.readystate <> 4 Or IE.busy
    End Sub
    beaucoup plus simple non???
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre confirmé
    Homme Profil pro
    Process Improvment
    Inscrit en
    Mai 2015
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Process Improvment
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2015
    Messages : 89
    Par défaut
    Tout d'abord un GRAND merci pour ton aide patricktoulon!
    Et permet moi de m'excuser pour la polution d'autre discussions mais je ne savais pas trop ou poster ma question..

    Ensuite effectivement dans l'idée la deuxieme solution semble plus simple cependant la recherche "VSAR" que j'avais mis au moment de commencer mon code n'était que pour tester que ce dernier fonctionnait correctement.
    Je n'aurais qu'une question; comment puis-je faire pour qu'au lieu d'avoir VSAR comme recherche comment faire pour que la recherche soit faite avec la valeur contenu dans un champs (ici le nom de sociétés enregistré dans la base) et qu'a chaque fois on extrait la valeur Market Cap de la page IE pour la rentrer/modifier dans un autre champs de la table ou on est aller chercher le texte de la recherche ?
    Je ne sais pas si j'ai ete clair mais globalement cela serait pour mettre a jour la Market cap de chaque companie enregistré dans la base. L'idée serait a termes que les market Cap soient mis a jour a chaque ouverture de la base.
    Etant tout a fait nouveau dans le domaine soyez un peu indulgent si mes questions vous semble simplissime..

    Cordialement
    TH

    Re-bonjour,
    Je répete que je suis tout a fait nouveau en VBA et Access, Mais quand je run la Macro voila ce que j'obtiens ..

    Cordialement
    Images attachées Images attachées  

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour ta capture d'écran montre que tu utilise la méthode 1
    perso je préfère la 2 elle est plus généraliste

    et pour ton problème de variable "vsar" et autre
    voici un exemple qui boucle sur une plage "a1:a10" et envoie dans l"url l'argument
    en retour la cellule juste a coté et a droite reçoit la valeur

    mais cependant si tu dois en avoir beaucoup je te suggère d'utiliser une requête (beaucoup plus rapide )
    voici un exemple avec 10 valeur a trouver a toi de mettre ces valeur en colonne A
    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
    Sub test()
      Set plage = Range("A1:A10")
     
        For Each cel In plage.Cells
        Dim IE As Object, matable As Object, i As Long, lignes As Object, valeur As String
        Set IE = CreateObject("internetexplorer.application")
        IE.navigate "http://www.google.com/finance?q=" & cel.Value  'Chargement d'une page Web Google"
        IE.Visible = True    'Affichage de la fenêtre IE
        WaitIE IE    'On attend le chargement complet de la page
     
        With IE.document
             Set lignes = .getelementsbytagname("tr")    'on prend toutes les lignes de toutes les tables de la page web
            For i = 0 To lignes.Length - 1
                'on test si la premiere cellule de chaque ligne est ecrit "Mkt cap" si oui la valeur est la 2 eme cellule  de la meme ligne
                If RTrim(lignes(i).Children(0).innertext) = "Mkt cap" Then valeur = lignes(i).Children(1).innertext
            Next
        End With
        IE.Quit
        Set IE = Nothing    'On libère la variable "IE"
       cel.Offset(0, 1) = valeur
    next
    End Sub
    sinon comme ca vite fait un exemple avec une requête admire la rapidité
    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
    Sub par_requete()
        Dim REQ, URL,i,a
        URL = "http://www.google.com/finance?q=VSAR"
        Set REQ = CreateObject("microsoft.xmlhttp")
        REQ.Open "POST", URL, False
        REQ.setRequestHeader "User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)"
        REQ.send
           With CreateObject("htmlfile")
            .write REQ.responsetext
            Set meslignes = .getelementsbytagname("TR")
            For i = 0 To meslignes.Length - 1
                For a = 0 To meslignes(i).Children.Length - 1
                     If meslignes(i).Children(a).innertext = "Mkt cap " Then valeur = meslignes(i).Children(a + 1).innertext
                Next
            Next
        End With
        MsgBox valeur
    set REQ=nothing
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre confirmé
    Homme Profil pro
    Process Improvment
    Inscrit en
    Mai 2015
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Process Improvment
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2015
    Messages : 89
    Par défaut Re
    Bonjour,
    Merci c'est sympa je vais essayer ca tout de suite.
    Juste pour etre sur; je peux utiliser la méthode de plage sur ACCESS 2010 également?
    Si oui;
    - Comment sélectionner la colone dans la table ou se trouve la variable ?
    - Comment demander a la Macro de placer la valeur trouvée dans une autre cellule de cette meme table mais sur la meme ligne ou le code a pris la variable bien évidemment ?

    Car j'ai l'impression que ton code ne marche pas sur ACCESS ou bien j'ai commis une erreur quelque part, mais dans ce cas je ne sais pas ou..

    En tout cas merci de ton aide précieuse !

    Cordialement

    TH

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    salut thahardy

    non pas sur accès a vrai dire tu est sur le forum "vba Excel" ici

    mais mis a part la sélection de cellule pour le reste ca ne doit pas trop changer
    je ne m'y suis jamais intéressé je vais regarder un peu sur acces
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Base de données internet
    Par walid_kerkoub dans le forum Bases de données
    Réponses: 10
    Dernier message: 23/09/2007, 12h20
  2. [POO] probleme recup données POO
    Par maysa dans le forum Langage
    Réponses: 5
    Dernier message: 16/04/2007, 13h14
  3. recup données recherchées par formulaire
    Par lucie31 dans le forum Access
    Réponses: 5
    Dernier message: 24/05/2006, 13h10
  4. uninitialized value in print - recup données de BDD
    Par pimousse_on_ice dans le forum SGBD
    Réponses: 13
    Dernier message: 24/02/2006, 11h42
  5. [Strategie]Pb recup données grosse table
    Par zach dans le forum JDBC
    Réponses: 32
    Dernier message: 28/01/2005, 16h08

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