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 :

Copier ligne et coller dernière ligne non vide [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut Copier ligne et coller dernière ligne non vide
    Bonjour, je rencontre un problème,
    J'ai 2 feuilles, la première nommée "FichierClient" et la seconde "ImportClient".
    Je voudrais que toutes les lignes (non vide) de la feuille "ImportClient" soient copiées à la dernière ligne non vide de "FichierClient".
    J'arrive à copier et coller, le problème est que si ma feuille "ImportClient" ne contient rien ma macro me renvoie une erreur.
    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Copie()
     
    Dim lgLigFinF As Long
     
        lgLigFinF = Worksheets("FichierClient").Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
     
         Worksheets("ImportClient").Range("A1:I" & [A1].End(xlDown).Row).Copy Destination:=Worksheets("FichierClient").Range("A" & lgLigFinF)
     
     
    End Sub
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut Bonjour,
    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
    Sub test()
    Dim L As Long
    L = Sheets("FichierClient").UsedRange.Rows.Count + 1
     
        FiltreActif Sheets("ImportClient").UsedRange, Sheets("Filtre").UsedRange, Sheets("FichierClient").Range("A" & L), False
    Sheets(FichierClient).Cells(L, 1).EntireRow.Delete
    End Sub
     
    Function FiltreActif(RangeSource As Range, CriterRange As Range, CopyRange As Range, Optional Unique As Boolean = True) As Boolean
    FiltreActif = False
    On Error Resume Next
     RangeSource.AdvancedFilter Action:= _
            xlFilterCopy, CriteriaRange:=CriterRange _
            , CopyToRange:=CopyRange, Unique:=Unique
            DoEvents
            If Err = 0 Then FiltreActif = True
            'MsgBox Err.Description
            On Error GoTo 0
    End Function
    dans la feuille Filtre il faut sur la première linge copier le tire de la colonne que tu veux test sur la 2 ixième la valeur du filtre en occurrence <>
    A1= "Titre1"
    A2=<>

  3. #3
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Je ne comprends l'histoire de la feuille "Filtre". Quel est l'intérêt?
    Ma feuille "ImportClient", reçoit en permanence de nouvelles entrées

  4. #4
    Invité
    Invité(e)
    Par défaut
    si tu passe par un filtre élaboré, tu copie tout en une seule passe.
    pas besoin de boucle, hors il te faut un feuille ou sauvegarder tes données (FichierClient),une ou ce trouve les données que tu veux importer (ImportClient) et une qui dit quoi importer (Filtre)

    je te raconte pas le gain de temps!
    Images attachées Images attachées  

  5. #5
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Le problème c'est que je n'ai pas de titre pour mes colonnes dans "ImportClient". Je me contente d'importer les données venant d'un .txt dans cette feuille...

  6. #6
    Invité
    Invité(e)
    Par défaut
    soit tu insert une ligne en A1 de ton fichier d'import et tu rajoute les titre de colonne, soit tu fait effectivement une boucle.

    mais je pense que la première solution t’apportera un gain de temps.

  7. #7
    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 674
    Points
    18 674
    Par défaut
    Bonjour,

    si c'est pour alimenter directement la feuille FichierClient,
    ce n'est pas la peine d'importer le fichier txt dans une feuille intermédiaire …

    C'est quoi comme fichier txt, possibilité de le mettre en pièce jointe ?

  8. #8
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Bonjour,

    si c'est pour alimenter directement la feuille FichierClient,
    ce n'est pas la peine d'importer le fichier txt dans une feuille intermédiaire …

    C'est quoi comme fichier txt, possibilité de le mettre en pièce jointe ?
    C'est un txt avec tabulation pour séparer les colonnes. Je ne peux le joindre étant donné que c'est une base client et donc personnel...

    Citation Envoyé par rdurupt Voir le message
    soit tu insert une ligne en A1 de ton fichier d'import et tu rajoute les titre de colonne, soit tu fait effectivement une boucle.

    mais je pense que la première solution t’apportera un gain de temps.
    Il met impossible de rajouter une ligne étant donné que je remet la feuille à 0 après chaque import et que je retravaille la feuille...

  9. #9
    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 674
    Points
    18 674
    Par défaut
    Et dans le fichier txt importé il y a des lignes vides ?‼

    Sinon à partir d'une feuille de calculs, le filtre ou le filtre avancé sont effectivement
    les solutions les plus simples à mettre en œuvre …

  10. #10
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Non il n'y a pas de lignes vides dans mon .txt

  11. #11
    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 674
    Points
    18 674
    Par défaut
    Dans ce cas c'est assez simple, tu peux déjà le faire manuellement
    tout en utilisant l'Enregistreur de macros donnant ainsi une base de code …

    Sinon consulter l'aide de la propriété Range.CurrentRegion en la combinant
    à la méthode Range.Copy en spécifiant son argument Destination


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


    __________________________________________________________________________________________
    Lire … C'est s'investir ! (Marc L)

  12. #12
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Oui mais mon problème est que j'aimerai que si la feuille "ImportClient" ne contient rien alors ne pas lancer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("ImportClient").Range("A1:I" & [A1].End(xlDown).Row).Copy Destination:=Worksheets("FichierClient").Range("A" & lgLigFinF)
    Ce code marche s'il y a quelque chose dans la feuille "ImportClient". Mais s'il n'y a rien le débogueur se lance...

  13. #13
    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 674
    Points
    18 674
    Par défaut
    Pas ce souci avec CurrentRegion

  14. #14
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Je met cela à la place de Destination?

  15. #15
    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 674
    Points
    18 674
    Par défaut
    Ben non vu que c'est l'origine (en la combinant à la méthode Range.Copy) :

    Worksheets("ImportClient").[A1].CurrentRegion.Copy Worksheets("FichierClient").Cells(lgLigFinF, 1)


    Ou bien encore en corrigeant la logique de la ligne source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        With Worksheets("ImportClient")
            .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp)).Copy Worksheets("FichierClient").Cells(lgLigFinF, 1)
        End With


    Enfin parmi divers moyens s'il est vraiment nécessaire de vérifier si la zone contient quelque chose, il y a par exemple

    If Worksheets("ImportClient").[A1].CurrentRegion.Cells.Count > 1 then


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


    __________________________________________________________________________________________
    On ne dit pas une biroute mais une route à deux voies …

  16. #16
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("ImportClient")
            .Range(.[A1], .Cells(.Rows.Count, 1).End(xlUp)).Copy Worksheets("FichierClient").Cells(lgLigFinF, 1)
        End With
    Ce code fonctionne mais il ne me copie que la cellule A1...

  17. #17
    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 674
    Points
    18 674
    Par défaut
    Oui c'est un exemple sur la première colonne, modifier le 1 par le numéro de la dernière colonne …

    Donc c'est plus simple via CurrentRegion

    Sinon voir aussi les propriétés Offset et UsedRange


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


    __________________________________________________________________________________________
    Les bourses ne témoignent pas l'état des économies, mais de la psychologie des investisseurs ! (Françoise Giroud)

  18. #18
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    En effet ça marche parfaitement bien!

    Merci 1000 fois!

    J'ai encore une dernière petite question au final
    Est-il possible de faire un test de sorte à ne copier que les lignes non existantes?
    Je m'explique, je voudrais comparer la valeur de la ligne de la colonne A de la feuille "ImportClient" qui contient le nom et prénom du client à la colonne A de la feuille "FicheClient" qui contient également le nom et prénom, de sorte à éviter les doublons.
    Merci d'avance!

  19. #19
    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 674
    Points
    18 674
    Par défaut
    Je vois déjà trois manières de le faire, tout dépend du nombre de lignes à traiter …

    S'il n'y en a pas des milliers, regarder l'aide et son exemple de la méthode Range.Find


    __________________________________________________________________________________________
    Des chercheurs qui cherchent, on en trouve. Des chercheurs qui trouvent, on en cherche ! (Charles De Gaulle)

  20. #20
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Justement le nombre de lignes peut varier étant donné que c'est un import de txt d'une base client. Tout dépend si l'utilisateur pensera à le faire régulièrement ou pas...

    En fait la ou je bloque c'est pour le test.
    Je n'arrive pas à combiner le test avec le code de copie que tu m'as communiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("ImportClient")
            .Range(.[A1], .Cells(.Rows.Count, 11).End(xlUp)).Copy Worksheets("FichierClient").Cells(lgLigFinF, 1)
        End With

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Dernière cellule non vide et ligne correspondante
    Par Phixidor dans le forum Excel
    Réponses: 3
    Dernier message: 29/03/2013, 11h53
  2. [XL-2010] Dernière cellule non vide d'une ligne et simplification code
    Par Ditch3122 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/07/2012, 20h48
  3. Dernière cellule non vide d'une ligne
    Par rapheb dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/11/2011, 06h45
  4. [XL-2003] code copier formule jusqu'à la dernière ligne
    Par ridokou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/02/2011, 14h56
  5. compter sur une ligne à partir de derniere cellule non vide
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/04/2009, 18h23

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