comment ce debarasser d'une boucle (loop) ?

Poto

XLDnaute Occasionnel
bonjour a tous,

je cherche a me debarasser d'une boucle afin d'optimiser l'execution de plusieur macro...

voici la boucle :

Dim Var As Integer
Var = 30 'par exemple

Cells.EntireRow.Hidden = False

For i = 5 To Range("a" & Application.Rows.Count).End(xlUp).Row
If IsNumeric(Cells(i, 1).Value) And Cells(i, 1).Value > Var Then
Cells(i, 1).EntireRow.Hidden = True
End If
Next i

cette boucle permet de cacher les lignes ayant une valeur supérieur à "Var" (30 dans l exemple actuel) dans la colonne A en partant de la cell A5;
le probleme c est que ma feuille fait pres de 4500 lignes, donc je cherche vraiment à optimiser cette étape ...

quelqu'un aurait il une petite idée ??


merci d'avance à tous
 

Poto

XLDnaute Occasionnel
Re : comment ce debarasser d'une boucle (loop) ?

Re,

Avec l'enregistreur de macro on obtient:

1 - pour les vides:

Code:
Selection.AutoFilter Field:=1, Criteria1:="="

2 - pour les non vides:

Code:
Selection.AutoFilter Field:=1, Criteria1:="<>"
Suffit d'y penser.

A+

merci encore, mais j'avais penser deja a enregistrer une macro pour trouver cette solution, mais probleme....
comment je fais pour rajouter un 3eme critere a l autofilters ??
car j'ai deja "<11" et "=***" ...

pk n'autoriser que 2 criteres :(:(
 

Poto

XLDnaute Occasionnel
Re : comment ce debarasser d'une boucle (loop) ?

bonjour

il es possible d'accélérer la première macro en chargeant la colonne A en mémoire
toto=range("a:a").value
puis dans la boucle, regarder toto(i,1)


merci tbft,
mais pour des raisons d'optimisation et de propreté je vais rester avec les autofilters, je veux vraiment laisser tomber les boucles, car j'ai remarquer une enorme baisse de perf si j'execute la macro contenant la boucle plusieurs fois d'affiller... apres 4, 5 executionsi, je galere a scroller dans ma page, ca devient super lent et ca n'arrete pas de faire des bip bip bip super ennuyeux...

donc je cherche vraiment une solution alternative aux boucles

merci quand meme ;)
 

Poto

XLDnaute Occasionnel
Re : comment ce debarasser d'une boucle (loop) ?

update

j'ai reussi a faire fonctionner les filtres en utilisant advancedfilter et un criteriarange, mais le probleme que je penser être inhérent a la boucle est toujours present ...
ie : apres plusieurs executions de la macro contenant advancedfilter (ou la boucle) le fait de scroller sur la page est quasiment impossible, ca saccade, chaque ligne met pres d'une seconde a apparaitre...

quelqu'un a une petite idée comment régler ce probleme ????


merci vraiment d'avance
 
Dernière édition:

Poto

XLDnaute Occasionnel
Re : comment ce debarasser d'une boucle (loop) ?

As tu essayer d'adapter comme ceci ?

ActiveSheet.Range("$A$1:$A$46").AutoFilter Field:=1, Criteria1:="<11", Operator:=xlOr, Criteria2:=Array("=***","=")

salut habitude,

d'après mes tests, il semble qu'il ne soit pas possible de mettre un opérateur avant Array ...

sinon, malgrès ce que je pensais en premier lieux, la perte de perf ne semble pas être inhérente a une boucle (pour une fois) mais à une raison encore indéterminée...

donc, merci a tous pour votre aide afin de ce debarasser d'une boucle car avec toutes les infos ici, ca aidera surement quelqu'un d'autres ;)

merci encore à tous :)
 
G

Guest

Guest
Re : comment ce debarasser d'une boucle (loop) ?

Bonjour Poto, Habitude,

apres plusieurs executions de la macro contenant advancedfilter (ou la boucle) le fait de scroller sur la page est quasiment impossible, ca saccade, chaque ligne met pres d'une seconde a apparaitre...

Sur certaine opération, il semblerait en effet qu'excel, utilisant beaucoup de ressources pour les accomplir, finisse par ralentir, lorsqu' elles sont répétées de nombreuses fois au cours d'une même session.

Problème amélioré avec la version 2007.

A+
 

Staple1600

XLDnaute Barbatruc
Re : comment ce debarasser d'une boucle (loop) ?

Bonjour à tous



Si j'étais vous, je laisserai de côté AutoFilter pour aller voir son pote AdvancedFilter ;)
(ce que semble avoir fait Poto le 08/07 à 17h58)

mais comme critère, j'utiliserai une formule .

Exempe,: =ET(ESTNUM(A2);A2>13)

On peut insérer un nom contenant Var
et bien sur tout cela peut se faire par macro.
 
Dernière édition:

Poto

XLDnaute Occasionnel
Re : comment ce debarasser d'une boucle (loop) ?

Bonjour à tous



Si j'étais vous, je laisserai de côté AutoFilter pour aller voir son pote AdvancedFilter ;)
(ce que semble avoir fait Poto le 08/07 à 17h58)

mais comme critère, j'utiliserai une formule .

deja tester, bcp plus flexible que autofilter mais ca n'arrange pas mes affaires malgres tout ...

il semble vraiment que mon probleme ne vienne pas d'une boucle, donc ce fil n'a plus de raison d'etre ....

merci encore a tous de votre aide et dsl de t'avoir deranger Hasco

bonne journee a tous
 

Poto

XLDnaute Occasionnel
Re : comment ce debarasser d'une boucle (loop) ?

Bonjour Poto, Habitude,



Sur certaine opération, il semblerait en effet qu'excel, utilisant beaucoup de ressources pour les accomplir, finisse par ralentir, lorsqu' elles sont répétées de nombreuses fois au cours d'une même session.

Problème amélioré avec la version 2007.

A+

je suis sous Excel 2007 et malheureusement, le probleme est toujours present meme apres redemarrage d'excel .... donc je suis bloquer ...

a savoir que c'est un projet pro, si quelqu'un souhaite ce prendre la tete avec moi pour decouvrir le pourquoi du comment, n'hesiter pas a me contacter par MP...
(sans pretention, ca commence a être du serieux niveau code, donc si vous avez dans l'idée de me proposer un application.screenupdating = false ou autre du meme acabit, c'est gentils mais on est un peu au dessus de ca ;) )

merci encore a tous ;)
 

Discussions similaires

Réponses
7
Affichages
453

Statistiques des forums

Discussions
312 789
Messages
2 092 120
Membres
105 221
dernier inscrit
Lavibkr