Optimisation VBA Copier Coller

clichois

XLDnaute Nouveau
Bonjour à tous,

Je cherche à optimiser le temps de traitement d'une macro. J'ai réalisé une macro pour copier chaque jour les lignes de plusieurs fichiers et les agréger dans un unique fichier. Actuellement, je copie environ 2500 lignes venant de 4 fichiers différents, ce qui prend presque 5 minutes.

J'avais essayé plusieurs méthodes pour réaliser le copier coller, sans succès donc je passe par une boucle qui me copie chaque ligne les unes après les autres. Le problème, c'est que j'ai de plus en plus de lignes à copier et le temps de traitement peut être très long. Je pense qu'on peut optimiser ce temps de traitement en réalisant le copier coller d'une autre manière (utilisation d'un tableau array, définir des variables pour copier des ranges,...) mais je n'ai pas les compétences nécessaires pour le faire d'où ma sollicitation.

Je vous joins un jeu de fichier pour tester la macro :
macro copie : fichier où l'on souhaite agréger les lignes
stock xxx : fichier qui contient les lignes que l'on copie

voici le morceau de code qui réalise le copier coller :

Code:
Set wbSource = ActiveWorkbook
Set detail = wbSource.Sheets("Détail")
On Error Resume Next
detail.ShowAllData

    m = 2        ' ligne de chaque fichier source  ==> ' boucle ici à modifier pour copier plus rapide ??
    While detail.Cells(m, 1) <> ""
    detail.Rows(m).Copy trait.Rows(n)    ' (n = est la ligne du fichier de sortie)
    m = m + 1
    n = n + 1
    Wend

Je vous remercie par avance pour votre aide
 

clichois

XLDnaute Nouveau
J'ai trouvé mon bonheur en continuant mes recherches sur internet, voici le code que j'utilise

Code:
        Dim Derlig As Integer
        Dim Derlig1 As Integer
      
        With detail   ' la feuille avec les données d'entrée
        Derlig1 = .Range("B" & Rows.Count).End(xlUp).Row
        End With
      
        detail.Range("A2:BB" & Derlig1).Copy
      
        With trait     ' la feuille où je souhaite obtenir les infos
            Derlig = .Range("A" & Rows.Count).End(xlUp).Row
            .Range("A" & Derlig + 1).PasteSpecial Paste:=xlPasteValues
        End With
 

Discussions similaires

Statistiques des forums

Discussions
312 106
Messages
2 085 352
Membres
102 871
dernier inscrit
Maïmanko