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 :

Extraire des données d'une page intranet en VBA sous Excel [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 503
    Points : 127
    Points
    127
    Par défaut Extraire des données d'une page intranet en VBA sous Excel
    Bonjour,

    J'ai regardé le tutoriel, mais je ne pense pas avoir trouvé mon cas ci-dessous :
    https://qwazerty.developpez.com/tuto...-et-vba-excel/

    Merci de votre aide,

    Je cherche à récupérer la donnée de la class "NBLUE2" ci-dessous :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <div class="mainFont" id="mon_id">
    <span class="NBLUE2" vl="80" vc="27" vr="3" vp="290" vt="O">Logmode:gdf454f5dg45dfg Systeme:DSHGFDHGFB458978</span>
    <span vl="1" vc="107" vr="3" vp="370" vt="A" autoskip="1"></span>
    <span class="NGREEN1" vl="25" vc="108" vr="3" vp="371" vt="O" autoskip=""></span>
    <span vl="1" vc="1" vr="4" vp="396" vt="A"></span>
    <span id="sb_relay">MonSysteme</span>
    <span id="sb_print"></span>
    <span id="sb_insert"></span>
    <span id="sb_rtl"></span>
    <span id="sb_cursor">12,40</span>
    </div>

    Code VBA : 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
    'Déclaration des variables
    Dim IEDoc As HTMLDocument
    Dim IE As Object
    Set IE = CreateObject("internetexplorer.application")
     
    IE.navigate "https://emulation.com/mapage.htm"
    IE.Visible = True
    WaitIE IE
    Set IEDoc = IE.document
     
    'Dim HTMLElementStandard As HTMLGenericElement
    Dim Texte1 As String
    Dim Texte2 As String
     
        Texte1 = (IEDoc.getElementsByClassName("mainFont")(1).innerText)
        MsgBox Texte1, Title:="Texte 1 extrait de la page"
     
        Texte2 = (IEDoc.getElementsByClassName("NBLUE2")(1).innerText)
        MsgBox Texte2, Title:="Texte 2 extrait de la page"

    Le texte 1 me donne tout le DIV...

    J'ai un message d'erreur pour le texte 2 :
    Erreur d'exécution 91 : variable objet ou variable de bloc with non définie

  2. #2
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 503
    Points : 127
    Points
    127
    Par défaut
    J'essaie de faire plus simple :

    Voici mon HTML avec le script qui fonctionne bien :
    Première alerte : Nombre de li dans courses : 3
    Deuxième alerte : Nombre de li dans le document : 6

    Code HTML : 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
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    </head>
    <body>
     
    <h1>A ACHETER </h1>
    <p title="un petit rappel"> N'oublies pas d'acheter cela : </p>
    <ul id="courses" class="ul_listes">
    	<li>Une conserve de Haricots</li>
    	<li>Du fromage</li>
    	<li>Du lait</li>
    </ul>
    <p title="autre rappel"> il faut aussi acheter : </p>
    <ul id="course2">
    	<li>Une conserve de Fruits</li>
    	<li>Du saucisson</li>
    	<li>Du Yaourt</li>
    </ul>
     
    <script type="text/javascript">
    alert('Nombre de li dans courses : '+document.getElementById("courses").getElementsByTagName("li").length);
    alert('Nombre de li dans le document : '+document.getElementsByTagName("li").length);
    </script>
     
     
    </body>
    </html>

    J'essaie de faire la même chose et de compter via un fichier Excel et VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub parsehtml_test()
    Dim http As Object, html As New HTMLDocument, topics As Object, titleElem As Object, detailsElem As Object, topic As HTMLHtmlElement
    Dim i As Integer
    Dim nb_liste As Integer
     
    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", "C:\User\Desktop\test_parametres.html", False
    http.send
    html.body.innerHTML = http.responseText
    Set topics = html.getElementsByClassName("ul_listes")
    i = 0
     
    Set Helem.Value = html.getElementsByTagName("li").Length
    Debug.Print ie.document.querySelectorAll("li").Length
    Dans les deux cas :
    > Erreur d'exécution 424 : Objet requis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set allresults = html.getElementsByClassName("ul_listes")(0).Children
    MsgBox allresults, Title:="Nombre"
    > Message = Object

  3. #3
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    Salut,
    Dans ton premier code tu mets un indice de tableau à 1 alors qu'il commence à 0. Voici un code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub ParseHtml()
    'Déclaration des variables
    Dim IEDoc As HTMLDocument
    Dim IE As Object
    Dim Texte2 As String
    Set IE = CreateObject("internetexplorer.application")
    IE.navigate "C:\Test\parseHtmlFile.html"
    IE.Visible = True
    WaitIE IE
    Set IEDoc = IE.document
       Texte2 = IEDoc.getElementsByClassName("NBLUE2")(0).innerText
        MsgBox Texte2, Title:="Texte 2 extrait de la page"
    End Sub
    dans ton deuxième code VBA, cela ne fonctionne pas car il n'y a pas de méthode getElementsByClassName pour l'objet html. Tu peux utiliser l'id à la place comme ceci par exemple :
    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
    Public Sub parsehtml_test()
    Dim http, html, LiElem, CoursesElem, LiCourses As Object
    Dim i As Integer
    Dim nb_liste As Integer
     
    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", "C:\Test\compterLi.html", False
    http.send
    Set html = CreateObject("HTMLFile")
    html.body.innerHTML = http.responseText
    Set CoursesElem = html.getElementById("courses")
    i = 0
    Set LiElem = html.getElementsByTagName("li")
    Debug.Print "Nb Li dans document : "; LiElem.Length
    Set LiCourses = CoursesElem.getElementsByTagName("li")
    Debug.Print "Nb Li dans courses : "; LiCourses.Length
    End Sub
    Nb Li dans document : 6
    Nb Li dans courses : 3


    Cordialement, Nullosse le plus nul des programmeurs

  4. #4
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 503
    Points : 127
    Points
    127
    Par défaut
    Merci Nullosse !
    Cela fonctionne parfaitement :

    Si je veux tous les "li" des listes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    'FONCTIONNE BIEN pour tous les LI
    Set LiElem = html.getElementsByTagName("li")
    allresults2 = LiElem.Length
    Set CoursesElem = html.getElementById("courses")
    Set LiCourses = CoursesElem.getElementsByTagName("li")
    allresults = LiCourses.Length
    i = 0
    ligne_1 = 2 ' deuxième ligne dans Excel
    Nb_Total = allresults2 - 1
    For i = 0 To Nb_Total
    Sheets(1).Cells(ligne_1, 1).Value = html.getElementsByTagName("li")(i).innerText
    ligne_1 = ligne_1 + 1
    Next
    Si je ne veux que ceux de l'id course2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ' Que les LI de l id course2 :
    Set CoursesElem = html.getElementById("course2")
    Set LiCourses = CoursesElem.getElementsByTagName("li")
    allresults = LiCourses.Length
    i = 0
    ligne_1 = 2 ' deuxième ligne dans Excel
    Nb_Total = allresults - 1
    For i = 0 To Nb_Total
    Sheets(1).Cells(ligne_1, 1).Value = LiCourses(i).innerText
    ligne_1 = ligne_1 + 1
    Next

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

Discussions similaires

  1. Extraire des données d'une page Web en VBA sous Excel
    Par BEMI dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/05/2009, 06h24
  2. [WD11] extraire des données d une page internet
    Par cdevl32 dans le forum WinDev
    Réponses: 2
    Dernier message: 24/08/2007, 20h23
  3. [DOM] extraire des données d'une page xhtml
    Par Louis-Guillaume Morand dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 06/06/2007, 00h36
  4. [RegEx] Comment extraire des données d'une page HTML ?
    Par taliesin26 dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2006, 12h39
  5. [Système] Extraire des données d'une page web
    Par nazoreen dans le forum Langage
    Réponses: 17
    Dernier message: 22/03/2006, 21h38

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