Code VBA Trop Long help...

anthooooony

XLDnaute Occasionnel
Bonjour,

Je vous écris car j'ai un code VBA qui est de plus en plus long en traitement. En faite, tous les jours des fichiers se mettent dans un dossier, ensuite grâce au code ci dessous je les récupère tous j'en reçois 14 par jour j'en ai deja plus de 200 en 15 jours ça promet :D

Chose faite :
Pour améliorer j'ai rajouté application.screenUpdating vu sur exceldownload mais ca n'accélère pas trop la rapidité de cette macro

Auriez vous d'autres bout de code tel que le screenUpldating permettant d'améliorer la macro?

Aussi, comment serait -il possible d'intégrer un contrôle de doublons, en faite ce code efface tout et reprend tous les fichiers et ça tous les jours. je pense que de ne prendre que les fichiers récents améliorerait la rapidité de l'exécution...


Code:
Sub aaaaa()

Application.ScreenUpdating = False

 sousRépertoire = "Fichiers Retard Relance"
 [A2].CurrentRegion.Offset(1, 0).Clear
 Set maitre = ActiveWorkbook
 Repertoire = ThisWorkbook.Path
 nf = Dir(Repertoire & "\" & sousRépertoire & "\*.xls") ' premier fichier
Do While nf <> ""
 Workbooks.Open Filename:=Repertoire & "\" & sousRépertoire & "\" & nf
With ThisWorkbook.Sheets("Feuil1")
    derlig = .Range("A65000").End(xlUp).Row + 1
   .Range("A" & derlig) = DateSerial((Mid(Cells(1, 1), 18, 4)), (Mid(Cells(1, 1), 15, 2)), (Mid(Cells(1, 1), 12, 2)))
   .Range("B" & derlig) = Left([D7], InStr(1, [D7], " ") - 1)
   .Range("C" & derlig) = LTrim(Split([B3] & " ")(0))
   .Range("D" & derlig) = Application.Sum(Range("j1").EntireColumn) / 2
End With

 ActiveWorkbook.Close False

nf = Dir ' fichier suivant
ActiveWorkbook.RefreshAll

 Loop
 Application.DisplayAlerts = False
Application.ScreenUpdating = True

End Sub


En vous remerciant par avance de votre aide.

Anthooooony
 

simraill

XLDnaute Occasionnel
Re : Code VBA Trop Long help...

Bonjour Anthoooooony,

Déjà la première chose à faire est de déclarer tes variables et leurs type, celà te permettra de gagner en mémoire, donc en temps d'éxécution.
Utilise l'option explicit pour être sur de toutes les avoir déclarer.

Après oui je pense que le faite de tous supprimer puis de tout réimporter prends plus de temps que de mettre seulement les nouveaux fichiers.

Pourrais tu joindre un ichier pour que ce soit plus simple à comprendre ton code?

Simraill
 

Efgé

XLDnaute Barbatruc
Re : Code VBA Trop Long help...

Bonjour anthooooony,
Sur 200 fichiers, tout sera long...
Juste deux choses :

Ton
VB:
Application.DisplayAlerts = False
est mal placé. Il faut le mettre en début de code. (là où il est il ne sert à rien)
Et en fin de code tu mets
VB:
Application.DisplayAlerts = True

Sauf à ce que que cela soit réellement utile, il me semble que tu pourrais éviter de rafraichir 200 fois ton classeur.
Déplace la ligne
VB:
ActiveWorkbook.RefreshAll
après ton Loop.

Si tu as des formules dans ton classeur, mets en début de code
VB:
Application.Calculation = xlCalculationManual
et réactive le calcul avant de faire ton refresch :
VB:
Application.Calculation = xlCalculationAutomatic

Ta fin de macro devrait donner ça:
VB:
Loop
Application.Calculation = xlCalculationAutomatic
ActiveWorkbook.RefreshAll
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub


En ce qui me concerne je ne Vois rien d'autre à améliorer.
Cordialement
 

anthooooony

XLDnaute Occasionnel
Re : Code VBA Trop Long help...

Bonjour et merci à vous deux simraill,Efgé

J'ai pris note des modifications qui tu m'as conseillé simraill, faut que j'identifie les variables dans le code chu un peu une quiche en vba, j'essaye petit à petit mais ce code je l'ai recuperé sur un forum..
sousRépertoire / Set maitre / Repertoire ce sont bien les variables présentes?

Merci Efgé aussi pour ces explications détaillées, je changé ce que tu m'as conseillé de faire, et ça n'a rien à voir ! ça va beaucoup plus vite !

J'ai mis mon fichier en pièce jointe, j'ai deux codes, l'un récupère les fichiers(avec Modif de Efgé), et l'autre qui envoie un mail avec des champs spécifiques récupérés sur le résultat des fichiers excel.

Aussi, je vais regarder comment faire pour qu'il n'ouvre pas à chaque fois l'ensemble des fichiers, parce qu'à la fin de l'année ça fera 5110(14*365jrs) fichiers à ouvrir ça prendra un certain temps.

Les fichiers que j'enregistre ressemble à ça "Export-20130115-085844589.xls"
J'ai fais un ptit truc surement très long :D pour recuperer la date du jour "15-1-2013" de chaque fichier.
Apres l'idée que j'ai est de mettre dans une bdd à chaque fois que je lance la macro la date du jour, et dans le code final, pourrait prendre cette variable pour recuperer mes fichiers non recuperer jusqu'alors.
Je sais pas ce que vous en pensez? si c'est trop farfelu..


Code:
Sub t()
'Cell(1,1) en locurence est le nom du fichier excel, je l'ai mis en a1 pour tester le code
Dim jour As Integer
Dim Mois As Integer
Dim Année As Integer

Année = (Mid(Cells(1, 1), 8, 4))
Mois = (Mid(Cells(1, 1), 12, 2))
jour = (Mid(Cells(1, 1), 14, 2))

MsgBox jour & "-" & Mois & "-" & Année
End Sub

Je vais voir ce que je trouve et le mettrais à la suite du code.

Merci encore à vous deux

Anthooooony
 

Pièces jointes

  • Historisation retard relance.xlsm
    86.9 KB · Affichages: 47

Efgé

XLDnaute Barbatruc
Re : Code VBA Trop Long help...

Re, Bonjour simraill
J'ai laissé une ou deux idées dans le code aaaaa
Pas trop le temps d'aller plus loin, mais la meilleure solution reste de vérifier les classeurs à traiter...
Cordialement
 

Pièces jointes

  • Test(X).xls
    92 KB · Affichages: 46

Discussions similaires