IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Suppression lignes en fonction d'un filtre. Erreur 1004 [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    assistant contrôle de gestion
    Inscrit en
    Octobre 2013
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : assistant contrôle de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 208
    Points : 68
    Points
    68
    Par défaut Suppression lignes en fonction d'un filtre. Erreur 1004
    Bonjour à tous

    Je cherche à supprimer des données à l'aide d'un filtre. La base fait 35000 ligne et je filtre sur la colonne J avec le critere "PRIVATE". Cependant j'ai une erreur 1004 "la methode delete de la classe range a échoué.

    Pouvez vous m'aider à trouver d'ou vient le problème.

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub supprime2()
    Dim N As Long
    Application.ScreenUpdating = False
     
    With ThisWorkbook.Sheets("Data")
        .AutoFilterMode = False
        N = .Range("J" & .Rows.Count).End(xlUp).Row
        .Range("J1:J" & N).AutoFilter field:=10, Criteria1:="PRIVATE"
        If .Range("J1:J" & N).SpecialCells(xlCellTypeVisible).Count > 1 Then .Range("J2:J" & N).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        .AutoFilterMode = False
    End With
     
    End Sub

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si ton filtre ne remonte aucun résultat, alors ta plage des cellules visibles est nulle, d'où un problème pour la supprimer

    sachant que supprimer des lignes filtrées, c'est très gourmand en temps de traitement, surtout s'il y a des milliers de lignes et que les données ne sont pas triées ... est-ce qu'un export des données à conserver et une suppression de la feuille source serait envisageable dans ton contexte ?

    avec l'outil Filtre Avancé, on peut recréer à l'identique ta base initiale, épurée des éléments voulus


    un exemple, attention à bien tester ça sur un fichier brouillon car ça supprime la feuille initiale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub supprime2()
    Dim ShSource As Worksheet: Set ShSource = ThisWorkbook.Sheets("Data")
    Dim NomFeuille As String: NomFeuille = ShSource.Name
        ' création d'une feuille
        With Worksheets.Add
            ' écriture du critère du filtre
            .Range("A1").Value = ShSource.Cells(1, 20).Value ' titre de la colonne T
            .Range("A2").Value = "<>PRIVATE"                 ' critère
     
            ' application du filtre
            ShSource.Range("J1").CurrentRegion.AdvancedFilter xlFilterCopy, .Range("A1:A2"), .Range("J4")
     
            ' suppression de la zone de critère
            .Range("A1:A3").EntireRow.Delete
     
            ' suppression de la feuille initiale
            Application.DisplayAlerts = False: ShSource.Delete: Application.DisplayAlerts = True
     
            ' nomme la nouvelle feuille par le nom de l'ancienne feuille
            .Name = NomFeuille
        End With
    End Sub
    le résultat devrait être instantané, même pour 35 000 lignes

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    Bonjour,

    une rapide suppression peut se faire par formule de calculs puis par tri afin d'effacer un unique bloc de lignes !



    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Membre du Club
    Homme Profil pro
    assistant contrôle de gestion
    Inscrit en
    Octobre 2013
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : assistant contrôle de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 208
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    si ton filtre ne remonte aucun résultat, alors ta plage des cellules visibles est nulle, d'où un problème pour la supprimer

    sachant que supprimer des lignes filtrées, c'est très gourmand en temps de traitement, surtout s'il y a des milliers de lignes et que les données ne sont pas triées ... est-ce qu'un export des données à conserver et une suppression de la feuille source serait envisageable dans ton contexte ?

    avec l'outil Filtre Avancé, on peut recréer à l'identique ta base initiale, épurée des éléments voulus


    un exemple, attention à bien tester ça sur un fichier brouillon car ça supprime la feuille initiale

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub supprime2()
    Dim ShSource As Worksheet: Set ShSource = ThisWorkbook.Sheets("Data")
    Dim NomFeuille As String: NomFeuille = ShSource.Name
        ' création d'une feuille
        With Worksheets.Add
            ' écriture du critère du filtre
            .Range("A1").Value = ShSource.Cells(1, 20).Value ' titre de la colonne T
            .Range("A2").Value = "<>PRIVATE"                 ' critère
     
            ' application du filtre
            ShSource.Range("J1").CurrentRegion.AdvancedFilter xlFilterCopy, .Range("A1:A2"), .Range("J4")
     
            ' suppression de la zone de critère
            .Range("A1:A3").EntireRow.Delete
     
            ' suppression de la feuille initiale
            Application.DisplayAlerts = False: ShSource.Delete: Application.DisplayAlerts = True
     
            ' nomme la nouvelle feuille par le nom de l'ancienne feuille
            .Name = NomFeuille
        End With
    End Sub
    le résultat devrait être instantané, même pour 35 000 lignes
    Merci Joel pour ton code cel fonctionne bien le probleme c'est que derrier j'ai un TCD qui à pour source une plage dynamique et du coup avec cette méthode je supprime ma référence de base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(#REF!$A$1;;;NBVAL(#REF!$A:$A);NBVAL(#REF!$1:$1))
    Comment remédier à cela?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Copier coller et supprimer des lignes filtrées Erreur 1004
    Par Denis_67 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/04/2015, 09h30
  2. Macro suppression lignes en fonction plusieurs conditions
    Par edouardM dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/07/2013, 16h32
  3. Suppression ligne en fonction de deux cellules
    Par jamesdu75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/04/2013, 17h27
  4. [XL-2007] désigner des lignes en fonction d'un filtre avancé
    Par fumetsu dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/10/2010, 21h55
  5. VBS - Suppression ligne en fonction d'un texte
    Par arnaudbzh dans le forum VBScript
    Réponses: 1
    Dernier message: 09/07/2009, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo