XL 2013 VBA Suppression de ligne sous condition

MONTREAL2020

XLDnaute Junior
Salut,
J'ai du mal à comprendre le bug d'une macro sur un tableau mis en forme.
Je vous joins mon fichier test , sur la Feuil1 la macro ne s'exécute pas contrairement à la Feuil2

Merci infiniment pour votre aide.
 

Pièces jointes

  • test.xlsb
    21 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonsoir MONTREAL2020,

Utilisez :
VB:
Sub Suppr()
Dim n&, P As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With ActiveSheet
    n = .Range("K" & .Rows.Count).End(xlUp).Row
    .Range("A1:k" & n).AutoFilter 11, "OUT"
    On Error Resume Next
    Set P = .Range("A2:K" & n).SpecialCells(xlCellTypeVisible)
    .Range("A1:k" & n).AutoFilter 'affiche tout
    '.ShowAllData 'ne foncyionne pas toujouts
    P.Delete xlUp
End With
Application.Calculation = xlCalculationAutomatic
End Sub
En effet avec le tableau structuré en 1ère feuille il faut tout afficher avant de supprimer.

Edit : sur un tableau structuré .ShiwAllData fonctionne seulement si le tableau commence en A1.

Il faut tout afficher par .AutoFilter

A+
 

Pièces jointes

  • test (1).xlsb
    21.6 KB · Affichages: 2
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Ma proposition :

@MONTREAL2020 :

*Vu que l'on a un tableau structuré il est dommage de ne pas tirer profit des avantages qu'offre le tableau structuré comme cela la macro fonctionne même si on déplace le tableau y compris sur une autre feuille ;)

*Merci de ton retour

@Phil69970
 

Pièces jointes

  • Suppression TS V1.xlsm
    22.4 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonjour MONTREAL2020, Phil69970, le forum,

J'ai corrigé le post #2 car .ShowAllData ne fonctionne pas toujours sur un tableau structuré.

Mais sur un grand tableau ni la solution du post #2 ni celle du post #3 ne sont satisfaisantes.

Sur un tableau de (seulement) 20 000 lignes voici les durées d'exécution chez moi :

- post #2 => 14 secondes

- post #3 => 37 secondes.

Pour aller vite il faut filtrer avec une formule entrée dans une colonne auxiliaire, voyez ce fichier (2) :
VB:
Sub Filtrer()
Application.ScreenUpdating = False
With [A1].CurrentRegion
    .Columns(11).EntireColumn.Insert 'colonne auxiliaire
    .Columns(11) = "=LN(RC[1]<>""OUT"")" 'formule pour filtrer
    .Columns(11) = .Columns(11).Value 'supprime les formules
    .Sort .Columns(11), xlAscending, Header:=xlYes 'tri pour regrouper et accélérer
    On Error Resume Next 'si aucune SpecialCell
    Intersect(.Columns(11).SpecialCells(xlCellTypeConstants, 16).EntireRow, .Cells).Delete xlUp 'supprime les valeurs d'erreur
    .Columns(11).EntireColumn.Delete 'supprime la colonne auxiliaire
End With
End Sub
Sur un tableau de 20 000 lignes cette macro s'exécute en 0,11 seconde.

A+
 

Pièces jointes

  • test (2).xlsb
    22.6 KB · Affichages: 2

Discussions similaires

Réponses
3
Affichages
306

Statistiques des forums

Discussions
312 508
Messages
2 089 137
Membres
104 045
dernier inscrit
Megajoules