Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…