• Initiateur de la discussion Initiateur de la discussion jopont
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jopont

XLDnaute Impliqué
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
 
Re : macro et lenteur

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+
 
Re : macro et lenteur

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
 
Re : macro et lenteur

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 édition:
Re : macro et lenteur

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 édition:
Re : macro et lenteur

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 édition:
Re : macro et lenteur

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

Roland
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
912
Réponses
4
Affichages
735
Réponses
3
Affichages
441
Retour