Macro trop lente

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

2 réponses

  1. 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
    1. 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
      1. 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
      2. 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
      3. C'est probablement lié au temps de calcul de la feuille.
        0
      4. @Patrice33740Ok merci infiniment
        0