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 :

Ouvrir un fichier HTML spécifique et en copier des données [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut Ouvrir un fichier HTML spécifique et en copier des données
    Bonjour,
    Je cherche désespérément une aide sur mon programme VB. Je m'explique je cherche à retrouver un fichier spécifique dont l'extension est HTML (je veux ouvrir le dernier en date à chaque fois) et copier certaines données qui sont dessus sur mon tableau. Je précise bien que je ne veux pas tout ce qu'il y a sur le fichier HTML, mais que certaines parties et les copier à différents emplacements sur excel. Actuellement je n'arrive déjà pas à copier l'intégralité...
    Je dois avouer que mon niveau VB ce limite aux quelques heures que j'ai passé à coder en Ruby (RGSS2 et 3), c'est à dire pas grand chose.
    Si quelqu'un peu m'aider je lui en serait plus que reconnaissant.

    En attendant voila le début de mon code (j'espère que personne fera de crise cardiaque en le lisant) :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Sub Macro1()
     
    'Variables x_Date, f, IE, Fichier
    Dim x_Date As String
    Dim f As String
    Dim IE As Object
    Dim Fichier As File
     
    'Création de la boite de dialogue pour entrer la date voulue
    Worksheets("feuil3").Range("A2") = InputBox("Indiquer la date voulue (JJ/MM/AAAA)")
     
    'Recherche du fichier
    x_Date = Range("A2").Value
     
    With oFS
        .NewSearch
        .FileType = msoFileTypeWebPages
        .LookIn = "C:\Chemin"
        With .PropertyTests
            .Add Name="Modifié le", _
            Condition=msoConditionOn, _
            Value=x_Date, _
            .Execute
       EndWith
     
        With .PropertyTests
            .Add Name="Nom", _
            Condition=msoConditionIncludesFormsOf, _
            Value="CampagneStatistiques", _
            .Execute
        EndWith
     
        For i = 1 To .FoundFiles.Name
            MsgBox .FoundFiles(i)
        Next i
     
    End With
     
    'Récupération du fichier dans IE
    Set Fichier = .FoundFiles(i)
    Set IE = CreateObject("InternetExplorer.application")
    IE.navigate ("C:\Chemin" & "\" & Fichier)
    IE.Visible = True
     
    'Copier les données depuis IE
    Application.SendKeys "^a^c"
    IE.Quit
    Sheets("Feuil3").Select
    Range("C1").Select
    Application.SendKeys "^v"
     
    End Sub

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je suppose que les "maniaques" de l'utilisation de IE avec VBA (cela existe pour vrai, mais ce n'est pas moi), vont te demander l'adresse (ou le code-source) de la page.

    Ceci dit, pour t'épargner les SendKeys, tu peux ouvrir ta page HTML directement dans Excel et faire tes recherches en utilisant Excel.

  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


    dans ton cas ce sont des fichiers html local si j'ai bien compris

    tu utilise control A et controlV avec sendkeys ,ce qui a pour consequence de copier tout le document ce qui ne correspond pas a ta demande

    1 je ne vois pas l'interet d'utiliser l'application internet explorer dans ton cas

    tu pourrait tre bien utiliser la fonction open et ouvrir comme un fichier texte pour en recupérer le contenu (codesource de la page)
    et ensuite te servir d'un documenthtml virtuel (en memoire et explorer le document avec les fonction IE(librairie)

    un petit exemple de mon point de vue
    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
    Sub test()
        Dim laChaine As String, x, fichier As String, matable As Object
        fichier = "C:\Users\polux\Desktop\test2.html" 'adapte ton fichier
        x = FreeFile
        Open fichier For Input As #x
        laChaine = Input(LOF(x), #x)
        Close #x
        With CreateObject("htmlfile")    'documenthtml virtuel en late binding
            .write laChaine
            'a supposer que tu cherche un tableau dans ta page
            Set matable = .getelementsbytagname("table")(0)    'pour l'exemple je prend la premiere table!!!!!!
            'on place le code outerhtml de cette table dans le clipboard du document html virtuel et on colle dans le sheets
            If .parentWindow.clipboardData.setData("Text", matable.outerhtml) Then
                Application.ScreenUpdating = False
                With Sheets(1) 'adapte le sheets
                    .Activate
                    .Cells.Clear
                    Cells(2, 1).Select
                    .Paste
                End With
                .parentWindow.clipboardData.clearData "Text"
            End If
        End With
    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

  4. #4
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Bonjour, merci pour vos réponses.
    Clémentmarcott je tiens encore à préciser que je ne connais que très mal le codage VBA du coup ce que tu me propose me parait formidable mais aucune idée de comment le faire (malgré un passage assez long sur notre ami "Google"...).

    Ta solution patricktoulon me semble être la plus approprié pour ce que je veux faire mais je n'ai pas tout compris sur ce qui est fait dans ton code. Notamment le fait que tu prenne la première table de ton HTML, a quoi cela correspond ? Au premier tableau que ta macro trouve ?
    Si je veux récupérer une ligne en particulier ou un bout de ligne ?

    De plus j'aimerai pouvoir garder ma fonction de faire une recherche de mon fichier en fonction de sa date de création et de son nom. Je m'explique : tout les jours il se crée quatre nouveaux fichiers dans le même répertoire que les anciens, et seul un des quatre m'intéresse, mais j'aimerai pouvoir par exemple rechercher un fichier plus ancien.
    Du coup est-il possible de récupérer le bout de mon code qui est censé faire cela (je dis censé parce que jusqu’à présent cela n'a pas marché...) ?

    Et oui et non les fichier HTML sont locales, mais sur un serveur distant.

    En vous remerciant à nouveau de prendre le temps de vous pencher sur mon cas.

  5. #5
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Bonjour, je me permet un double-post dans le but de faire un UP, car je pense que je suis pas loin de la solution (merci encore patricktoulon !).
    Dans la macro ci-dessous il me manque qu'un petit truc... La où il y a des xxxxxx cela correspond à une chaîne de nombre représentant l'heure d'enregistrement du fichier, hors celle-ci n'est jamais la même et j'aimerai ne pas avoir à chaque fois à allé voir pour le savoir. Donc existe-t-il un moyen de contourner cette partie (sachant qu'il y a trois autres fichiers dans le dossiers qui commence par le même nom, AAAAMMJJ_hhmmss_..., mais que je veux pas les ouvrir) ?

    Mon code :
    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
    39
    40
    41
    Sub RécupérationDonnées()
     
    'Variables utilisées
    Dim MonHTML As String, Fichier As String, x As String, Eléments As Object, 
     
    'Création de la boite de dialogue pour entrer la date voulue
    x_Date = InputBox("Indiquer la date voulue (AAAAMMJJ)")
     
    'Recherche du fichier
    x = FreeFile
     
        Open "\\Chemin\" & x_Date & "_xxxxxx_CampagneStatistiques.html" For Input As #x
     
        MonHTML = Input(LOF(x), #x)
        Close #x
     
        'Document HTML virtuel en late binding
        With CreateObject("htmlfile")
            .write MonHTML
     
            'Recherche un tableau dans la page
            Set Eléments = .getElementsByTagName("table")(0)
     
            'Place le code outerhtml de cette table dans le clipboard du document html virtuel et colle dans la feuille de données
            If .parentWindow.clipboardData.setData("Text", Eléments.outerHTML) Then
                Application.ScreenUpdating = False
     
                'Mets les données dans la feuille données voulue
                With Sheets(3)
                    .Activate
                    .Cells.Clear
                    Cells(2, 1).Select
                    .Paste
                End With
     
                .parentWindow.clipboardData.clearData "Text"
            End If
     
        End With
     
    End Sub
    Merci d'avance !

  6. #6
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Bonjour le forum,
    Tout d'abord je vous souhaite une bonne année !

    Ensuite, je suis désolé de me tourner encore vers vous mais, je n'arrive toujours pas à contourner mon problème de nom du fichier... Je réexplique comment ce nomme les fichiers : AAAAMMJJ_hhmmss_CampagneStatistiques.html. J'aimerai si c'est possible pouvoir éviter de rechercher l'horaire à laquelle mon fichier a été enregistré (le hhmmss, correspondant à hh : heures, mm : minutes, ss : secondes). Il faut savoir qu'il s'enregistre chaque jour quatre fichiers différents, donc noms différents (ex de noms des quatre fichiers : CampagneStatistiques, Dupont, Monsieur et Madame), mais portant le même préfixe "AAAAMMJJ_hhmmss_" que les autres. Et chaque jour cette horaire change (trop facile sinon...).
    J'ai essayé en ajoutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "\\Chemin\" & x_Date & "_" & "*" & "_CampagneStatistiques.html"
    mais cela ne marche pas...

    Si quelqu'un à une ou d'autres idées je serai preneur.

    En vous remerciant par avance.

    Au cas où voici mon code final (je remercie encore ceux qui m'ont aidé à le commencer) :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    Sub RécupérationDonnées()
     
    'Variables utilisées
    Dim MonHTML As String, Fichier As String, x As String, Eléments As Object
     
    'Demande si annotations
    If MsgBox("Voulez-vous ajouter des annotations ?", vbYesNo, "Demande de confirmation") = vbYes Then
    Sheets("Bilan").Range("B44") = InputBox("Annotations :")
    Else: Sheets("Bilan").Range("B44") = ""
    End If
     
    'Création de la boite de dialogue pour entrer la date voulue
    x_Date = InputBox("Indiquer la date voulue (AAAAMMJJ)")
    x_Heure = InputBox("Indiquer l'heure du document voulu (hhmmss)")
     
    'Recherche du fichier
    x = FreeFile
     
    Fichier = "\\Chemin\" & x_Date & "_" & x_Heure & "_CampagneStatistiques.html"
     
        'Vérification que le fichier existe
        If Fichier <> "" Then
        Open Fichier For Input As #x
     
        Else
        MsgBox "Fichier introuvable"
     
        End If
     
    'Création de l'inputation de la longueur du fichier HTML (chaîne de caractères contenu à l'intérieur)
    MonHTML = Input(LOF(x), #x)
    Close #x
     
        'Document HTML virtuel en late binding
        With CreateObject("htmlfile")
            .write MonHTML
     
            'Recherche un texte dans la page
            Set Eléments = .getElementsByTagName("table")(1)
     
            'Place le code outerhtml de cette table dans le clipboard du document html virtuel et colle dans la feuille de données
            If .parentWindow.clipboardData.setData("Text", Eléments.outerHTML) Then
     
                Application.ScreenUpdating = False
     
                'Mets les données dans la feuille données voulue
                With Sheets(3)
                    .Activate
                    .Cells.Clear
                    Cells(2, 1).Select
                    .Paste
                End With
     
                .parentWindow.clipboardData.clearData "Text"
     
            End If
     
            'Recherche texte
            Set Eléments = .getElementsByTagName("span")(2)
     
        If Eléments Is Nothing Then GoTo 5 Else
     
            If .parentWindow.clipboardData.setData("Text", Eléments.outerHTML) Then
                Application.ScreenUpdating = False
     
                With Sheets(3)
                    .Activate
                    Cells(10, 1).Select
                    .Paste
                End With
     
                .parentWindow.clipboardData.clearData "Text"
     
            End If
     
                'Recherche un tableau dans la page
            Set Eléments = .getElementsByTagName("table")(2)
     
            'Place le code outerhtml de cette table dans le clipboard du document html virtuel et colle dans la feuille de données
            If .parentWindow.clipboardData.setData("Text", Eléments.outerHTML) Then
                Application.ScreenUpdating = False
     
                'Mets les données dans la feuille données voulue
                With Sheets(3)
                    .Activate
                    Cells(11, 1).Select
                    .Paste
                End With
     
                .parentWindow.clipboardData.clearData "Text"
     
            End If
     
                 'Recherche un tableau dans la page
            Set Eléments = .getElementsByTagName("table")(3)
     
            'Place le code outerhtml de cette table dans le clipboard du document html virtuel et colle dans la feuille de données
            If .parentWindow.clipboardData.setData("Text", Eléments.outerHTML) Then
                Application.ScreenUpdating = False
     
                'Mets les données dans la feuille données voulue
                With Sheets(3)
                    .Activate
                    Cells(11, 15).Select
                    .Paste
                End With
     
                .parentWindow.clipboardData.clearData "Text"
     
            End If
     
              'Recherche texte
            Set Eléments = .getElementsByTagName("span")(6)
     
            If .parentWindow.clipboardData.setData("Text", Eléments.outerHTML) Then
                Application.ScreenUpdating = False
     
                With Sheets(3)
                    .Activate
                    Cells(16, 1).Select
                    .Paste
                End With
     
                .parentWindow.clipboardData.clearData "Text"
     
            End If
     
            'Recherche tableau
            Set Eléments = .getElementsByTagName("table")(4)
     
            If .parentWindow.clipboardData.setData("Text", Eléments.outerHTML) Then
                Application.ScreenUpdating = False
     
                With Sheets(3)
                    .Activate
                    Cells(17, 1).Select
                    .Paste
                End With
     
                .parentWindow.clipboardData.clearData "Text"
     
            End If
     
    5
        'Supprimer les balises HTML
        Worksheets("Données").Cells.Replace What:="<*>", Replacement:="", lookat:=xlPart, SearchOrder _
            :=xlByColumns, MatchCase:=True, SearchFormat:=False, ReplaceFormat:= _
            False
     
        'Supprime les espaces
        Sheets("Données").Visible = True
        Sheets("Données").Select
        Columns("C:C").Select
        Range("C1").Activate
        Selection.Replace What:=" ", Replacement:="", lookat:=xlPart, _
            SearchOrder:=xlByColumns, MatchCase:=True, SearchFormat:=False, _
            ReplaceFormat:=False
     
        Sheets("Bilan").Select
        Sheets("Données").Visible = False
        Range("A1").Select
     
    End Sub

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

Discussions similaires

  1. ouvrir les fichier html
    Par mamou30 dans le forum Firefox
    Réponses: 2
    Dernier message: 07/06/2007, 12h44
  2. Ouvrir un fichier HTML avec navigateur par defaut
    Par Terminator dans le forum Général Java
    Réponses: 18
    Dernier message: 29/05/2007, 14h53
  3. [VBA] pb ouvrir un fichier html sous access
    Par Ludo11 dans le forum VBA Access
    Réponses: 6
    Dernier message: 26/04/2007, 17h28
  4. ouvrir un fichier html dans flash
    Par hedi_wazo2001 dans le forum Flash
    Réponses: 3
    Dernier message: 19/12/2006, 10h59
  5. ouvrir un fichier html
    Par cels dans le forum Access
    Réponses: 3
    Dernier message: 06/09/2005, 16h00

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