Macro très lente : possible de l'optimiser ?

Bonjour Eriiic,

J'ai beau essayé de comprendre, je n'y arrive pas. Ou alors ça fonctionne une fois sur 4...donc problème quelque part mais je ne vois pas où

Alors je vous joins le fichier (je vois à quoi vous faites allusion) et j'ai enlevé le tout, j'ai laissé uniquement la macro pour laquelle je cherche une amélioration

pour rappel, voilà le code de la partie qui ne va pas :

With Sheets("BD")
       '.Cells(2, 10).Resize(der_lign).Value = .Cells(2, 10).Resize(der_lign).Value  'ça je l'ai enlevé car dans la macro, ce sont les cellules contenant non qui doivent disparaitre
        If .FilterMode Then .ShowAllData
         .ListObjects("BD").Range.AutoFilter Field:=10, Criteria1:="non" 'si dans colonne J il y a le mot non, alors suppression
        .[A2].Resize(der_lign).EntireRow.Delete
      On Error Resume Next
       .ShowAllData
        On Error GoTo 0
    End With

En fait, les données de la feuille saisie se collent dans l'onglet BD (à la fin du tableau grâce à der_lign) et de là, il faudrait supprimer les lignes qui ont le mot "non" dans la colonne J et c'est là que ça pêche

En tout cas, merci pour tout

12macro.xlsm (98.24 Ko)

Bonjour,

essaie avec cette version.

Après ton collé il faut recalculer der_lign.

Je me demande si ce n'est pas le fait que ta plage soit en tableau qui le perturbe de temps en temps (?)

J'ai ajouté un .Rows.Hidden = False au cas où...

eric

17macro.xlsm (99.58 Ko)

Bonsoir,

Attention également à cette ligne ou une modifiée :

Application.Calculation = xlCalculationManual

En effet votre "non" en colonne J est issu d'un calcul donc cette ligne est à proscrire sinon plus de calcul donc cellules colonne J = à rien après votre copier/coller...

@ bientôt

LouReeD

Bonjour Eriiic,

alors que dire...UN ENORME MERCI ! ça fonctionne et effectivement, en faisant de la sorte, on gagne un temps considérable !

Bonjour LouReed,

bien vu pour le xlCalculationManual, je n'avais pas tilté que ça pouvait causer problème

=> ma macro initialement proche des 17 sec est descendue entre 1 et 2sec et je vous le dois à vous 2

alors vraiment, merci pour tout, pour les informations, explications, et le temps que vous avez mis pour m'aider

deux petites dernières questions :

- je regarde pour utiliser der_lign pour l'envoi de mes données sur un onglet (qui est initialement vierge)

du coup, der_lign me dit que la dernière ligne est le 1048576. Par contre, si je remplis les 2 premières, là ça fonctionne. (mais pas si je remplis qu'une seule ligne)

=> vous avez à quoi ça peut être dû ?

Bon au pire, je peux laisser les 2 premières de remplies mais tant qu'à apprendre, autant y aller à fond

- y-a-il un icône pour dire que le problème est résolu ?

en tout, quitte à me répéter, encore merci à vous 2

Bonjour.

Pour valider une solution et indiquer que le problème est résolu, tu cliques sur le bouton présent en haut à droite à côté du bouton CITER.

Cordialement, Greggy.

<bonjour,

- je regarde pour utiliser der_lign pour l'envoi de mes données sur un onglet (qui est initialement vierge)

du coup, der_lign me dit que la dernière ligne est le 1048576.

Parce que tu ne dois pas utiliser ce code :

der_lign = Sheets("BD").Cells(Rows.Count, 1).End(xlUp).Row

Qui part du bas et remonte pour trouver la dernière ligne. Comme ça tu l'as même si des cellules sont vides dans la colonne.

Ensuite tu testes :

If der_lign = 1 then
   'BD vide
else
   'y'a du boulot
endif

eric

Bonjour Greggy,

Nickel, merci

Bonjour Eriic,

Oui c'est exactement ça, je l'ai fait partir d'en haut pour descendre...

Problème résolu, merci

Rechercher des sujets similaires à "macro tres lente possible optimiser"