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
7
Affichages
312
Réponses
28
Affichages
970

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa