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 :

Duplication d'une ligne filtrée


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Inscrit en
    Juillet 2004
    Messages
    803
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 803
    Points : 231
    Points
    231
    Par défaut Duplication d'une ligne filtrée
    Bonjour à tous,

    Un petit souci que certains d'autres vous qualifieraient de basic

    J'ai un tableau de x colonnes
    Je souhaite recopier les lignes automatiquement après l'appui sur un bouton "ajout'
    Jusque là tout va bien mais lorsque j'effectue un filtre sur une colonne cela ne marche plus
    un petit fichier joint sera je pense plus explicite


    Votre aide me serait précieuse

    Merci encore par avance

    A+

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est normal, le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig = Range("A65500").End(xlUp).Row + 1
    ne vous renvoie pas obligatoirement la dernière ligne renseignée en colonne A, en fonction de ce que votre filtre affiche.

    Faites un essai en pas-à-pas en filtrant les lignes vides.

    la variable DerLig renverra = 4

    Deux solutions :

    réafficher tout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Worksheets("Feuil1").FilterMode = True Then
        Worksheets("Feuil1").ShowAllData
    End If
    DerLig = Range("A65500").End(xlUp).Row + 1
    ou (ce code renvoie la dernière ligne renseignée même s'il y a des lignes vides entre des lignes renseignées et/ou si les lignes sont filtrées. Regardez ici les explications de Ouskel'n'or : http://www.developpez.net/forums/sho...d.php?t=331890).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig = Range("A1").SpecialCells(xlCellTypeLastCell).Row+1

  3. #3
    Membre actif
    Inscrit en
    Juillet 2004
    Messages
    803
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 803
    Points : 231
    Points
    231
    Par défaut [Excel] Ajout de Lignes
    Merci encore pour les explications

    En fait , si je rajoute toutes les lignes , je perd l'interet de pouvoir effectuer une recopie de la ligne qui m'interesse
    Le filtrage me permet de selectionner la ligne à recopier
    Une autre solution serait peut-être de filtrer et de selectionner par une case à cocher la ligne à recopier
    Mais là je ne sais pas faire........


    A+

  4. #4
    Invité
    Invité(e)
    Par défaut
    OK, mais justement avez-vous essayé simplement la 2ème solution qui est (et donc de ne pas utiliser du tout la 1ère solution) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig = Range("A1").SpecialCells(xlCellTypeLastCell).Row+1
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig = Range("A65500").End(xlUp).Row + 1

  5. #5
    Membre actif
    Inscrit en
    Juillet 2004
    Messages
    803
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 803
    Points : 231
    Points
    231
    Par défaut [Excel] Ajout de Lignes
    Oui , je viens de refaire un essai
    cela se traduit toujours par la prise en compte de la dernière ligne
    autrement dit , il ne tient pas compte du filtre donc des données filtrées

    désolé
    A+

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 909
    Points
    55 909
    Billets dans le blog
    131
    Par défaut
    A ce stade de la discussion, pourrais-tu repréciser en français ce que tu souhaites réaliser?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonsoir tlm,

    Il y a un truc qui me chipote dans le code du fichier joint, dans un premier temps on copie la ligne de la cellule active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not Intersect(ActiveCell, Range("A5:D" & DerLig)) Is Nothing Then
        Range(Cells(Lig, "A"), Cells(Lig, "D")).Copy Destination:=Cells(DerLig, "A")
    et ensuite on écrase les valeurs de cette ligne copiée par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Cells(DerLig, "A") = Cells(DerLig - 1, "A")
        Cells(DerLig, "B") = Cells(DerLig - 1, "B")
        Cells(DerLig, "C") = Cells(DerLig - 1, "C")
        Cells(DerLig, "D") = Cells(DerLig - 1, "D")
    Pierre (que je salue au passage ) à raison de demander plus de précisions parce que là c'est nébuleux.
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  8. #8
    Membre actif
    Inscrit en
    Juillet 2004
    Messages
    803
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 803
    Points : 231
    Points
    231
    Par défaut [Excel] Ajout de Lignes
    Mon problème est donc le suivant :

    Je souhaite rajouter une ligne de façon automatique ( bouton ) en recopiant les données de la dernière ligne active
    La ligne recopiée est le resultat d'un filtre actif à partir d'une colonne quelconque


    A+

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 909
    Points
    55 909
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Si j'ai bien compris, voici un code qui recopie la dernière ligne visible suite à un tri sur la ligne qui suit la dernière ligne utilisée en A...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Range("a65536").End(xlUp).EntireRow.Copy _
            Destination:=Range(Range("a65536").End(xlUp)(2), Range("a65536")).SpecialCells(xlCellTypeVisible)(1)
    Est-ce cela que tu souhaites?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre actif
    Inscrit en
    Juillet 2004
    Messages
    803
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 803
    Points : 231
    Points
    231
    Par défaut Duplication d'une ligne filtrée
    Nickel..................

    Mille et un mercis pour ce code d'enfer
    mais quelques explications pour le neofite que je suis me permettrait de ne pas appliquer sans comprendre
    Peux-tu si j'osais me donner la démarche qui t'a amenée à ce resultat
    et surtout pourquoi le code proposait ne fonctionner pas


    Encore merci à tous pour cet aide

    A+

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 909
    Points
    55 909
    Billets dans le blog
    131
    Par défaut
    Puisque l'on doit copier la dernière ligne visible à la suite de l'application du filtre, on est d'accord que la cellule visible suivante est forcément vide, et est forcément celle qui suit la toute dernière cellule saisie, masquée ou pas. C'est dans cette cellule (ou ligne) que l'on copiera la dernière valeur visible.

    Il est acquis que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("a65536").End(xlUp)
    pointe vers la dernière cellule visible en A.

    Il faut donc sélectionner la première cellule visible qui suit celle-là. Pour cela, on va déterminer la plage des cellules visibles entre la ligne qui suit la dernière visible remplie (la dernière du filtre, donc) et le bas de la colonne.
    On obtient cette plage de cellules en utilisant un objet Range avec une syntaxe différente que lorsque l'on renvoie l'adresse directe d'une plage. La syntaxe utilisée ici passe deux cellules en arguments de l'objet Range, la cellule du coin supérieur gauche et la cellule du coin inférieur droit de la plage, grâce à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Range("a65536").End(xlUp)(2), Range("a65536")).SpecialCells(xlCellTypeVisible)
    . Cette plage renverra toujours (sauf si saisie sur 65536 lignes) plusieurs cellules. Il faut pointer vers la première de cette plage, ce qui est fait en ajoutant (1) à la plage, pour "isoler" la première cellule de cette plage...

    Pour une compatibilité XL2007, on peut utiliser le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("a" & Rows.Count).End(xlUp).EntireRow.Copy _
            Destination:=Range(Range("a" & Rows.Count).End(xlUp)(2), Range("a" & Rows.Count)).SpecialCells(xlCellTypeVisible)(1)
    qui tient compte du nombre de lignes disponibles sur une feuille, quelle que soit la version XL utilisée.
    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Membre actif
    Inscrit en
    Juillet 2004
    Messages
    803
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 803
    Points : 231
    Points
    231
    Par défaut Duplication d'une ligne filtrée
    Merci tes explications

    Je mesure ici le chemin qui me separe de l'excellence

    Bravo et merci encore à tous pour ce forum et votre aide précieuse..

    A+

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 909
    Points
    55 909
    Billets dans le blog
    131
    Par défaut
    Il y avait peut-être plus simple, mais je n'ai pas trouvé...

    Bonne continuation
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. Duplication d'une ligne dans une même table
    Par poitierjohan dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/02/2013, 20h46
  2. Duplication d'une ligne
    Par FST_PFE dans le forum VBA Access
    Réponses: 1
    Dernier message: 01/11/2008, 09h46
  3. Comment descendre d'une ligne dans un champ avec filtre automatique
    Par frolland46 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/06/2008, 20h15
  4. Réponses: 7
    Dernier message: 03/10/2007, 19h06
  5. Supprimer une ligne suite à un filtre
    Par andreditdd dans le forum Bases de données
    Réponses: 5
    Dernier message: 24/05/2007, 18h01

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