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 des données filtrées dans un tableau [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Points : 25
    Points
    25
    Par défaut Supprimer des données filtrées dans un tableau
    Bonjour,

    Si je rédige un message aujourd'hui (ce que je n'ai pas fait depuis 2006) c'est que je suis totallement désespérée et que je sais que vous êtes formidable.

    J'ai un tableau (listobject) de plus de 5000 lignes et une trentaine de colonne. Je souhaite avoir une macro qui filtre ce tableau en fonction d'une valeur et supprime les lignes non filtrées (visibles). J'ai fait des recherches avec mon ami Google sur le web en anglais et en français, mais les solutions proposées ne fonctionnent pas chez moi et j'espère que vous pourrez me dire pourquoi.
    Je pourrais tout simplement faire une boucle et supprimer les lignes une par une, mais ça va mettre un temps fou. J'aimerai plutôt réussir à faire fonctionner les commandes "MaPlage.SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp" ou "MaPlage.EntireRow.Delete". Mais dans les 2 cas j'obtiens un message d'erreur "1004 : Impossible de déplacer les cellules d'une plage ou d'un tableau filtré".

    En réalité le message d'erreur ne me choque pas vraiment, car je n'arrive pas non plus à faire cette opération à la main. Ce que je ne comprends pas c'est que dans tous les forums que j'ai lu, les gens arrivent à faire fonctionner ces commandes.
    Je me demande s'il n'y a pas une erreur dans mon adressage ou la manière dont j'utilise mon tableau (listobject).

    Voici mon 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
    23
    24
     
    Sub Filtrer_Supprimer()
     
    Dim MonClasseur As Workbook
    Dim MonTableau As ListObject
     
    'Ouvrir le fichier
    Set MonClasseur= Workbooks.Open("\\Reseau\MesDocuments\Classeur1.xlsm")
     
    Set MonTableau = MonClasseur.Worksheets("Feuil1").ListObjects("MyTab")
     
    'Afficher toute la table
    If MonClasseur.Worksheets("Feuil1").FilterMode = True Then
        MonClasseur.Worksheets("Feuil1").ShowAllData
    End If
     
    'Filtrer les lignes à supprimer
    MonTableau.Range.AutoFilter Field:=28, Criteria1:="=FRANCE"
     
    'Supprimer les lignes
    'MonTableau.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
    MonTableau.DataBodyRange.EntireRow.Delete
     
    End Sub
    merci d'avance de m'avoir lu et pour vos réponses.

  2. #2
    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 idée simple : une fois le filtre appliqué, sélectionner les cellules visibles (voir du côté de la propriété SpecialCells)
    puis supprimer la sélection !
    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)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    j'ai essayé la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTableau.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
    mais j'ai l'erreur :
    "1004 : Impossible de déplacer les cellules d'une plage ou d'un tableau filtré".

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    J'ai déjà vu cela dans une feuille qui avait une colonne masquée.

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  5. #5
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 417
    Points : 16 260
    Points
    16 260
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With MonTableau.DataBodyRange.SpecialCells(xlCellTypeVisible)
            debut = .Row
            fin = Mid(.Address, InStrRev(.Address, "$") + 1, 10)
    End With
    Plage = debut & ":" & fin
    MonClasseur.Worksheets("Feuil1").Rows(Plage).Delete Shift:=xlUp
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    J'ai du mal à croire que j'ai été aussi stupide. Il y avait des colonnes masquées !!!

    c'est la ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTableau.DataBodyRange.EntireRow.Delete
    qui fonctionne.

    Un grand merci.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/11/2009, 19h20
  2. [ZF 1.6] Affichage des données récupérées dans un tableau
    Par MaT$oN dans le forum Zend_Db
    Réponses: 4
    Dernier message: 10/03/2009, 09h32
  3. Rapatrier des données filtrées dans une listbox
    Par starius dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/01/2009, 13h21
  4. Réponses: 3
    Dernier message: 24/08/2008, 03h30
  5. Réponses: 1
    Dernier message: 09/07/2007, 17h13

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