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 issues du filtrage d'un tableau structuré [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2022
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2022
    Messages : 60
    Par défaut Supprimer les lignes issues du filtrage d'un tableau structuré
    Bonjour,

    Dans un tableau structuré j'enregistre années après années les informations sur des adhérents de l'association.
    Pour alléger la base des données je souhaite réaliser au choix de l'utilisateur la suppression d'une ou plusieurs années (en partant toujours de la plus ancienne).
    Le code ci-dessous fonctionne lorsque je supprime l'année la plus ancienne ou ensemble plusieurs années anciennes jusqu'à N-1 (pas de suppression de l'année N bien sûr !). Mais me demande à chaque fois si je veux supprimer les lignes entières !
    En revanche si je n'ai que 2 années en historique la macro plante à la dernière ligne (.delete !!!!!!!) alors que le filtrage est bien effectif sur l'année N-1


    Merci de vos remarques pour me sortir de cette impasse.

    Cordialement

    ci-après le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ansupprimerDeb = FrmSuppression.TxtBoxAnDeb 'choix dans un formulaire de l'année n à supprimer
    ansupprimerFin = FrmSuppression.LstBoxAnFin.List(FrmSuppression.LstBoxAnFin.ListIndex) 'choix dans le formulaire de la dernière année à supprimer N+ ....
    Set tbStruc = SheetASSOC.Range("tblMembres").ListObject
    colAn = tbStruc.ListColumns("Année").Index 'renvoi le n°d'ordre de cette colonne
    With SheetASSOC.ListObjects("TblMembres")
         If ansupprimerFin <> ansupprimerDeb Then
                    .Range.AutoFilter field:=colAn, Criteria1:=">=" & ansupprimerDeb, Operator:=xlAnd, Criteria2:="<=" & ansupprimerFin
         Else: .Range.AutoFilter field:=1, Criteria1:=ansupprimerDeb
         End If
         '.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete     ' fonctionne (comme la variante ci-après) mais ...plantage quand il ne reste que 2 années (en cours et N-1) et la suppression concerne N-1
       End With
            tbStruc.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete 'variante qui plante également au même stade ! (mais fonctionne aussi dans les autres cas de figure)

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Bonjour,

    A tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Set tbStruc = Range("tblMembres").ListObject
        colAn = tbStruc.ListColumns("Année").Index 'renvoi le n° de cette colonne
        With tbStruc.DataBodyRange
            If ansupprimerFin <> ansupprimerDeb Then
                .AutoFilter field:=colAn, Criteria1:=">=" & ansupprimerDeb, Operator:=xlAnd, Criteria2:="<=" & ansupprimerFin
            Else
                .AutoFilter field:=colAn, Criteria1:=ansupprimerDeb   '---- ColAn et pas 1
            End If
            Application.DisplayAlerts = False        '--- pas de message effacer ligne entière (va le faire sans prévenir)
            .SpecialCells(xlCellTypeVisible).Delete
            Application.DisplayAlerts = True
            .AutoFilter              '--- réaffiche tout ce qui reste
        End With
    Cordialement.

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2022
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2022
    Messages : 60
    Par défaut
    Bonjour Eric,

    je te remercie pour ce retour.
    Si le DisplayAlerts est efficace pour l'effacement sans le message de confirmation, en revanche le problème subsiste lors de la suppression de l'avant dernière année quant il n'en restait que 2!
    Toujours le même plantage avec le Delete ....
    Je pourrai si besoin joindre un fichier test mais il me faudrait l'anonymiser .....et l'alléger de toutes les autres fonctionnalités inutiles
    On cherche encore svp et merci encore

    Cordialement

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Bizarre, je ne rencontre pas ce problème.
    Cordialement.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2022
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2022
    Messages : 60
    Par défaut
    Citation Envoyé par EricDgn Voir le message
    Bizarre, je ne rencontre pas ce problème.
    Cordialement.
    Bonjour Eric,

    je me préparais donc à configurer un fichier Test anonymisé pour aider à une meilleure appréhension du pb.
    Je me suis aperçu que j'avais masqué les colonnes B et C dans mon tableau structuré.
    En vérifiant avec tbStruc.DataBodyRange.Specialcells(xlCellTypeVisible).address j'ai eu confirmation de 2 areas ainsi définies A..:A....,D...:AD ... (zones OK).
    Cela ne pose pas de problème au code tbStruc.DataBodyRange.Specialcells(xlCellTypeVisible).Delete pour supprimer de A jusqu'à AD (donc même B et C) dans tous les cas ...... sauf lorsque je tente de supprimer une année seulement alors qu'il m'en reste 2 en historique (ex: si Années 2021 et 2022 en historique plantage du .Delete pour supprimer 2021. Mais si j'ai un historique avec 2018 à 2022 la suppression globale de 2018 à 2021 ne plante pas !).
    Toujours sans comprendre la raison du problème j'ai donc réaffiché les 2 colonnes masquées et MIRACLE ...... plus de plantage du .Delete

    J'espère que cette astuce aidera tout utilisateur qui rencontrerait ce problème.
    En te remerciant pour tes échanges
    Cordialement

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/01/2018, 16h15
  2. [XL-2013] Supprimer les lignes après un filtre dans un tableau
    Par iliesss dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/01/2018, 20h49
  3. Supprimer les lignes vides d'un document Word
    Par Jerfa dans le forum VBA Word
    Réponses: 4
    Dernier message: 28/08/2006, 16h12
  4. Réponses: 2
    Dernier message: 04/05/2006, 13h10
  5. supprimer les lignes vides?
    Par VinnieMc dans le forum Langage
    Réponses: 5
    Dernier message: 27/02/2006, 14h01

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