Suppression de lignes très lente

A

Arsène_Lupin

Guest
Bonjour,

J'ai une macro qui filtre une base de données, en masquant les enregistrements non concernés par une recherche.

Je souhaite supprimer ces lignes masquées. J'ai donc fait une boucle For...To...Next:

For i=4 to DerListing
if rows(i).hidden=true then rows(i).delete shift:=xlup
next i

Cette boucle met 4 minutes pour traiter 888 lignes!!!

Ca vient de la commande "delete qui est très lente, car si je met autre chose dans la boucle (ex: if rows(i).hidden=true then rows(i).hidden=false) la macro s'éxécute instantanément...

Comment peut-on contourner cette lenteur tout en supprimant les lignes?

Merci de me faire part de vos lumières
 
M

Munchkin

Guest
Bonjour Arsène_Lupin LOL

En fait je ne sais pas si tu utilise

application.screenupdating

avant de commencer la suppression tu met application.screenupdating = false (cela permet de ne pas rafraichir l'écran et c'est ca qui mange ton cpu

puis après finir la suppression de lignes, tu fais Application.screenupdating = true

Voilà
Munchkin
 
A

Arsène_Lupin

Guest
J'ai bien "application.screenupdating=false" en début de procédure...

Je ne comprends vraiment pas pourquoi la boucle est si lente... surtout qu'il y a 2 jours la procédure se faisait en quelques secondes! QU'ai-je pu modifier pour ralentir autant le code???
 
J

Jean-Marie

Guest
Bonjour

Une suppression d'une ligne génère un événement de calcul des fichiers ouverts, ce qui augmente le temps d'exécution de ta macro.

Donc 2 possibilités :

- Faire une "union" des cellules, puis on supprime en 1 seule fois l'ensemble des lignes sélectionnées.

Worksheets("Sheet1").Activate
Set bigRange = Application.Union(Range("Range1"), Range("Range2"))
bigRange.Formula = "=RAND()"


- Modifier le mode de calcul en manuel, cela nécessite de connaître le mode au lancement, pour le restaurer à la fin de la macro.

SavModeCalcul = Application.Calculation
Application.Calculation = xlCalculateManual
.......
.......
Application.Calculation = SavModeCalcul


@+Jean-Marie
 
J

Jean-Marie

Guest
Bonsoir

Maintenant que tu as un peu plus de temps, vu la rapidité de la macro, implémente l'union dans ton code, et tu auras encore plus de temps.

Si tu veux des exemples de cette instruction, fait une recherche sur le forum à UNION dans le corps du message, ....

@+Jean-Marie
 
A

Arsène_Lupin

Guest
Bonjour,

Je pense que je vais laisser la procédure en l'état (sans union), car j'avais créé exprès un userform "barre de progression". Si la macro se déroule instantanément, ça fera moins classe!!! lol

Là je bosse sur un code d'importation de fichier texte (dur dur car il n'y a pas de nomenclature précise pour le nom d'une société donc pour les classer par ordre alphabétique pertinent il faut retraiter plein de cas).

Par exemple, si j'ai dans le fichier texte:

SA Truc
SARL de la Muche
SOCIETE les bidules
STE du Machin

Je veux retraiter en:

Truc
Muche (STE de la)
Bidules (Les)
Machin (STE DU)

Pas évident quand il y a des centaines de cas possibles...
 
J

Jean-Marie

Guest
Salut Arsène

Ta réponse me fait penser à une réponse Thierry sur ce fil Lien supprimé

Pour ton petit problème, il faudrait faire une table de correspondances des termes à chercher et des termes à remplacer, regarde le fichier joint (c'est en formules)

@+Jean-Marie
 

Pièces jointes

  • arsene.zip
    5.1 KB · Affichages: 40
A

Arsène_Lupin

Guest
Bonjour Jean-Marie,

J'avais opté pour une solution par macro, mais je vais me pencher sur la tienne! Merci pour tout.

Une dernière chose: y a t-il un moyen d'harmoniser l'espacement des chiffres dans des colonnes avec des formats type "téléphone" ou "nombres" ?

Par exemple j'ai des n° SIREN ( type "xxx xxx xxx), mais "111 111 111" et "888 888 888" n'ont pas du tout la même largeur dans excel... Ca ne fait pas super beau dans une colonne...

Peut-on y remédier?
 
A

Arsène_Lupin

Guest
Re Bonjour,

Je ne comprends plus rien.

Oubliez ma question précédente, car l'alignement des nombres se fait biensur Excel, mais pas pour les feuilles de mon fichier!

J'ai trouvé l'explication. Ma feuille est en zoom 75%, et les chiffres ne sont pas alignés. Si je mets en zoom 100%, les chiffres sont alignés!!!

Est-ce un bug d'affichage d'excel? Comment y remédier?
 

Discussions similaires

Statistiques des forums

Discussions
314 160
Messages
2 106 532
Membres
109 614
dernier inscrit
sebastienpopo