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 :

Dernière Ligne Visible (Filtre Elaboré) - VBA


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
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2015
    Messages : 60
    Par défaut Dernière Ligne Visible (Filtre Elaboré) - VBA
    Bonjour,

    Je fais appel à vous car j'ai un nouveau soucis sur Excel.
    Lorsque je fais un filtre élaboré, j'ai un grand tableau avec des cellules visibles et d'autres masquées.
    Du coup, le tableau a des lignes 3 puis 20,21,22,23, puis 26 et ainsi de suite ...
    J'aimerais extraire ces données dans un autre tableau.
    Pour ce faire, j'ai commencé par faire une macro qui va chercher la dernière ligne comprenant une valeur pour délimiter l'extraction.
    Le problème est que la macro va récupérer la première ligne qui contient une valeur après des cellules masquées.
    Je m'explique : au lieu d'aller en bas du tableau comme je le désire, la macro s'arrête à la première valeur trouver après des lignes masquées.

    J'espère que c'est assez clair, je vous remercie pour votre aide !

    Cordialement,
    Elie

  2. #2
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut
    Bonjour Elie,
    Non, ce n'est pas très clair (au moins pour moi).
    Pourrais-tu déjà mettre ton code, ça donne une idée de ce que tu veux faire et de la méthode utilisée.
    Pour ta dernière ligne est-ce que tu pars du bas de la feuille ou du début du tableau ; en général on part du bas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim DerLg as Integer
    DerLg = Range("A" & Rows.Count).End(xlUp).Row
    Ou si tu travaille avec un tableau Inséré (Menu Insertion / Tableau), tu n'as même pas besoin de chercher ta dernière ligne, pour sélectionner une colonne d'un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("NomDuTablo[NomColonne]").Select
    A +

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ce n'est pas plus clair pour moi également

    si c'est uniquement la plage filtrée que tu souhaites récupérer, utilise la méthode SpecialCells (avec la constante xlCellTypeVisible) pour générer une plage ne contenant que le résultat de ton filtrage, que tu pourras facilement copier ailleurs


    sinon, le filtre avancé permet d'exporter les données, ce qui est plus simple
    (pour exporter vers une autre feuille, on doit valider l'application du filtre depuis la feuille de destination)

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Utiliser un filtre pour récupérer des données suivant critères est vraiment très efficace et rapide .... La clé pour la récupération est le Range.SpecialCells(xlCellTypeVisible)

    Voir exemple ci-dessous, à adapter
    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
    Sub Supprime_OldEnregitr()
    ' Supprime les enregistrements du Tableau2 mis à VRAI
    '
        Dim Wsh As Worksheet
        Dim TabRng As Range
     
    ' Initialisation
        Set Wsh = ThisWorkbook.Worksheets("ALERTE")
        Application.ScreenUpdating = False
     
        If Wsh.AutoFilterMode = True Then Wsh.AutoFilterMode = False
     
     
        Set TabRng = Wsh.ListObjects("Tableau2").Range
        Debug.Print TabRng.AddressLocal, TabRng.Rows.Count
     
    'On filtre
        TabRng.AutoFilter Field:=3, Criteria1:="VRAI"
        Debug.Print TabRng.SpecialCells(xlCellTypeVisible).AddressLocal
     
    ' On enleve ce qui est visible après avoir enlevé le header
        Set TabRng = TabRng.Offset(1, 0).Resize(TabRng.Rows.Count - 1, TabRng.Columns.Count)
        TabRng.SpecialCells(xlCellTypeVisible).EntireRow.Delete
     
        TabRng.AutoFilter
        Application.ScreenUpdating = True
    End Sub

  5. #5
    Expert éminent
    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
    Par défaut




    Bonjour, bonjour !

    Juste en passant, pas besoin de la méthode SpecialCells sur une plage filtrée pour utiliser les méthodes Copy & Delete
    car par défaut elles ne s'appliquent qu'aux cellules visibles !


    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2015
    Messages : 60
    Par défaut
    Bonjour,

    Merci pour vos réponses.
    En fait je réalise le filtre élaboré sur un premier document, et je veux extraire les données sur un autre document.

    Je m'explique par étapes :

    - doc 1 : filtre élaboré sur ensemble des données (pour enlever les lignes vides etc)
    - copie des données du filtre élaboré du doc 1
    - doc 1 : trouver la dernière ligne non-vide (pour que l'extraction des documents futurs se fasse toute seule et se placent directement à la suite (en bas de la liste du doc 2))
    - doc 2 : extraction données du doc 1
    - copie extraction données doc 1 sur doc 2 (directement en bas du tableau à la suite de la dernière ligne non-vide)

    Ainsi, cela me permettra d'avoir une base de données qui s'automatise à chaque fois que les utilisateurs rentrent des données dans le doc 1.
    Je pense pas l'avoir expliqué de façon plus simple mais je ne sais pas comment l'expliquer autrement !

    Je vous mets les morceaux de macros que j'ai pour le moment.

    EXTRACTION

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub testextraction()
    ' testextraction Macro
    Dim classeurSource As Workbook, classeurDestination As Workbook
    'ouvrir le classeur source (en lecture seule)
    Set classeurSource = Application.Workbooks.Open("D:\Users\Documents\Base Données Test\doc 1", , True)
    'définir le classeur destination
    Set classeurDestination = ThisWorkbook
    'copier les données de la feuille"essai" du classeur source vers la feuille "aaa" du classeur destination
    Windows("doc 1.xlsm").Activate
    End Sub
    COPIE DONNEES VISIBLES

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub SelectionVisible()
    ' SelectionVisible Macro
        Range("A4").Select
        Selection.End(xlDown).Select
        Derniereligne = Selection.Row
        Range("A4:E" & Derniereligne).Select
        Selection.SpecialCells(xlCellTypeVisible).Select
        Selection.Copy
        ActiveSheet.Paste
     
    End Sub
    DERNIERE LIGNE VIDE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Dernièrelignevide()
     
    ' Dernièrelignevide Macro
        Selection.End(xlDown).Select
        ActiveCell.Offset(1, 0).Activate
     
    End Sub
    Donc voilà, désolé si je ne suis pas très clair et si les macros ressemblent à rien mais j'ai commencé VBA que récemment et j'ai vraiment du mal.

    Je vous remercie encore.

    Elie

Discussions similaires

  1. [XL-2007] Trouver la dernière ligne après filtre et coller une selection
    Par Systémicien dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/03/2011, 08h19
  2. Dernière ligne visible d'un Datagridview
    Par sibama dans le forum VB.NET
    Réponses: 2
    Dernier message: 22/12/2008, 00h54
  3. [VBA-E] Connaître la 1ère & la dernière ligne sur un filtre AUTO
    Par CléoB dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/02/2007, 18h09
  4. Excel VBA - Dernière ligne d'une colonne
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/12/2005, 17h33
  5. [JList] rendre visible la dernière ligne ajoutée
    Par Mille sabords dans le forum Composants
    Réponses: 3
    Dernier message: 12/04/2005, 10h32

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