Bonsoir à tous,
Je travail actuellement sur un macro (Excel 2010) qui me permet de chercher un fichier (browser) afin d'intégrer certaines lignes. Mon programme fonctionne néanmoins il est très lourd et atteint ses limites quand je commence à lui mettre en entré des fichiers avec 60k de lignes ! La dernière fois j'ai mis fin à l'agonie de mon pc après 15 min de traitement.
Donc je recherche quelque chose de plus léger ! Voici déjà le code que j'utilise histoire de ne pas parler dans le vide :
J'ai essayer quelques trucs pour améliorer par exemple faire un filtre puis coller directement les données sur un autre onglet avant d'ajouter mes données (fait à l'aide de l'enregistreur de macro) mais c'est encore plus long que ce que j'ai maintenant.
En tout cas si quelqu'un à une idée pour réduire la complexité du code je suis preneur !
Je m'excuse d'avance pour les experts je ne suis pas un programmeur ^^
Merci d'avance !
Je travail actuellement sur un macro (Excel 2010) qui me permet de chercher un fichier (browser) afin d'intégrer certaines lignes. Mon programme fonctionne néanmoins il est très lourd et atteint ses limites quand je commence à lui mettre en entré des fichiers avec 60k de lignes ! La dernière fois j'ai mis fin à l'agonie de mon pc après 15 min de traitement.
Donc je recherche quelque chose de plus léger ! Voici déjà le code que j'utilise histoire de ne pas parler dans le vide :
Code:
Sub AjoutDonnees(chemin As String)
Dim classeur As Workbook 'Création d'un classeur
Set classeur = Workbooks.Open(chemin)
Dim k As Double
Dim i As Double
k = 0
ThisWorkbook.Activate
ThisWorkbook.Sheets("Donnees").Select
i = Range("Donnees!A01").CurrentRegion.end(xlDown).Row
classeur.Activate
'Traitement du fichier, récupération des types de mouvements : expédition et navette
'On filtre pour ne garder que les types de mouvements qui nous intéresse
While Range("Feuil1!A2").Offset(k) <> ""
If Range("Feuil1!H2").Offset(k) = "Expéd. client (-)" Or Range("Feuil1!H2").Offset(k) = "Navette filiale (-)" Or Range("Feuil1!H2").Offset(k) = "Navette inter-PFL (-)" Or Range("Feuil1!H2").Offset(k) = "Expéd. filiale (-)" Then
Range("Feuil1!A2:H2").Offset(k).Copy Destination:=ThisWorkbook.Sheets("Donnees").Range("A1").Offset(i)
i = i + 1
End If
k = k + 1
Wend
classeur.Close
End Sub
J'ai essayer quelques trucs pour améliorer par exemple faire un filtre puis coller directement les données sur un autre onglet avant d'ajouter mes données (fait à l'aide de l'enregistreur de macro) mais c'est encore plus long que ce que j'ai maintenant.
En tout cas si quelqu'un à une idée pour réduire la complexité du code je suis preneur !
Je m'excuse d'avance pour les experts je ne suis pas un programmeur ^^
Merci d'avance !