Execution de macro très lente

Vorens

XLDnaute Occasionnel
Bonjour,


J'ai du réaliser une macro relativement conéquente, elle à pour tâche d'importer des données, les traiter (purification d'état parasite), les stocker dans des base de données, faire des moyennes, des graphiques etc.

L'execution était relativement rapide mais j'ai du ajouter une fonction qui copie / colle des cellules d'une feuille à l'autre. Cette fonction est lente car intégrée au millieu de la macro. Le programme à du mal à ouvrire les feuilles pour y aller chercher les données c'est a ce moment qu'il prend 3-4 secondes à chaque fois.

Connaissez vous un moyen pour augmenter la vitesse d'execution d'un macro.

Es ce que par exemple un Sheet("blabla").activate est plus lent qu'un sheet("blabla").select ? Ou autre instruction à éviter.

Cordialement
 

Gorfael

XLDnaute Barbatruc
Re : Execution de macro très lente

Salut Vorens et le forum
Juste une question : tu attends quoi comme réponse ?
Oui, on peut vraisemblablement l'exécuter plus rapidement, mais comme ton code est du type secret défense, je ne suis pas habilité à y toucher.
A+
 

Dranreb

XLDnaute Barbatruc
Re : Execution de macro très lente

Bonjour
Il faudrait voir le code.
Sinon les 3 instructions suivantes sont susceptible d'accélérer significativement les codes déjà assez bien écrits:
VB:
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
Ne pas oublier de repasser le 1er à xlCalculationAutomatic et surtout le dernier à True en fin d'exécution.
À+
 

Efgé

XLDnaute Barbatruc
Re : Execution de macro très lente

Re Vorens, Bonjour Gorfael, Dranreb,
Pour "accélérer" une macro il faut commencé par éviter les select.
Si je prend un code qu'il y avait dans un de tes exemples:
VB:
Sub Macro2()
    Range("D3").Select
    Selection.Copy
    Sheets("Feuil2").Select
    Range("A1:D2").Select
    Range("D1").Activate
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("A1").Select
    Sheets("Feuil1").Select
    Selection.Copy
    Sheets("Feuil2").Select
    ActiveSheet.Paste
End Sub
On peux commencer par le nettoyer. Ce qui donne :
VB:
Sub Macro3()
    Sheets("Feuil2").Range("A1:D2").ClearContents
    Sheets("Feuil1").Range("D3").Copy
    Sheets("Feuil2").Activate
    Sheets("Feuil2").Range("A1").Select
    ActiveSheet.Paste
End Sub

Ensuite on peux l'améliorer :
VB:
Sub Macro4()
With Sheets("Feuil2")
    .Range("A1:D2").ClearContents
    .Range("A1").Value = Sheets("Feuil1").Range("D3")
End With
End Sub

Mais pour tout ça, il faut avoir... ...un code (dans un exemple)
Cordialement
 
Dernière édition:

Vorens

XLDnaute Occasionnel
Re : Execution de macro très lente

Re,

Merci pour vos réponses.

Il est vrai que ma question n'était pas très claire et que sans code c'est difficil, mais Efgé m'a donné les indications qu'il me fallait, je vais pouvoir purifier le code avec les conseils donné.

Merci encore !
 

Discussions similaires

Statistiques des forums

Discussions
312 225
Messages
2 086 411
Membres
103 201
dernier inscrit
centrale vet