Macro trop lente

Fermé
noe2008 Messages postés 183 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 9 novembre 2023 - 24 janv. 2019 à 21:52
noe2008 Messages postés 183 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 9 novembre 2023 - 25 janv. 2019 à 20:11
Salut les amis

j'ai préparé cette macro à l'aide des experts de ce forum pour m'aider à importer des des données à partir des fichiers externe pour les exploiter dans mes statistiques , mais en la modifiant pour l'adapter à mon classeur j'ai remarqué qu'elle est trop lente elle prend des minutes pour traiter 4 ou 6 classeurs tandis que je dois traiter quelques fois plus de 60 classeurs , meme en l’essayant sur d'autres PC plus puissant c'est la même chose

voila la macro si vous pouvez la rectifier merci

Sub importer()
Sheets("Notescc").Activate
Range("D1:Z15000").ClearContents
Application.ScreenUpdating = False
Dim Fich As String, Sh As Worksheet, i As Long, L As Long, CD As Range
Dim Wbk As Workbook, Coll, K As Long
Set Sh = ThisWorkbook.Sheets("Notescc")
Coll = Application.GetOpenFilename(, , , , True)
For K = 1 To UBound(Coll)
Fich = Coll(K)

Set Wbk = Workbooks.Open(Fich)
For i = 1 To K
L = (i - 1) * 100 + 1
Next i
With Wbk.Sheets("Notescc")

Set CD = .Range("D1:Z100")
Sh.Cells(L, 4).Resize(100, 23).Value = CD.Value
Wbk.Close False
End With

Next K

End Sub


Configuration: Windows / Chrome 71.0.3578.98
A voir également:

2 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
24 janv. 2019 à 22:13
Bonjour,

Tu ne pourra pas gagner beaucoup de temps,

Remplaces
For i = 1 To K
L = (i - 1) * 100 + 1
Next i 
par
L = (K - 1) * 100 + 1

Ajoutes
Application.Calculation = xlCalculationManual
après la ligne
Application.ScreenUpdating = False

Et
Application.Calculation = xlCalculationAutomatic
avant End Sub
0
noe2008 Messages postés 183 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 9 novembre 2023 4
25 janv. 2019 à 12:04
Salut Patrice33740

j'ai ajouté les modification que vous m'avez proposé , le temps de l’exécution de la macro a diminué de plus de la moitié , mais elle encore lente surtout pendant : Range("D1:Z15000").ClearContents et avant sa fermeture
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
Modifié le 25 janv. 2019 à 12:30
Essaies:
Sub importer()
Dim Wbk As Workbook, Sh As Worksheet, CD As Range
Dim Coll, Fich As String, K As Long, L As Long
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  Set Sh = ThisWorkbook.Sheets("Notescc")
  Sh.Range("D1:Z15000").ClearContents
  Coll = Application.GetOpenFilename(, , , , True)
  For K = 1 To UBound(Coll)
    Fich = Coll(K)
    Set Wbk = Workbooks.Open(Fich)
    L = (K - 1) * 100 + 1
    Set CD = Wbk.Sheets("Notescc").Range("D1:Z100")
    Sh.Cells(L, 4).Resize(100, 23).Value = CD.Value
    Wbk.Close False
  Next K
  Sh.Activate
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub
Ce serait peut-être plus rapide en récupérant les infos sans ouvrir les fichiers, mais c'est pas sûr.
0
noe2008 Messages postés 183 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 9 novembre 2023 4
25 janv. 2019 à 12:38
Le problème reste seulement a mon avis vers la fin , après la fermeture des fichiers externes elle prend environ 2 minutes pour quitter la macro
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
25 janv. 2019 à 15:43
C'est probablement lié au temps de calcul de la feuille.
0
noe2008 Messages postés 183 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 9 novembre 2023 4 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
25 janv. 2019 à 20:11
Ok merci infiniment
0