VBA - Optimisation temps copier/coller
Bonjour à tous,
Je poste un message car je n'ai pas trouvé de réponse qui convient à mon problème, mais j'espère que vous pourrez m'aider.
Je dois mettre à jour un fichier excel quotidiennement, à partir d'un extract de base de données. Appelons mon extract mon "Fichier Source", et mon fichier de travail quotidien mon "Fichier Sorti". Mon fichier Sorti contient en moyenne 2000 lignes et j'importe 20 colonnes de mon Fichier Source (qui en contient plus, mais dont je n'ai pas besoin).
Ma méthode de mise à jour est la suivante :
- ouverture du fichier source
- parcours de chaque colonne dans mon fichier sorti => pour chaque colonne :
- Recherche du nom de ma colonne Fsortie dans Fsource
- Copie des données de la colonne identifiée du Fsource (avec nombre exact de ligne)
- Collage de ces données dans Fsortie
- Passage à la colonne suivante
Code:
1 2 3 4 5 6 7 8
| While fSortie.Cells(1, colSortie) <> "x"
Set c = fSource.Range(Cells(1, 1), Cells(1, 40)).Find(fSortie.Cells(1, colSortie), , , xlWhole, , xlNext) ' Recherche de ma colonne en cours (Fsortie) dans mon fichier source
colSource = c.Column ' Récupération de la collone en question dans fichier source
fSource.Range(Cells(1, colSource), Cells(nblineSource, colSource)).Copy ' Copier/Coller des valeurs de la colonne source vers ma colonne sortie
fSortie.Cells(2, colSortie).PasteSpecial xlPasteValues
colSortie = colSortie + 1
Wend |
Mon soucis aujourd'hui est que ce Copier/Coller est long : près de 1mn30, pour si peu de données . . . J'ai bien l'une des colonnes qui contient beaucoup de texte (colonne de commentaire), mais à mon avis cela ne justifie pas un temps de traitement si gourmand. . . :weird:
J'ai une fonction d'initialisation qui désactive beaucoup de fonctionnalités Excel mais cela ne suffit apparemment pas :
Code:
1 2 3 4 5 6 7 8 9
|
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
.AskToUpdateLinks = False
.DisplayPasteOptions = False
End With |
Auriez vous une idée pour me faire gagner en temps de traitement? :hola:
Merci beaucoup pour vos lumières ! ! ! :)