Macro trop lente

noe2008 Messages postés 191 Statut Membre -  
noe2008 Messages postés 191 Statut Membre -
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. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
  2. noe2008 Messages postés 191 Statut Membre 4
     
    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. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      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. noe2008 Messages postés 191 Statut Membre 4
       
      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. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      C'est probablement lié au temps de calcul de la feuille.
      0
      1. noe2008 Messages postés 191 Statut Membre 4 > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
         
        Ok merci infiniment
        0