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 :

Trouver la dernière ligne après filtre et coller une selection [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Trouver la dernière ligne après filtre et coller une selection
    Bonjour à tous,

    tout d'abord merci à tous les membres actif pour leur participation à la résolution des problématiques que des "gens" commes moi pouvont rencontrer. (en esperant un jour pouvoir aider à mon tour)

    Ceci étant (désolé pour le titre du post, un peu barbare), je recherche le code vba me permettant de faire un filtre spécifique, et de coller une selection après la dernière ligne du resultat du filtre, pour l'instant 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
     
    Selection.AutoFilter
        ActiveSheet.Range("$A$7:$G$43").AutoFilter Field:=5, Criteria1:=Sheets("choix_percage").Range("R2").Value
     
        'MASQUE 
        Sheets("Masque").Select
        Range("A4:E8").Select
        Selection.Copy
        Sheets("Impression").Select
        L = Sheets("Impression").Range("A65536").End(xlUp).Row
        ActiveSheet.Paste
        'Test de la dernière et pour l'instant c'est faux
        MsgBox ("dernière ligne:" & L)


    PS le problème que je rencontre est que ma selection n'est pas collée à la suite de mon tableau filtré, mais en plus pas du tout dans le bonne colonne==>E7, alors qu'il faudrait la collé en A"End(xlUp).Row"

    merci d'avance.

  2. #2
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour et bienvenue sur DVP

    Le souci que tu rencontre est que le Filtre auto masque les lignes, mais ne les supprime pas (heureusement...).
    Donc ta dernière cellule de donnée d'une colonne, n'est pas celle que tu vois avec le filtre, mais celle qui existe sur la feuille entière..

    une possibilité : récupérer le N° de ligne de ta dernière cellule de la colonne A si c'est celle du critère de filtre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub IdeeDeSouluce()
    Dim cell As Range
    Dim lngNumLigne As Long
     
    For Each cell In ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible)
        lngNumLigne = cell.Row
    Next cell
    MsgBox lngNumLigne
    End Sub
    A partir de là tu as la ligne en-dessous de laquelle tu veux faire ton insert..

    cordialement,

    Didier

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    merci Ormonth de t'être penché sur le problème.

    Voilà ce que j'ai fais du coup

    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
     
     
    'feuil15, lancement macro machine rotative
    'module
     
    'SUPPRESSION LIGNE VIDE
     
        For l = Cells(65256, 2).End(xlUp).Row To 8 Step -1
        If Cells(l, 2).Value = "" Then Cells(l, 2).EntireRow.Delete
        Next l
     
        'FILTRE DYNAMIQUE
         DL = Sheets("Impression").Range("B65536").End(xlUp).Row
         ActiveSheet.Range("$A$7:$G" & DL).AutoFilter Field:=5, Criteria1:=ActiveSheet.Range("R2").Value ' TEST VALIDE
     
     
        'MASQUE COMMENTAIRE
        Sheets("Masque").Select
        Range("A170:H270").Select
        Selection.Copy
        Sheets("Impression").Select
        Range("A" & (DL + 1)).Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
     
    'retour feuil15
     
    Sheets("impression").Range("A3").Value = Feuil15.CommandButton1.Caption
     
    ndl = Sheets("Impression").Range("G65536").End(xlUp).Row
    ActiveSheet.PageSetup.PrintArea = ("A1:G" & ndl + 1)
    ActiveWindow.SelectedSheets.PrintPreview
    et ça fonctionne, alors comme tu dis j'ai pris la dernière valeur du bas mais en colonne B pas A (car j'ai des cellules fusionnées)

    ça fonctionne correctemement sauf pour certaine ligne qui ne se supprime pas, une histoire que excel conserve d'ancienne données même si visuellement il n'y a plus rien, pour que cela fonciionne obligé de mettre une valeur dans la colonne b de la dite ligne et de supprimé, pour qu'elle soit à nouveau vide, et quand on lance la macro cette fois ça fonctionne. Une idée? car j'ai 70 fichier à allé cherché avec ma macro, etje ne voudrait pas tous les ouvrir pour corriger ceci (c'est pour ça que j'ai écris le code pour la supression de ligne vide=> à cause du filtre)

    merci

  4. #4
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Normalement, pour les données "fantômes" (souvent dues à des formatages antérieurs) divers possibilités à tester sur des copies :


    Donc une solutions automatisable si OK.

    Sinon, les cellules fusionnées sont à éviter quand on emploie du VBA, c'est la source de problèmes sans fin

    Mettre ta version d'Excel entre crochets : ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(65256, 2).End(xlUp).Row
    est obsolète et dangereux à partir de 2007, donc à abandonner depuis quelque soit la version, préférer une écriture du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Rows.Count, 2).End(xlUp).Select
    cordialement,

    Didier

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    c'est noté, je modifie, le rows c'est par rapport au fait que 2007 à beaucoup plus que 65xXX lignes possible (ça ne change rien pour la déclaration de variable? long==> +65000, interger==> +32000.?)

    je te remercie beaucoup pour le temps consacré à mon soucis à très bientot!

  6. #6
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Oui la syntaxe à abandonner vient du fait qu'à partir de 2007 on a 1 048 576 lignes, donc la notation en 65536 génère de gros risques dans la mesure où ça risque de bien marcher un certain temps et tout à coup, ça ne plante pas, mais il y a comme des trous

    Donc prendre l'habitude de passer par Rows.count fonctionne dans toutes les versions (au moins à partir de 2000) et ne pose pas de souci.

    Au niveau variable, count renvoie une valeur de type long donc limitée à 2 147 483 648 ce qui ne pose pas de souci pour le décompte des lignes, par contre, il peut y avoir problème sur le décompte des cellules :

    Pourquoi Worksheets(1).Cells.Count retourne-t-elle un message d’erreur sous Excel 2007 et suivants.

    cordialement,

    Didier

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    c'est noté didier.

    Pour mes futurs programme.

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

Discussions similaires

  1. Problème de filtre pour trouver la dernière ligne
    Par KekeStreet dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/12/2012, 14h12
  2. Comment trouver la dernière ligne de mon tableau?
    Par thenico35 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 03/03/2009, 14h35
  3. trouver la dernière ligne
    Par ghosty04 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/12/2008, 17h33
  4. [VBA-E] Trouver la dernière ligne vide
    Par electrosat03 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/01/2007, 20h11
  5. [VBA-E]comment trouver la dernière ligne contenan
    Par couscoussier dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/03/2006, 16h53

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