![]() |
|
Forum
|
|
|
#1 (permalink) |
|
XLDnaute Occasionel
Date d'inscription: septembre 2005
Messages: 145
|
Bonsoir
J'utilise la macro ci-dessous dans excel 2007. Lorsque je l'ai utilisée la première fois elle était hyper rapide. Aujourd'hui après plusieurs essai, elle est devenu hyper lente ( plus de 2 heure pour 30 fichier txt, et encore ça plante) y-a-t-il une explication ? une solution ? merci le code : Sub import() Dim Directory As String, File As String, Temp As String Dim NumRow As Long, NumCol As Integer Dim FF As Integer, I As Integer Dim LigFic As Long Directory = ThisWorkbook.Path & "\" & "fevrier08\" ' "E:\fevrier08\" File = Dir(Directory & "*.txt") NumRow = ActiveCell.Row NumCol = ActiveCell.Column With ActiveSheet FF = FreeFile LigFic = 0 Do While File <> "" Open Directory & File For Input As #FF Do While Not EOF(FF) Line Input #FF, Temp If LigFic > 4 Then Table = Split(Temp, vbTab) For I = 0 To UBound(Table) If IsDate(Table(I)) Then .Cells(NumRow, NumCol + I) = CDate(Table(I)) Else .Cells(NumRow, NumCol + I) = Table(I) End If Next NumRow = NumRow + 1 End If LigFic = LigFic + 1 Loop LigFic = 0 Close #FF File = Dir Loop End With End Sub |
|
|
|
| ANNONCES | |||
|
|
|
|
#3 (permalink) |
|
XLDnaute Accro
Date d'inscription: avril 2005
Localisation: MONTARGIS (la Venise du Gâtinais)
Version Excel : Excel 2003 (PC)
Messages: 1 935
|
Salut Jopont,
Tu fais la recherche de fichier dans 2 directory !? Directory = ThisWorkbook.Path & "\" & "fevrier08\" ' "E:\fevrier08\" Ton lecteur "E:\" c'est quoi !? Lecteur réseau, disque amovible, partition DD, etc ... A+
__________________
Cordi@lement. La politesse est comme le zéro, qui, sans avoir de valeur en soi, en ajoute à toutes choses. ![]() VBA, vous ne savez pas comment faire ... Pensez à l'enregistreur de macro ! Menu -> Outils -> Macro -> Nouvelle macro ![]() Si vous souhaitez rejoindre le club des Supporters d'XLD ... c'est ICI Petite citation : C'est en XLDant que l'on devient XLDnaute Accro ...
|
|
|
|
|
|
#7 (permalink) |
|
XLDnaute Accro
Date d'inscription: mars 2005
Messages: 1 097
|
Bonjour à tous.
Et ThisWorkbooks.path est-il différent du premier essai qui était plus rapide?
__________________
Salutations Michel Pour faire facilement vos comptes personnels http://www.excel-downloads.com/remos...s-MJ-2007.html Trouvez les couleurs Le JEU http://www.excel-downloads.com/forum...-couleurs.html |
|
|
|
|
|
#8 (permalink) |
|
XLDnaute Occasionel
Date d'inscription: avril 2007
Messages: 383
|
bonjour
tu dis que ça plante !? quand ça plante, si tu fais "débogage" ça doit d'indiquer sur quel ligne !? si oui laquelle ? ça vient peut-être des fichiers sources et lors des "Line Input #FF, Temp" !? Roland |
|
|
|
|
|
#9 (permalink) |
|
XLDnaute Occasionel
Date d'inscription: septembre 2005
Messages: 145
|
il y a 31 fichier de 2 à 4 ko chacun.
Quand je dis que ça plante, en fait la macro se lance, inscrit les données, puis continue de tourner sans indiquer d'erreur dans vba. il s'agit d'un dossier différent du premier essai. merci de m'aider Dernière modification par jopont 12/05/2008 à 19h18. |
|
|
|
|
|
#10 (permalink) |
|
XLDnaute Accro
Date d'inscription: mars 2005
Messages: 1 097
|
Bonjour,
Non ce n'est pas normal. Comme le dit Roland, il faut faire du débogage. Tu mets un stop dans ton code puis tu tapes F8 pour aller en pas à pas et ctrl+shift+F8 pour continuer.
__________________
Salutations Michel Pour faire facilement vos comptes personnels http://www.excel-downloads.com/remos...s-MJ-2007.html Trouvez les couleurs Le JEU http://www.excel-downloads.com/forum...-couleurs.html |
|
|
|
|
|
#11 (permalink) |
|
XLDnaute Occasionel
Date d'inscription: avril 2007
Messages: 383
|
bonsoir
je pense que l'erreur vient de >>> Line Input car si on load une ligne qui n'a pas de retour fin de ligne chr$(10)chr$(13) le Line Input reste bloqué sans erreur et sans effet avec le fin du fichier EOF() et il reste bloqué là ! donc ça vient très certainement de la dernière ligne d'un fichier ! pour cela faire un essai avec >>> Input <<< simplement soit Input #FF, Temp Roland Dernière modification par Roland_M 12/05/2008 à 21h24. |
|
|
|
|
|
#12 (permalink) |
|
XLDnaute Occasionel
Date d'inscription: octobre 2005
Messages: 166
|
Bonsoir,
Déjà 1. supprimer la mise à jour excel ==> Application.ScreenUpdating = False 2. Supprimer le calcul auto (ici ?) ==> Application.Calculation= False 3. les variables I et NumCol en Long 4. évite de lire un fichier via un réseau (les recopier en local avant exploitation) Ceci dit la fonction SPLIT est très gourmande puisqu'elle alloue et désaloue une table à chaque appel. Mais comme disent les autres il faut tracer pour localiser le moment ou cela bloque (un fichier particulier, au delà d'un certain nombre de ligne....) Vérifie effectivement ce que dit Roland_M pour dégrossir,Tu peut mettre des points d'arrêt en ajoutant un test bidon dans la boucle de traitement : du style "si compteur>100 alors compteur = 0 sinon compteur=compteur +1" faire F9 sur la ligne compteur=0 Désolé mais difficile de t'aider plus sans les fichiers et un contexte plus précis GIBI Dernière modification par GIBI 12/05/2008 à 21h42. |
|
|
|
|
|
#13 (permalink) |
|
XLDnaute Occasionel
Date d'inscription: septembre 2005
Messages: 145
|
j'ai essayé d'enlever le line dans input, sans résultat.
Le débogage ne donne pas d'erreur. Je ne comprend pas pourquoi est-ce lent. Dernière modification par jopont 13/05/2008 à 22h06. |
|
|
|
|
|
#14 (permalink) |
|
XLDnaute Accro
Date d'inscription: avril 2005
Localisation: MONTARGIS (la Venise du Gâtinais)
Version Excel : Excel 2003 (PC)
Messages: 1 935
|
Salut Jopont,
As-tu essayé de désactiver ton anti-virus le temps de faire le test et sans être connecté à Internet ![]() A+
__________________
Cordi@lement. La politesse est comme le zéro, qui, sans avoir de valeur en soi, en ajoute à toutes choses. ![]() VBA, vous ne savez pas comment faire ... Pensez à l'enregistreur de macro ! Menu -> Outils -> Macro -> Nouvelle macro ![]() Si vous souhaitez rejoindre le club des Supporters d'XLD ... c'est ICI Petite citation : C'est en XLDant que l'on devient XLDnaute Accro ...
|
|
|
|
|
|
#15 (permalink) |
|
XLDnaute Occasionel
Date d'inscription: avril 2007
Messages: 383
|
bonsoir
je viens d'essayer ce même code en créant 30 fichiers de 500 lignes chacun ça prend à peine 1 seconde pour les créer ! et environ 1 seconde pour loader le tout !? ceci sous Excel 2003 et Excel 2007 ! je précise que j'ai l'antivirus qui tourne et j'étais connecté sur le net(sur le forum) donc ce n'est pas le code !? mais probablement les fichiers sources !? ça doit boucler quelque part !? Code:
Sub exporte() Directory = ThisWorkbook.Path & "\" & "essai\" For I = 1 To 30 fich$ = Directory & "fich" & I & ".txt" Open fich$ For Output As #1 For L = 1 To 500 Print #1, "line" & L Next Close #1 Next End Sub Sub import() Dim Directory As String, File As String, Temp As String Dim NumRow As Long, NumCol As Integer Dim FF As Integer, I As Integer Dim LigFic As Long Directory = ThisWorkbook.Path & "\" & "essai\" File = Dir(Directory & "*.txt") NumRow = ActiveCell.Row NumCol = ActiveCell.Column With ActiveSheet FF = FreeFile LigFic = 0 Do While File <> "" Open Directory & File For Input As #FF Do While Not EOF(FF) Line Input #FF, Temp If LigFic > 4 Then Table = Split(Temp, vbTab) For I = 0 To UBound(Table) If IsDate(Table(I)) Then .Cells(NumRow, NumCol + I) = CDate(Table(I)) Else .Cells(NumRow, NumCol + I) = Table(I) End If Next NumRow = NumRow + 1 End If LigFic = LigFic + 1 Loop LigFic = 0 Close #FF File = Dir Loop End With End Sub |
|
|
|
| ANNONCES | |
![]() |
| Outils de la discussion | |
|
|
Discussions similaires
|
||||
| Discussion | Auteur | Forum | Réponses | Dernier message |
| Probleme de lenteur dans macro | lenag99 | Forum Excel | 10 | 10/02/2008 10h01 |
| Lenteur d'execution de macro dans xls2007 | Seb77 | Forum spécial EXCEL 2007 | 4 | 03/12/2007 21h36 |
| lenteur d'une macro | kevinch | Forum Excel | 5 | 08/09/2006 07h03 |
| lenteur macro | michel33 | Forum Excel | 20 | 15/05/2005 11h22 |
| fichier trop gros? trop de macro? énorme lenteur pour ouvrir le fichier | sam | Forum Excel Downloads - Archives | 1 | 18/12/2002 08h10 |