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 :

Ramener le contenu du content html en vba. [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 12
    Par défaut Ramener le contenu du content html en vba.
    Bonjour,

    Ma demande porte sur : ramener le contenu d'une page web dans une cellule. J'ai bien avancé sans trop de difficulté avec les nombreux sujets dessus mais la je bloque sur la dernière étape.

    Plus précisement je souhaiterais ramener les informations en gras dans ce bout de code:


    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     <title>Cours Nordea-1 Stable Return BP EUR, Fonds Sicav Opcvm LU0227384020 - Boursorama</title>
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no" />
     <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
     <meta name="description" content="Trouvez toutes les informations sur le fonds Nordea-1 Stable Return BP EUR de Nordea : cours, performance, analyses, actualité, ... sur Boursorama" />
     <meta name="sid" content="156,E" />
     <meta name="keywords" content="Nordea-1 Stable Return BP EUR, Nordea, Claus Vorm,Robert Næss, LU0227384020, fonds, opcvm, FCP, sicav, gestion collective, Mixtes Euro, Allocation EUR Modérée - International, Fonds etrangers, Fonds commun de placement" />
    Ma macro bloque

    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
    i = 2
       'Chargement d'une page Web 
       IE.navigate "http://www.boursorama.com/"
     
       'Affichage de la fenêtre IE
       IE.Visible = False
     
      'On attend le chargement complet de la page
       WaitIE IE
     
       For i = 1 To 10
      DoEvents
       Next
     
        'On pointe le membre Document
       Set IEDoc = IE.document
     
      'On pointe notre Zone de texte de depart
       Set InputBoursoZoneTexte = IEDoc.all("search-query")
     
     'On définit le texte que l'on souhaite placer à l'intérieur ( ici : LU0227384020)
       InputBoursoZoneTexte.Value = Sheets("Export").Cells(i, 2).Value
     
    'On effectue une recherche
      Set InputBoursoBouton = IEDoc.all("search-spinner-submit")
     InputBoursoBouton.Click
     
       WaitIE IE
     '----------------C EST OK JUSQU A LA !
     
     Set definition = IEDoc.all("Keywords")
     Sheets("Export").Cells(i, 5).Value = definition
     
    texte1 = definition.getAttribute("content")
     Sheets("Export").Cells(i, 6).Value = texte1
    et avec ca dans ma colonne 5 j'ai : [object HTMLMetaElement]
    dans ma colonne 6 j'ai rien. ce que je souhaite c est le texte dans la colonne 6 ( de ramener definition en colonne 5 c'était pour voir son contenu )


    J'espere avoir été clair sinon je peux préciser certain points.

    aussi, au lieu d' utiliser "getattribute" pour ramener le texte j'ai esayé aussi InnerText et .Content Mais sans succès .
    Merci d'avance a vous pour votre aide et votre temps a me rendre ce service.

    Alfiedx

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    le texte étant dans une propriété précise - content - d'un élément particulier, il n'est donc pas récupérable ailleurs …
    Mais encore faut-il synchroniser l'exécution du code non seulement avec le chargement de la page initiale
    mais aussi avec la mise à jour du Document après le click avant de cibler enfin l'élément
    et accéder à sa propriété comme dans les exemples des discussions de ce forum …
    C'est le problème du code précédent, il a déjà terminé alors que la mise à jour n'a pas commencé !

    Première démonstration en déclaration tardive (sans cocher de référence, consulter le chapitre II-B de
    l'excellent tutoriel Interaction avec Internet Explorer via VBA Excel), résultat dans la fenêtre Exécution :

    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
    Sub Demo1()
    Z! = Timer
        With CreateObject("InternetExplorer.Application")
            .Navigate "http://www.boursorama.com/"
            While .Busy Or .ReadyState < 4:  DoEvents:  Wend
     
            With .Document
                 .all("search-query").value = "LU0227384020"
                 .all("search-spinner-submit").click
                 While .ReadyState <> "complete":  DoEvents:  Wend
                 T$ = .all("keywords").content
            End With
     
            .Quit
        End With
    Debug.Print vbLf; "Demo1 : "; Format(Timer - Z, "0.000s"); vbLf; T
    End Sub
    L'autre voie possible en pilotant IE pouvant être un peu plus rapide (relatif car piloter IE étant la solution de derniers recours
    car la plus lente, la plus contraignante et la moins fiable !) est de ne pas attendre la mise à jour complète du Document
    mais d'extraire directement le texte depuis la bonne section du code - tiens en observant ce dernier, laquelle est-ce ? -
    une fois chargé via des fonctions VBA manipulant les chaînes de caractères

    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  3. #3
    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 heu
    Bonjour marc
    on peu eviter avec ce site 1 attente wait puisque il accepte la methode "post"/"get"

    l'object de la recherche dans l'url

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    Z! = Timer
    With CreateObject("InternetExplorer.Application")
    .navigate "http://www.boursorama.com/recherche/index.phtml?q=LU0227384020&search-spinner-submit=1"
    While .ReadyState <> 4:  DoEvents:  Wend
      T$ = .document.all("keywords").Content
    .Quit
    End With
    Debug.Print vbLf; "Demo1 : "; Format(Timer - Z, "0.000s"); vbLf; T
    end sub
    resultat en moins d'une seconde et demie chez moi !
    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

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut Heu …


    Salut Patrick !

    Certes mais tu brûles les étapes !
    Déjà il doit comprendre pourquoi son code ne peut fonctionner : la charrue avant les boeufs ‼

    Test de ton code : 3,574s … Un peu plus rapide que mes deux démos sous IE mais bien moins qu'une requête !

  5. #5
    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
    oui je sais , mais c'est justement pour ne pas brûler les étapes que je n'ai pas proposé une requete
    mais je l'avais fait et c'est quazi immédiat la page étant pas trop lourde

    re
    de toute facon a regarder de plus pret son code initiale avait des erreurs de principe

    ici i = 2
    ensuite il boucle je sais pas trop pourquoi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 10
      DoEvents
       Next
    a partir de la i=10
    ensuite
    je ne suis pas sur que ca soit bien la cellule(10,5) qu il aurait voulu cibler sinon a quoi bon le "i=2" en debut de sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set definition = IEDoc.all("Keywords")
     Sheets("Export").Cells(i, 5).Value = definition
    ici pareil !!!!! pas sur non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    texte1 = definition.getAttribute("content")
     Sheets("Export").Cells(i, 6).Value = texte1
    enfin visiblement c'est assez confu, il va devoir rebucher le tuto de qwazerty et surtout regarder sur le forum les discussions similaires car on ne trouve pas tout dans le tutoriel
    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

  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
    re je viens de tester le state 3 et ca fonctionne a 90% alors j'ais créé une 2 eme do/loop sur l'object recherché
    résultat chez moi 0.965s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    Z! = Timer
    With CreateObject("InternetExplorer.Application")
    .navigate "http://www.boursorama.com/recherche/index.phtml?q=LU0227384020&search-spinner-submit=1"
    .Visible = True
    Do: DoEvents: Loop Until .readystate = 3'on attends pas le chargement complet !!!
    Do: Set meta = .document.all("keywords"): Loop While meta Is Nothing ' on attend que l'element existe 
       t$ = meta.Content
    .Quit
    End With
    Debug.Print vbLf; "Demo1 : "; Format(Timer - Z, "0.000s"); vbLf; t
    End Sub
    voila aussi rapide rapide que la requête
    methode semblable a celle que tu affectionne (une boucle sur le ".length")
    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. [HTML] comment integrer un contenu flash en html
    Par piogo113 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 31/05/2007, 16h57
  2. Email au format HTML via VBA
    Par DPhBxl dans le forum Access
    Réponses: 10
    Dernier message: 25/01/2007, 15h24
  3. [HTML] Afficher un contenu XML en HTML
    Par kbledos dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/11/2006, 18h02
  4. Réponses: 12
    Dernier message: 10/06/2006, 19h07
  5. XSL : Problème pour visualiser le contenu de <content>
    Par externe dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 31/12/2005, 16h44

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