XL 2013 VBA Suppression de ligne sous condition

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

Dernière édition:
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
265
Réponses
1
Affichages
204
Réponses
8
Affichages
195
Retour