Microsoft 365 suppression des lignes d'un sous-total à 0

Chrisdb115

XLDnaute Nouveau
Bonjour à tous, je suis toute nouvelle sur ce forum. Je maîtrise assez bien l'outil Excel mais pas du tout les macros. Je me permets donc d'appeler à l'aide.

Mon problème est le suivant. : j'ai un fichier de plus de 100'000 lignes déjà organisé en sous-totaux. Je voudrais supprimer toutes les lignes qui constituent les sous-totaux =0 pour ne garder que les autres. Faire ça à la main prendrait des heures. J'ai tenté de trouver des macros déjà faites mais ne maîtrisant pas le langage j'ai un peu de mal à adapter.

Merci d'avance pour votre aide :)

Chris
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour et bienvenue sur le forum,

Vous avez excel 365, faites ceci avec Power Query.
Nommer la totalité de votre tableau, si ce n'est pas un tableau structuré
Importer les données dans une nouvelle feuille (PowerQuery)
Supprimer la requête powerquery puis le tableau source.

Joignez un fichier exemple anonymisé (on a pas besoin des 100000 lignes)
Cordialement
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Voici, je vous ai laissé la requête power query.
Pour la voir, dans la feuille PQ_Toto_ZERO faites un click-droit dans le tableau vert puis ->modifier
Vous verrez la fenêtre de l'éditeur de power query s'ouvrir avec :
A droite un panneau listant les étapes de la requête
si vous cliquez sur le nom d'une étape vous verrez son résultat s'afficher dans le panneau du milieur

A gauche vous aurez la liste des requêtes du classeur.

Vous pouvez aussi de retour dans la feuille excel afficher les requêtes par la ruban 'Données' et le bouton 'Requêtes & connexions'

Si ce n'est à faire qu'une fois, vous pourrez supprimer la requête à partir d'une de ces liste, si vous le souhaitez et si nécessaire

Au fait, j'ai nommé la totalité de votre tableau : 'T_Datas'

Cordialement
 

Pièces jointes

  • Toto egal 0.xlsx
    27.3 KB · Affichages: 6
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Chrisdb115, Hasco, le forum,

Voyez le fichier .xlsm joint et la macro affectée au bouton :
VB:
Sub Supprimer_sous_totaux_nuls()
Dim t, colref%, P As Range, tablo, deb&, i&, v, j
t = Timer
colref = 2 'colonne de référence, à adapter
Set P = [A1].CurrentRegion
Application.ScreenUpdating = False
P(1).EntireColumn.Insert 'insère une colonne auxiliaire
With Range(P.Columns(0), P)
    tablo = .Formula 'matrice des formules, plus rapide
    deb = 2
    '---analyse des lignes et repérages---
    For i = 2 To UBound(tablo)
        If tablo(i, colref + 1) Like "*SUBTOTAL*" Then
            v = P(i, colref)
            For j = deb To i
                tablo(j, 1) = IIf(v = 0, "#N/A", 1) 'repère
            Next j
            deb = j
        End If
    Next i
    '---restitution, tri et suppression---
    .Columns(1) = tablo
    .Sort .Cells(1), xlAscending, Header:=xlYes 'tri pour regrouper et accélérer
    On Error Resume Next 'si aucune SpecialCell
    .Columns(1).SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete 'supprime les valeurs d'erreur
    P(1, 0).EntireColumn.Delete 'supprime la colonne auxiliaire
End With
With ActiveSheet.UsedRange: End With 'actualise les barres de défilement
MsgBox Format(UBound(tablo) - P.Rows.Count, "#,##0") & " lignes supprimées en " & Format(Timer - t, "0.00 \sec")
End Sub
Grâce au repérage et au tri de regroupement elle est très rapide.

Pour tester j'ai recopié le tableau sur 100 000 lignes, la macro s'exécute chez moi en 0,77 seconde.

Autre avantage de cette méthode : les formats sont conservés.

A+
 

Pièces jointes

  • Exemple(1).xlsm
    21.3 KB · Affichages: 7

Discussions similaires

Réponses
2
Affichages
140

Statistiques des forums

Discussions
312 094
Messages
2 085 242
Membres
102 833
dernier inscrit
Hassna