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 :

Extraction d'un tableau web avec des erreurs de format [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Extraction d'un tableau web avec des erreurs de format
    Bonjour à tous,

    J'ai parcouru quelques forums à la recherche d'une solution mais je n'arrive pas à en trouver.
    Je vais brièvement expliquer mon problème:
    Je cherche à extraire un tableau d'une page web. Jusque là tout va bien mais je rencontre 2 problèmes:
    - les chiffres sont censés avoir des virgules et ils sont reportés sans virgules dans mon tableau
    - j'ai des valeurs qui apparaissent avec un saut de ligne (ceux qui sont entre les balises <td class="high-rouge ou vert">).
    Comment je pourrais faire pour avoir tous les nombres du même format pour que je puisse faire un graphique.
    Voici ma macro en question:
    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
    Sub Importer_tableau()
     
    Dim IE As InternetExplorer
    Dim maPageHtml As HTMLDocument
    Dim Htable As IHTMLElementCollection
    Dim maTable As IHTMLTable
    Dim j As Integer, i As Integer
     
     
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = False
     
    Select Case MsgBox("Bonjour, vous allez être renvoyé vers une liste de cours, veuillez rentrer l'URL du cours qui vous intéresse dans la fenêtre suivante (cours puis historique)", vbOKCancel, "Niveaux de Fibonacci")
    Case vbOK
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.navigate "http://investir.lesechos.fr/actions/cotations/cours-az.html"
    URL = Application.InputBox("Veuillez copier l'URL ici", "Niveaux de Fibonacci", "")
    Case vbCancel
    Exit Sub
    End Select
     
    IE.navigate URL
        Do Until IE.readyState = READYSTATE_COMPLETE
        DoEvents
    Loop
     
    Set maPageHtml = IE.document
    Set Htable = maPageHtml.getElementsByTagName("table") 'objet type table
    Set maTable = Htable(0) 'premier tableau dans la page Web
    For i = 1 To maTable.Rows.Length 'boucle sur toutes les lignes du tableau
    For j = 1 To maTable.Rows(i - 1).Cells.Length 'boucle sur les cellules dans chaque ligne
    Cells(i, j) = maTable.Rows(i - 1).Cells(j - 1).innerText
     
    Next j
    Next i
     
    End Sub
    Voici en lien un exemple de tableau http://investir.lesechos.fr/cours/hi...0404,isin.html

    Merci d'avance pour vos réponses

  2. #2
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut



    'soir !

    Je viens de tester dans un nouveau classeur : aucun des deux soucis exposés, affichage correct …



    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je viens d'essayer dans un nouveau classeur et j'ai toujours le même soucis.
    Merci pour la réponse néanmoins

  4. #4
    Membre averti Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Points : 394
    Points
    394
    Par défaut
    Je confirme Marc-L. Je viens de tester aussi, tout est parfait.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je ne comprends pas d'où ça peut venir alors. De la version Excel ? De la version d'IE ?

  6. #6
    Membre averti Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Points : 394
    Points
    394
    Par défaut
    Je précise que moi j'ai testé juste le copier coller pour voir déjà si ça remet les données sous le même format.

  7. #7
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Perso je ferais plutôt comme ç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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub Importer_tableau()
     
    Dim IE As Object
    Dim Table As Object
    Dim j As Integer, i As Integer
     
    Select Case MsgBox("Bonjour, vous allez être renvoyé vers une liste de cours, veuillez rentrer l'URL du cours qui vous intéresse dans la fenêtre suivante (cours puis historique)", vbOKCancel, "Niveaux de Fibonacci")
    Case vbOK
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.navigate "http://investir.lesechos.fr/actions/cotations/cours-az.html"
    URL = Application.InputBox("Veuillez copier l'URL ici", "Niveaux de Fibonacci", "")
    Case vbCancel
    Exit Sub
    End Select
     
    IE.navigate URL
        Do Until IE.readyState = 4
        DoEvents
    Loop
     
    Set Table = IE.document.all("tablehisto")
    With CreateObject("htmlfile")
        If .parentWindow.clipboardData.setData("Text", Table.outerHTML) Then
            With Sheets(1)
                .Activate
                .UsedRange.Clear
                .Cells(1, 1).Select
                .Paste
            End With
        End If
    End With
     
    End Sub
    En plus tu utilise CreateObject alors tu n'as pas besoin de typer tes variables !

    Et pour quelque chose de 100x plus rapide en chargement :
    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 tab2()
        Dim pXmlHttp As Object
        Dim strPostData As String
     
        Set pXmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
     
        pXmlHttp.Open "GET", "http://investir.lesechos.fr/cours/historique-action-accor,xpar,ac,fr0000120404,isin.html", False
        pXmlHttp.send
     
     
        Dim HTMLdoc As Object
        Set HTMLdoc = CreateObject("HTMLFile")
        HTMLdoc.body.innerHTML = pXmlHttp.ResponseText
     
        With CreateObject("htmlfile")
        If .parentWindow.clipboardData.setData("Text", HTMLdoc.all("tablehisto").outerHTML) Then
            With Sheets(1)
                .Activate
                .UsedRange.Clear
                .Cells(1, 1).Select
                .Paste
            End With
        End If
    End With
    End Sub
    Si tu veux lister toi même toutes les actions :
    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
    Sub list()
        Dim pXmlHttp As Object
        Dim HTMLdoc As Object
     
        Set HTMLdoc = CreateObject("HTMLFile")
     
        Set pXmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
     
        Dim page As Integer
        Dim row As Object
        Dim rgn As Range
        Set rgn = [A1]
     
        Do
            page = page + 1
            pXmlHttp.Open "GET", "http://investir.lesechos.fr/actions/cotations/cours-az.html/page" & page, False
            pXmlHttp.send
     
            HTMLdoc.body.innerHTML = pXmlHttp.ResponseText
            For Each row In HTMLdoc.all("tablecotation").tbodies(0).Rows
                With ActiveSheet
                    .Hyperlinks.Add Anchor:=rgn, _
                    Address:="http://investir.lesechos.fr/cours/historique-" & Split(row.Cells(0).Children(0).pathname, "/")(1), _
                    TextToDisplay:=row.Cells(0).Children(0).Children(0).innerText
                End With
     
                Set rgn = rgn.Offset(1)
            Next
        Loop While HTMLdoc.all("tablecotation").tbodies(0).Rows.Length > 0
    End Sub
    Tu pourrais ensuite mettre ça dans un UserForm l’utilisateur choisi directement l'action et tu va chercher ensuite avec le code précédent
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par cerede2000 Voir le message
    Perso je ferais plutôt comme ç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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub Importer_tableau()
     
    Dim IE As Object
    Dim Table As Object
    Dim j As Integer, i As Integer
     
    Select Case MsgBox("Bonjour, vous allez être renvoyé vers une liste de cours, veuillez rentrer l'URL du cours qui vous intéresse dans la fenêtre suivante (cours puis historique)", vbOKCancel, "Niveaux de Fibonacci")
    Case vbOK
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.navigate "http://investir.lesechos.fr/actions/cotations/cours-az.html"
    URL = Application.InputBox("Veuillez copier l'URL ici", "Niveaux de Fibonacci", "")
    Case vbCancel
    Exit Sub
    End Select
     
    IE.navigate URL
        Do Until IE.readyState = 4
        DoEvents
    Loop
     
    Set Table = IE.document.all("tablehisto")
    With CreateObject("htmlfile")
        If .parentWindow.clipboardData.setData("Text", Table.outerHTML) Then
            With Sheets(1)
                .Activate
                .UsedRange.Clear
                .Cells(1, 1).Select
                .Paste
            End With
        End If
    End With
     
    End Sub
    En plus tu utilise CreateObject alors tu n'as pas besoin de typer tes variables !
    Merci beaucoup ! C'est nickel, exactement ce que je voulais

    Citation Envoyé par cerede2000 Voir le message
    Et pour quelque chose de 100x plus rapide en chargement :
    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 tab2()
        Dim pXmlHttp As Object
        Dim strPostData As String
     
        Set pXmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
     
        pXmlHttp.Open "GET", "http://investir.lesechos.fr/cours/historique-action-accor,xpar,ac,fr0000120404,isin.html", False
        pXmlHttp.send
     
     
        Dim HTMLdoc As Object
        Set HTMLdoc = CreateObject("HTMLFile")
        HTMLdoc.body.innerHTML = pXmlHttp.ResponseText
     
        With CreateObject("htmlfile")
        If .parentWindow.clipboardData.setData("Text", HTMLdoc.all("tablehisto").outerHTML) Then
            With Sheets(1)
                .Activate
                .UsedRange.Clear
                .Cells(1, 1).Select
                .Paste
            End With
        End If
    End With
    End Sub
    Par contre je ne comprends ce code. Comment faites vous pour avoir que le tableau ?
    Comment je peux faire pour l'adapter à mon code (avec l'InputBox) ?

  9. #9
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Regarde mon code qui liste les actions avec leurs liens historique
    Tu prends ça, tu fait une petite fenêtre, l'utilisateur seletionne une action directement dans la fenêtre et tu va chercher le tableau correspondant.

    Pour récupérer le tableau direct je passe pas le presse papier et la fonctionnalité Excel qui permet de coller du contenu HTML directement
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'en reste bouche bé, je n'avais même pas penser à faire ça comme ça et honnêtement j'aurais jamais trouvé comment le coder.
    Merci beaucoup, vraiment !

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

Discussions similaires

  1. [Tableaux] Tableau associatif avec des array
    Par Piccolo_son dans le forum Langage
    Réponses: 6
    Dernier message: 18/12/2007, 08h23
  2. [SOAP]Développement d'une IHM Web Avec des Web Services
    Par aPicaud dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 26/09/2007, 10h59
  3. Réponses: 1
    Dernier message: 26/04/2007, 13h46
  4. un tableau multidimentionnel avec des variable de type different ?
    Par sebsmax dans le forum Collection et Stream
    Réponses: 25
    Dernier message: 18/01/2007, 14h30
  5. Réponses: 4
    Dernier message: 05/12/2006, 11h43

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