XL 2016 méthode clear et range trop grand

sebastien450

XLDnaute Occasionnel
Bonjour,
J'ai la macro suivant qui fonctionne mais bien sur ne convient pas pour une plage de donnée aussi importante.
Comment faire ? Un tableau géant ? =)

VB:
Application.ScreenUpdating = False: Application.EnableEvents = False: Application.Calculation = xlCalculationManual
Dim Cel As Range

    For Each Cel In Range("D5:EHL222") ' definir le range
    If Cel.Interior.ColorIndex <> 43 Then Cel.Clear ' si pas en vert => out
    Next
Application.EnableEvents = True: Application.ScreenUpdating = True: Application.Calculation = xlCalculationAutomatic

Merci à vous,
 

job75

XLDnaute Barbatruc
Bonsoir sebastien450, eriiiic, JM,

La méthode Union pédale dans la choucroute si la plage est constituée de plusieurs centaines ou milliers de zones disjointes.

Il faut décharger régulièrement la plage :
VB:
Sub a()
Dim decharge&, c As Range, P As Range, n&
decharge = 100 'modifiable
With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlCalculationManual: End With
For Each c In Range("D5:EHL222")
    If c.Interior.ColorIndex <> 43 Then n = n + 1: Set P = Union(IIf(P Is Nothing, c, P), c)
    If n = decharge Then P.Clear: Set P = Nothing: n = 0
Next
If n Then P.Clear
Application.Calculation = xlCalculationAutomatic: Application.EnableEvents = True
End Sub
A+
 
Dernière édition:

sebastien450

XLDnaute Occasionnel
Bonjour,
En effet je n'ai pas été explicite mais il s'agit d'une durée d'exécution.
J'avoue ne pas comprendre la méthode Union, pourtant je la voit depuis bien longtemps...

J'ai une première question sur le code : Pourquoi ne pas avoir mis le code suivant en tout début d'exécution

VB:
With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlCalculationManual: End With

Et enfin , pourquoi rappeler le code suivant juste avant la fermeture :
Code:
If n Then P.Clear

merci pour votre aide,
 

eriiic

XLDnaute Barbatruc
La méthode Union pédale dans la choucroute si la plage est constituée de plusieurs centaines ou milliers de zones disjointes.
Pour confirmer...
Je m'étais amusé à mesurer les temps pour 100 ajouts de cellules individuelles.
On voit qu'il croit constamment :


nbt
100​
0.008​
200​
0.016​
300​
0.039​
400​
0.063​
500​
0.109​
600​
0.148​
700​
0.203​
800​
0.266​
900​
0.344​
1000​
0.469​
et devient rapidement rédhibitoire.
On atteint la seconde vers 1500
eric
 

Discussions similaires

Réponses
22
Affichages
2 K

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib