VBA autofilter & optimisation

Bonjour,

J'ai un problème avec la méthode autofilter. Je l'utilise pour supprimer les lignes avec une cellule vide (la 1ère).

...
With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
End With

With Range("A1:G3000")
    .AutoFilter Field:=1, Criteria1:=vbNullString
    .CurrentRegion.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With

With Application
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
End With
...

Le problème, c'est que dès que j'active cette portion dans mon code, le filtre met plusieurs minutes à s'achever, alors que manuellement c'est quasiment instantané. En divisant la plage de cellule par deux, c'est guère mieux.

De plus le process excel.exe en mémoire passe joyeusement de 40Mo à 750 Mo. Ce qui fait planter certains postes.

Y'a t-il un moyen d'améliorer tout ça ?

Salutations.

N.

Bonjour,

Peux-tu faire une copie de la feuille avec seulement quelques lignes

et indiquer le critère de suppression lignes

Amicalement

Claude

Je ne sais pas comment insérer de copie d'écran, désolé.

Voici à quoi le tableau ressemble

A Matricules Rubriques Base1 Montant1 Base2 Datedéb Datefin

B 0000000001 1335 87

C 0000000001 1846

D ( vide ) 1335

La 1ère ligne contient les en-tête de colonne

Le filtre est fait sur le 1er champs qui s'appelle matricule. S'il est vide (vbNullString) il est supprimé.

Au départ 90% des lignes possèdent un champs matricule vide.

re,

Non pas de copie d'écran, un fichier avec seulement une vingtaine de lignes

joindrefichier

Ok, j'ai compris

Le voici

-- Jeu Nov 25, 2010 3:49 pm --

Je viens de réaliser que l'autofiler avec vbNullString comme critère ne fonctionne tout simplement pas.

il se contente de supprimer la première occurrence et basta.

Si le critère est autre (un caractère quelconque) le filtre est appliqué.

Testé avec ceci

Sub test()

    With ActiveSheet
        If .AutoFilterMode = False Then .Cells(1, 1).AutoFilter
        .Range("A1").AutoFilter Field:=1, Criteria1:=vbNullString
        .Range("A1").CurrentRegion.Offset(1, 0).SpecialCells _
            (xlCellTypeVisible).EntireRow.Delete
   End With

End Sub

Mais cela n'a peut-être pas de rapport avec mon problème de départ

44exemple.xlsx (8.45 Ko)

Bonjour,

On va faire un filtre élaboré (+ simple d'emploi)

Tu veux supprimer quelles lignes ?

celles qui n'ont pas de matricules ?

celles qui n'ont pas de rubriques ?

ou les 2, ou autres ?

Précise ta demande

Amicalement

Claude

dubois a écrit :

Tu veux supprimer quelles lignes ?

Pour commencer, celles qui n'ont pas de matricule.

(et merci pour ton aide, au fait)

re,

Sub FiltreVides() 'colonne A
'Macros par Claude Dubois pour "FlameOn" Excel-Pratique le 26/11/10
Dim Lg%
    Lg = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    Range("L2") = "=a2="""""
    Range("a1:g" & Lg).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
    Range("L1:L2"), Unique:=False
        On Error Resume Next
    Range("a2:a" & Lg).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        ActiveSheet.ShowAllData
End Sub

Claude

édit: code revu

Rechercher des sujets similaires à "vba autofilter optimisation"