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

VBA Discussion :

Extraire valeur dans fichier txt (avec balise html)


Sujet :

VBA

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Par défaut Extraire valeur dans fichier txt (avec balise html)
    Bonjour,

    Après plusieurs recherches de solution, sans succès,
    je souhaite extraire des valeurs à partir d'un fichier txt issu d'une fonction en VBA qui récupère le code d'une page web.

    Extrait d'un exemple de code :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <p class='titre_cadre'>toto- Hauteurs en m</p><p>&nbsp;</p><table  class='liste'><tr><th>Date</th><th>toto</th></tr><tr  bgcolor='#CCCCFF'><td>06/03/2009 22:00</td><td align='right'>0.69</td></tr><tr  bgcolor='#F2F2FF'><td>06/03/2009 21:45</td><td align='right'>0.69</td></tr><tr  bgcolor='#CCCCFF'><td>06/03/2009 21:30</td><td align='right'>0.69</td></tr><tr  bgcolor='#F2F2FF'><td>06/03/2009 21:15</td><td align='right'>0.69</td></tr><tr  bgcolor='#CCCCFF'><td>06/03/2009 21:00</td><td align='right'>0.69</td></tr><tr  bgcolor='#F2F2FF'><td>06/03/2009 20:45</td><td align='right'>0.69</td></tr>

    Je voudrais pouvoir extraire dans un autre fichier txt, les valeurs date (ex 06/03/2009 22:00) et la valeur correspondante (ex 0.69). Et donc écrire ces valeurs de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    06/03/2009 22:00
    0.69
    06/03/2009 21:45
    0.69
     
    ' etc
    Je ne sais vraiment pas comment m'y prendre. J'ai quelques connaissance en vba, mais je bloque sur le traitement de ce fichier txt pour l'extraction. Merci pour votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 37
    Par défaut
    Je pense que tu peux t'en sortir en t'inspirant de :

    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
       Dim ie As Object, temp As String
        Dim i As Long, r As Long, Resu(100, 1) As String
        Const LaPage = "Http:\\tapage.html"
        Const CetteAnnee = 2009
     
        Set ie = CreateObject("internetexplorer.application")
        ie.navigate (LaPage)
        temp = ie.Document.body.innertext
     
     
        Do
            r = r + 1
            i = InStr(i + 1, temp, "/" & CetteAnnee)
            If i = 0 Then Exit Do
            Resu(r, 0) = Mid(temp, i - 5, 16)
            Resu(r, 1) = Replace(Replace(Mid(temp, i + 33, 6), ">", ""), ";", "")
        Loop
    et ensuite tu fais ce que tu veux de resu()

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    on ne voit pas trop bien si ta difficulté est :
    1) dans la lecture/écriture d'un fichier texte
    ou
    2) en matière (le fichier texte étant lu) d'extraction de tes chaînes.

    Si 1) : les exemples de lecture et d'écriture de fichiers textes ne manquent pas sur ce forum et je te laisse y rechercher

    Si 2) : plusieurs méthodes peuvent être mises en place pour extraire tes chaînes.

    J'aime personnellement bien celle-ci (amusante) :

    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
     toto = "<p class='titre_cadre'>toto- Hauteurs en m</p><p>&nbsp;</p><table  class='liste'><tr><th>Date</th><th>toto</th></tr><tr  bgcolor='#CCCCFF'><td>06/03/2009 22:00</td><td align='right'>0.69</td></tr><tr  bgcolor='#F2F2FF'><td>06/03/2009 21:45</td><td align='right'>0.69</td></tr><tr  bgcolor='#CCCCFF'><td>06/03/2009 21:30</td><td align='right'>0.69</td></tr><tr  bgcolor='#F2F2FF'><td>06/03/2009 21:15</td><td align='right'>0.69</td></tr><tr  bgcolor='#CCCCFF'><td>06/03/2009 21:00</td><td align='right'>0.69</td></tr><tr  bgcolor='#F2F2FF'><td>06/03/2009 20:45</td><td align='right'>0.69</td></tr>"
      titi = toto
      Do While Len(titi) > 20
        Do While Not titi Like "<td>##/##/#### ##:##*"
           titi = Mid(titi, 2)
           If Len(titi) < 11 Then Exit Do
        Loop
        MsgBox Mid(titi, 5, 16)
        titi = Mid(titi, 21)
        Do While Len(titi) > 10 And Not titi Like "#*"
          titi = Mid(titi, 2)
          If titi = "" Then Exit Do
        Loop
        MsgBox Val(titi)
        titi = Mid(titi, Len(CStr(Val(titi))))
        If Len(titi) < 11 Then Exit Do
      Loop

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 149
    Par défaut
    Bonjour,
    J'ai du mal à être d'accord avec la méthode précédemment exposée, inutile de réinventer la roue quand il existe les outils fait pour :
    Il faut passer par DOM en ajoutant une référence à Microsoft HTML Object.

    Pour t'inspirer voici un exemple d'extraction qui copie le tableau dans une feuille, à toi d'adapter.

    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
        Dim hDoc As New HTMLDocument, colTable As Object, hTable As HTMLTable, r As HTMLTableRow, c As HTMLTableCell
     
        ' pour l'export       '
        Dim tmp() As String, plage As Range
        Set plage = [Feuil1!A1]
     
        ' Affecter le contenu du document
        hDoc.body.innerHTML = "<p class='titre_cadre'>toto- Hauteurs en m</p><p>&nbsp;</p><table  class='liste'><tr><th>Date</th><th>toto</th></tr><tr  bgcolor='#CCCCFF'><td>06/03/2009 22:00</td><td align='right'>0.69</td></tr><tr  bgcolor='#F2F2FF'><td>06/03/2009 21:45</td><td align='right'>0.69</td></tr><tr  bgcolor='#CCCCFF'><td>06/03/2009 21:30</td><td align='right'>0.69</td></tr><tr  bgcolor='#F2F2FF'><td>06/03/2009 21:15</td><td align='right'>0.69</td></tr><tr  bgcolor='#CCCCFF'><td>06/03/2009 21:00</td><td align='right'>0.69</td></tr><tr  bgcolor='#F2F2FF'><td>06/03/2009 20:45</td><td align='right'>0.69</td></tr>"
        ' La collection des tables du document
        Set colTable = hDoc.getElementsByTagName("table")
     
        '   Pour chaque table trouvée       '
        For Each hTable In colTable
     
            ' Extraction dans un tableau    '
            ReDim tmp(1 To hTable.Rows.Length, 1 To 1)
            For Each r In hTable.Rows
                x = x + 1
                For Each c In r.Cells
                    y = y + 1
                    If y > UBound(tmp, 2) Then ReDim Preserve tmp(1 To hTable.Rows.Length, 1 To y)
                    tmp(x, y) = c.innerText
                Next
                y = 0
            Next
     
            ' Exemple d'exportation         '
            plage.Resize(UBound(tmp), UBound(tmp, 2)) = tmp()
            x = 0
     
            ' ou extraction globale du texte'
            Debug.Print hTable.innerText
     
        Next
    PS: La méthode d'extraction globale du texte est donnée à titre indicatif dans le cas de données formatées (champs de longueur fixe)
    au cas contraire, elle n'apporte rien puisqu'elle ne fournit pas les séparateurs de champs.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Par défaut
    Bonjour,

    Je vous remercie pour toutes vos réponses. Il est vrai que je ne suis pas très à l'aise avec les chaines de caractère (débutant aussi sous VBA !). J'avais commencé à travailler avec la solution de Kilimanjaro en l'adaptant notamment dans le cas où la valeur serait > à 10.00 et pour récupérer les années sans passer par une constante (cas où les valeurs de 2 annèes seraient traitées sur le même fichier).

    La dernière solution, de Darkvader, me parait bien adaptée et me permettrait de mieux gérer ces fluctuations de valeurs et d'années. J'ai testé avec succès, maintenant faut que je vois pour supprimer les lignes inutiles notamment celles qui contiennent les autres informations de la page web récupérée, en amont du tableau. L'objectif étant de remplir des tableaux déjà existants sur lesquels des procédures sont effectuées. Je vais regarder çà de près.

    Encore un grand merci à vous tous

Discussions similaires

  1. Insertion image dans un JTextPane avec balise html img
    Par Invité dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/01/2012, 16h04
  2. Récuperation du contenu d'une variable dans un OptionPane avec balises HTML
    Par new_wave dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 09/06/2010, 17h06
  3. [Mail] Pb avec balise HTML dans PHP
    Par dionysos73 dans le forum Langage
    Réponses: 2
    Dernier message: 07/03/2007, 15h37
  4. prb retour a la ligne dans fichier txt telecharge avec php
    Par supersonicblonde dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2006, 14h20
  5. Réponses: 2
    Dernier message: 18/07/2005, 11h58

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