Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2011, 09h11   #1
Invité de passage
 
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
Par défaut Importation données htm

Bonjour,

Je voudrais importer les données d'une série de fichier html se trouvant sur mon disque dur dans un tableau Excel sur le principe une ligne par fichier et une (à deux) cases par ligne de texte dans le fichier.
Les fichiers html sont petits (env 10-12ko) mais très nombreux (>100000...) !
J'ai numéroté les fichiers pour une lecture séquentielle.
J'ai fait un enregistrement de macro puis arrangé le résultat pour arriver à la faire tourner mais c'est très lent.
La macro ouvre un nouveau classeur pour chaque fichier html et copie-colle dans Excel le contenu (sauf la fin)
Excel met environ 10 minutes pour lire les 1000 fichiers html, puis met encore 10 minutes avant d'être disponible (roue arc-en-ciel qui tourne et tourne...).

Voici mon code :
Code :
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
Sub Essai()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ligne = 2
For a = 1 To 999
    b = "Macintosh HD:Users:xxx.php_" & a & ".html"
    Range("A1").Select
    ChDir "Macintosh HD:Users:xxx:"
    ExecuteExcel4Macro "WINDOW.SIZE(398,85,"""")"
    ExecuteExcel4Macro "WINDOW.MOVE(2,-42,"""")"
    Workbooks.Open Filename:=b
    Range("A12:E73").Select
    Selection.Copy
    Windows("Essai MM.xls").Activate
    Sheets.Add
    feuille = "Feuil" & a + 1
    classeur = "Classeur" & a
    Sheets(feuille).Select
    ActiveSheet.Paste
    Sheets(feuille).Select
    Range("B1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil1").Select
    mq = 1
    For i = 1 To 62 
        For j = 1 To 2
            If Sheets(feuille).Cells(i, j).Value <> "" Then
                   If Sheets(feuille).Cells(i, j).Value = "xxx" Then
                        GoTo ici:
                    End If
                   Sheets("Feuil1").Cells(ligne, mq) = Sheets(feuille).Cells(i, j).Value
                   mq = mq + 1
            End If
        Next
    Next
ici:
    Sheets(feuille).Delete
    ligne = ligne + 1
    Windows(classeur).Close
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Auriez-vous des solutions pour augmenter grandement la vitesse d'exécution ?

Merci d'avance pour votre aide,

Cordialement,
arnaud1000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 09h17   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Il faut que tu essaies de bien comprendre (aide en ligne, net...) ce que fait chaque ligne donnée par ton enregistreur de macro. Comme ça tu pourras virer tout ce qui est inutile.
Je vais regarder ton code plus en détail.

Effectivement, je comprends que ce soit très lent. On peut bien sûr améliorer la chose en évitant les multiples Select et Activate mais ce qui prend le plus de temps est l'ouverture et la fermeture des classeurs. il y a d'autre solution pour lire des fichiers HTML.
Peux-tu expliquer comment sont organisés ces fichiers ? Ensuite, j'ai l'impression que tu veux recopier toutes les données du fichier sur une ligne c'est ça ?
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 09h56   #3
Invité de passage
 
Inscription : décembre 2011
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 2
Points : 0
Points : 0
Bonjour Sébastien,

Je me disais bien que c'est cette ouverture de classeur qui devait être la plus pénalisante.
Les fichiers html sont enregistrés sous la forme xxxnumfichier.htm dans un dossier dédié. Le contenu est du texte dans un tableau (de deux colonnes) d'une 60aines de lignes n'étant pas toutes remplies. Je souhaite en extraire une partie (le début et la fin ne m'intéresse pas).

Je veux recopier toutes les données (m'intéressant) sur une ligne mais dans des colonnes différentes (pour chaque "case" du fichier html avec du contenu) et cela pour chaque fichier (un fichier - une ligne). S'il est plus rapide de copier le tout par une méthode plus directe, cela me va très bien, la supression du superflu étant aisée (tout le superflu est identique).

Merci pour ton aide.
arnaud1000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 10h08   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
La solution serait de parser le HTML, mais il faudrait que tu donnes un exemple de formatage pour pouvoir te donner une piste.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h25.


 
 
 
 
Partenaires

Hébergement Web