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

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