Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Temps de traitement ACTIVATE

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

RichardS

XLDnaute Junior
Mon souci porte sur l’utilisation des ordres SELECT et ACTIVATE et surtout de leur temps de traitement. Je vais vous décrire mon souci avec 4 exemples.

Je dispose d’un fichier Fic_A avec 2 feuilles FA1 et FA2 et d’un fichier Fic_B avec 1 feuilles FB1. Mes 2 fichiers existent et sont ouverts. Pour des raisons de comparaisons des différentes méthodes, je me contenterai de faire des copies ligne par ligne.

Test 1 : copie de 100 lignes de la feuille FA1 du fichier Fic_A sur la même feuille du même fichier.
Test 2 : copie de 100 lignes de la feuille FA1 du fichier Fic_A sur la feuille FA2 du même fichier. Utilisation de SELECT.
Test 3 : copie de 100 lignes de la feuille FA1 du fichier Fic_A sur la feuille FB1 du fichier Fic_B. Utilisation de SELECT et ACTIVATE.
Test 4 : copie de 100 lignes de la feuille FA1 du fichier Fic_A sur la feuille FB1 du fichier Fic_B. Utilisation de SELECT, ACTIVATE et ScreenUpdating=False.

Et voici les résultats des temps de traitement sur un Asus ZenBook avec i7 :
DébutFinDeltan°test
39 780,2070​
39 782,3672​
2,1602​
1
39 782,3672​
39 784,6641​
2,2969​
2
39 784,6641​
39 792,6484​
7,9844​
3
39 792,7773​
39 798,6719​
5,8945​
4

Ce qui est acceptable lorsque l’on travaille sur un même fichier (tests 1 et 2) ne l’est plus lorsque l’on travaille sur 2 fichiers différents (temps de traitement multiplié par 4) test 3 et même si j’utilise la fonction ScreenUpdating=False test 4 (temps de traitement multiplié par 3).

J’ai utilisé la copie dan mes exemples mais c’est valable pour toutes fonctions. C’est le passage d’un fichier à l’autre via ACTIVATE qui prend énormément de temps.

Comment faire pour avoir des temps de traitement qui soient moins long lorsque l’on travaille sur 2 fichiers ???

Vous trouverez ci-dessous le détail du test.

  • Je désire copier des lignes (répondant à des critères bien définis) de la feuille FA1 sur la fin de la feuille FA1 du Fic_A. Pour cela inutile d’utiliser les ordres SELECT ou ACTIVATE. Tout va vite et bien.
Workbooks("Fic_A.xlsx").Sheets("FA1").Activate
L2 = 111
Debut1 = Timer
For L1 = 1 To 100
  • Range(Cells(L1, 1), Cells(L1, 10)).Copy
  • ActiveSheet.Paste Range(Cells(L2, 1), Cells(L2, 10))
  • L2 = L2 + 1
Next L1
FIN1 = Timer

  • Je désire copier des lignes de la feuille FA1 du fichier Fic_A sur la feuille FA2 du même fichier. Pour cela, l’ordre SELECT suffit et le traitement est très rapide.
Workbooks("Fic_A.xlsx").Activate
L2 = 1
Debut2 = Timer
For L1 = 1 To 100
Sheets("FA1").Select
Range(Cells(L1, 1), Cells(L1, 10)).Copy
Sheets("FA2").Select
ActiveSheet.Paste Range(Cells(L2, 1), Cells(L2, 10))
L2 = L2 + 1
Next L1
FIN2 = Timer

  • Je désire copier des lignes de la feuille FA1 du fichier Fic_A sur la feuille FB1 du fichier Fic_B. Pour cela la fonction SELECT ne suffit pas, il faut utiliser la fonction ACTIVATE. C’est extrêmement lent.
L2 = 1
Debut3 = Timer
For L1 = 1 To 100
Workbooks("Fic_A.xlsx").Sheets("FA1").Activate
Range(Cells(L1, 1), Cells(L1, 10)).Copy
Workbooks("Fic_B.xlsx").Sheets("FB1").Activate
ActiveSheet.Paste Range(Cells(L2, 1), Cells(L2, 10))
L2 = L2 + 1
Next L1
FIN3 = Timer

  • Même exemple que le 3 mais avec en préalable les fonctions suivantes pour accélérer le traitement contenu dans le sous-programme Accel_trait
__________________________________________________________________________________
Application.Calculation = xlManual 'calcul manuel
Application.DisplayAlerts = False 'suppression de l'affichage des alertes
Application.ScreenUpdating = False 'suppression de l'affichage des écrans
On Error Resume Next 'si erreur ne pas en tenir compte et continuer à la ligne suivante
Application.ReferenceStyle = xlR1C1 'formules écrites en L1C1
__________________________________________________________________________________

Call Accel_trait
L2 = 1
Debut4 = Timer
For L1 = 1 To 100
Workbooks("Fic_A.xlsx").Sheets("FA1").Activate
Range(Cells(L1, 1), Cells(L1, 10)).Copy
Workbooks("Fic_B.xlsx").Sheets("FB1").Activate
ActiveSheet.Paste Range(Cells(L2, 1), Cells(L2, 10))
L2 = L2 + 1
Next L1
FIN4 = Timer
Call Decel_trait
 
Mon souci porte sur l’utilisation des ordres SELECT et ACTIVATE et surtout de leur temps de traitement.

voir l'instruction SET
Dim WS_1 as worksheet, WS_2 as worksheet, WS_3 as Worksheet
set WS_1 =Workbooks("Fic_A.xlsx").Sheets("FA1")
set WS_2 =Workbooks("Fic_B.xlsx").Sheets("FB2").

sans select ni activate il suffit ensuite de qualifier l'objet auquel s'applique l'instruction
WS_1.Range(Cells(L1, 1), Cells(L1, 10)).Copy
WS_2.Paste Range(Cells(L2, 1), Cells(L2, 10))
 
Bonjour David,

Trop pris par mon problème, j'ai omis la plus élémentaire des politesses et je vous prie de m'en excuser.

Cordialement
RichardS
 
Il n'y a pas de soucis, c'est mon rôle de le rappeler... 🙂
Et en plus j'ai vu tes anciens messages dans lesquels tu respectes ces principes.
Merci à toi
Bonne journée
 
Super cela fonctionne presque ...


erreur ci dessous


Je ne comprends d’autant moins pourquoi cela bug alors qu’avec les 2 autres instructions (rows) ci-dessous, cela fonctionne bien et même avec des temps excellents

50857,4805​
50858,1797​
0,6992​



En récapitulant, nous avons le meilleur temps cf n°test 6

Début​
Fin​
Delta​
n°test​
51933,1211​
51934,8672​
1,7461​
1​
51934,8672​
51937,6563​
2,7891​
2​
51937,6563​
51946,0313​
8,3750​
3​
51946,0469​
51951,9336​
5,8867​
4​
51951,9766​
51957,1758​
5,1992​
5​
51957,2031​
51957,8438​
0,6406​
6​

0,6406 c’est le meilleur temps mais 2 points que je ne comprends pas :
  • Pourquoi le range ne fonctionne pas ??
  • Pourquoi cela va-t-il encore plus vite que si j’écris sur la même feuille du même fichier ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
317
Réponses
5
Affichages
882
Réponses
15
Affichages
725
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…