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

XL 2016 méthode clear et range trop grand

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 !

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,
 
Bonjour le fil, sebastien450, eriiiic

Dans les versions récentes d'Excel, on peut utiliser le filtre automatique pour filtrer sur une couleur.
On peut donc le piloter par VBA et effacer la plage filtrée selon la couleur.
 
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:
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,
 
1 : en général au début des macros on déclare et initialise les variables, ici decharge est un paramètre

2 : parce que des cellules ont été comptées et n'ont pas été effacées dans la boucle car n < decharge.
 
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
 
- 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
7
Affichages
703
Réponses
28
Affichages
2 K
Réponses
2
Affichages
1 K
  • Question Question
XL 2019 Code VBA
Réponses
12
Affichages
837
  • Question Question
Microsoft 365 Programme trop lent
Réponses
12
Affichages
1 K
Réponses
1
Affichages
741
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…