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 :

Supprimer lignes des cellules visibles [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de anarchiste-mouton
    Homme Profil pro
    ceci
    Inscrit en
    Décembre 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ceci
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 69
    Par défaut Supprimer lignes des cellules visibles
    Bonsoir,

    Je ne suis pas du tout un expert en vba, j'utilise principalement l'enregistreur de macro et après j'essaie de simplifier le code. Seulement là je me retrouve bloqué..

    Voici ce que j'ai :

    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
    23
     
    Sub Macro1()
     
    Dim ext As Worksheet
     
     
    Set ext = ThisWorkbook.Worksheets("Extraction")
     
     
    ' Mise en formes du tableau
     
        ext.ListObjects.Add(xlSrcRange, Range("$A$1:$D$3000"), , xlYes).Name = "Tableau2"
     
     
     
    ' Tri radical du tableau
        ext.ListObjects("Tableau2").Range.AutoFilter Field:=8, Criteria1:="=0", Operator:=xlOr, Criteria2:="=#N/A"
        ext.Range("Tableau2").SpecialCells(xlCellTypeVisible).Select
    'Tout fonctionne jusqu'à la ligne qui suit
        Selection.EntireRow.Delete
        ext.ListObjects("Tableau2").Range.AutoFilter Field:=8
     
    End Sub
    Auriez-vous une idée pour contourner ce problème?

    Cordialement

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par anarchiste-mouton Voir le message
    Bonjour,

    Une piste peut-être dans ce message qui reste à adapter : vba-recherchev-puis-supprimer-ligne-entiere

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste mais lis les commentaires dans le code :
    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 Test()
     
        Dim Plage As Range
        Dim Critere1 As String
        Dim Critere2 As String
     
        With Worksheets("Extraction")
     
            Set Plage = .Range("A1:D3000")
            Critere1 = "=0"
            Critere2 = "=#N/A"
     
            'dans ton exemple, tu indique le champ 8 mais ta plage ne fait que 4 champs ?
            'ici, sur le 1er champ, adaptes :
            Plage.AutoFilter 1, Critere1, xlOr, Critere2
            .AutoFilter.Range.EntireRow.Delete
            Plage.AutoFilter
     
        End With
     
    End Sub
    J'ai fais le test sur une simple plage et pas sur un objet tableau, à toi d'adapter

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Re,

    J'ai creusé un peu et il est possible de supprimer les lignes visibles issues d'un filtrage (entêtes de colonnes avec !) mais le tableau doit être remis sous forme de simple plage :
    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
    23
    24
    25
     
    Sub Test()
     
        Dim Tbl As ListObject
        Dim Plage As Range
        Dim Critere1 As String
        Dim Critere2 As String
     
        With Worksheets("Extraction")
     
            Set Tbl = .ListObjects("Tableau2")
     
            Set Plage = Tbl.Range
            Critere1 = "=0"
            Critere2 = "=#N/A"
     
            Tbl.Unlist '<--- supprime la fonction de liste sous forme de tableau, redevient sous forme de simple plage
     
            Plage.AutoFilter 1, Critere1, xlOr, Critere2
            .AutoFilter.Range.EntireRow.Delete
            Plage.AutoFilter
     
        End With
     
    End Sub

  5. #5
    Membre confirmé Avatar de anarchiste-mouton
    Homme Profil pro
    ceci
    Inscrit en
    Décembre 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ceci
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 69
    Par défaut
    Bonjour à vous et merci d'avoir pris le temps de me répondre.


    J'ai repris le code de Theze mais il me fallait garder les entêtes, donc après bidouillage j'obtiens ça :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Sub Macro1()
     
    Dim res, ext As Worksheet
    Dim Tbl As ListObject
    Dim Plage As Range
    Dim Critere1, Critere2 As String
     
    Set res = ThisWorkbook.Worksheets("Résultat")
    Set ext = ThisWorkbook.Worksheets("ExtractionIFF")
     
     
    ' Mise en formes du tableau (je montre pas tout mais effectivement le tableau doit avoir  8 colonnes)
        ext.ListObjects.Add(xlSrcRange, ext.Range("$A$1:$H$3000"), , xlYes).Name = "Tableau2"
     
     
    ' Tri radical du tableau
        ext.Range("Tableau2[#Headers]").Copy Destination:=res.Range("A6:H6")
    With ext
     Set Tbl = .ListObjects("Tableau2")
     Set Plage = Tbl.Range
            Critere1 = "=0"
            Critere2 = "=#N/A"
        Tbl.Unlist
        Plage.AutoFilter 8, Critere1, xlOr, Critere2
        .AutoFilter.Range.EntireRow.Delete
        Plage.AutoFilter
    End With
        ext.Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        res.Range("A6:H6").Cut Destination:=ext.Range("A1:H1")
        ext.Range("A1:H1").AutoFilter
     
     
    End Sub
    Un grand merci, ça fonctionne parfaitement

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

Discussions similaires

  1. [XL-2000] Supprimer ligne si cellule d'une colonne = 0, sur une plage de cellules
    Par audesara dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/05/2011, 16h16
  2. [XL-2007] Coller sur des cellules visibles
    Par Loki83 dans le forum Excel
    Réponses: 1
    Dernier message: 20/07/2010, 00h09
  3. [XL-2002] Sélection des cellules visibles d'une colonne dans un filtre
    Par pitoumad dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/06/2010, 11h33
  4. supprimer lignes des tables automatiquement
    Par fangriz dans le forum JDBC
    Réponses: 8
    Dernier message: 24/08/2009, 00h35
  5. VBA XLS : Adapter hauteur ligne à des cellules fusionnées
    Par CB56 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/11/2006, 18h01

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