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 les lignes après un filtre dans un tableau [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut Supprimer les lignes après un filtre dans un tableau
    Bonjour
    je souhaite supprimer les lignes après un filtre sur deux colonnes F et G
    le filtre concerne les valeurs nul ou égale a zéro dans la même ligne
    j'ai bricolé ce code la mais mon tableau1 ne contient pas que 100 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Macro2()
     
    Sheets("test").ListObjects("Tableau1").Range.AutoFilter Field:=6, Criteria1:="=0", Operator:=xlOr, Criteria2:="="
    Sheets("test").ListObjects("Tableau1").Range.AutoFilter Field:=7, Criteria1:="=0", Operator:=xlOr, Criteria2:="="
    Rows("2:100").Delete
    ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=6
    ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=7
     
    End Sub
    Svp aidez moi a rédigé un code plus correcte

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Que veux-tu exactement dire par :
    j'ai bricolé ce code la mais mon tableau1 ne contient pas que 100 lignes
    Ta question serait-elle finalement "comment déterminer la dernière ligne remplie d'un tableau" ?

    Essaye s'il te plait de t'exprimer non pas comme tu le fais-là (par des affirmations tendant à laisser comprendre ce dont tu as besoin), mais en étant toujours clair et précis sur les tenants et les aboutissants souhaités. Cela ne mange pas de pain et permet d'éviter tout doute sur la nature exacte de la difficulté à résoudre.

  3. #3
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut
    Non pas la dernière remplie
    Je vous explique
    1- un filtre ( nul et égale à zéro)dans la colonne F Et G
    2- supprimé les lignes visible après ce filtre
    Avec Ça marche mais mon tableau contient plus que 100 lignes alors comment éviter chaque fois de modifier le code
    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Tu continues à t'exprimer par "voie détournée"
    Je vais donc en faire tout autant
    Si tu veux que je m'exprime sans laisser le moindre doute, fais-en autant.
    Regarde ce que retourne :
    MsgBox Range("tableau1").Address
    MsgBox Range("tableau1").Rows.Count
    le reste coule de source.

  5. #5
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut
    Citation Envoyé par unparia Voir le message
    Tu continues à t'exprimer par "voie détournée".
    Non Mr pourquoi tu me juge comme ça ?
    Je suis faible en français et j'essaie le maximum d'exprimé pour posé le problème et en plus j'ai utilisé le mot bricolage parce que j'ai sentie que mon code n'a aucun sens si le tableau dépasse 100 lignes

    Merci

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut Supprimer des lignes suivant critères avec la méthode AdvancedFilter
    Bonjour,
    Une solution avec le flltre avancé d'excel VBA méthode AdvancedFilter de l'objet Range)

    Avant de commencer, lire ce tutoriel Les filtres avancés ou élaborés dans Excel

    Manuellement voici les étapes à suivre après avoir placé les critères dans la zone des critères
    1. Lancer le filtre avancé d'excel
    2. Sélectionner la zone des données filtrées
    3. Supprimer les lignes visibles
    4. Effacer le filtre


    En vba un exemple dans ce billet Supprimer des lignes suivant critères avec la méthode AdvancedFilter
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut
    Merci Mr Philippe pour votre exemple et tutoriel c'est un outil très intéressant , maintenant j'ai bien compris le filtre élaboré
    et voici une Solution proposé par Mr Daniel
    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
    Sub test()
      Dim Plage As Range, I As Long, J As Long
      With Sheets("test").ListObjects("Tableau1")
        .Range.AutoFilter Field:=6, Criteria1:="=0", Operator:=xlOr, Criteria2:="="
        .Range.AutoFilter Field:=7, Criteria1:="=0", Operator:=xlOr, Criteria2:="="
        Set Plage = .Range.Offset(1).Resize(, 1)
        Set Plage = Plage.Resize(Plage.Count - 1)
        Set Plage = Plage.SpecialCells(xlCellTypeVisible)
        For J = Plage.Areas.Count To 1 Step -1
          For I = Plage.Areas(J).Count To 1 Step -1
            Plage.Areas(J)(I).EntireRow.Delete
          Next I
        Next J
        .Range.AutoFilter Field:=6
        .Range.AutoFilter Field:=7
      End With
    End Sub
    Ou bien
    Par Mr Lz
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Sub DelFilteredRows()
    '
    '
        Dim tbl As ListObject
        Dim visiblebodyRange As Range, areaRange As Range
     
        ' Au cas où le nb de lignes du Tableau à suppr. serait important
        ' et/ou qu'il contienne des formules
        ' et/ou que Worksheet_Change contienne du code
        With Application
            .Calculation = xlCalculationManual
            .EnableEvents = False
            .ScreenUpdating = False
        End With
     
     
        Set tbl = ThisWorkbook.Worksheets("test").ListObjects("Tableau1")
        With tbl
            With .Range
                .AutoFilter Field:=6, Criteria1:=0, Operator:=xlOr, Criteria2:=""
                .AutoFilter Field:=7, Criteria1:=0, Operator:=xlOr, Criteria2:=""
            End With
     
            ' SpecialCells retourne une erreur (non trappable à prio.)
            ' si rien n'est trouvé. Donc si aucune ligne après filtrage
     
            ' le Set plante
            On Error Resume Next
                Set visiblebodyRange = .DataBodyRange.SpecialCells(xlCellTypeVisible)
            On Error GoTo 0
     
            If Not visiblebodyRange Is Nothing Then
                For Each areaRange In visiblebodyRange.Areas
                    areaRange.EntireRow.Delete
                Next areaRange
            End If
     
            With .Range
                .AutoFilter Field:=6
                .AutoFilter Field:=7
            End With
        End With
     
        With Application
            .Calculation = xlCalculationAutomatic
            .EnableEvents = True
            .ScreenUpdating = True
        End With
     
    End Sub

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/09/2013, 18h30
  2. Supprimer les lignes d'une table dans une autre table
    Par blastmind dans le forum SAS Base
    Réponses: 2
    Dernier message: 28/04/2009, 14h17
  3. [XL-2003] (Cacher) modifié en : Supprimer les lignes vides dans un tableau
    Par azerty1956 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 15/04/2009, 18h12
  4. Comment mettre les lignes d'un fichier dans un tableau en shell
    Par Ombrius dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 23/10/2006, 12h34
  5. Réponses: 14
    Dernier message: 19/11/2005, 18h56

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