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

Excel Discussion :

Copie de données sur la dernière plage vide [XL-2013]


Sujet :

Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut Copie de données sur la dernière plage vide
    Bonjour à tous,

    Je souhaite copier les données d'une plage vers une plage d'un autre document, voici mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Destination.xlsm").Sheets("Feuil1").Range("A1:F1").Value = Workbooks("Source.xlsm").Sheets("Feuil1").Range("A1:F1").Value
    Ce code fonctionne, seulement je souhaiterais que la copie se fasse sur la dernière ligne vide afin d'éviter d'écraser le contenu existant du classeur de destination.

    J'ai naïvement essayé (erreur de syntaxe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Destination.xlsm").Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) & ":F" & Rows.Count).End(xlUp).Offset(0, 5).Value = Workbooks("Source.xlsm").Sheets("Feuil1").Range("A1:F1").Value
    Auriez-vous une idée pour réussir cela ?

    Merci d'avance et bonne journée à tous.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Juste un petit détail pour alléger ton code : il n'est pas indispensable, pour la destination, de donner l'ensemble de la plage, la première case suffit.

    Le problème de ton code, c'est que tu essaye de concaténer (&) une string (jusque là, ça va) avec une cellule, c'est à dire un objet alors qu'en fait, c'est le numéro de la ligne que tu veux.
    Tu n'as pas non plus indiqué dans quelle feuille tu recherches la dernière ligne.
    Autre détail : il est plus simple de faire un +1 qu'un Offset.

    Je te le fais en deux lignes pour que tu comprennes mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DerLigne = Workbooks("Destination.xlsm").Sheets("Feuil1").Cells(Rows.Count,1).End(xlUp).Row + 1
    Workbooks("Destination.xlsm").Sheets("Feuil1").Cells(DerLigne,1).Value = Workbooks("Source.xlsm").Sheets("Feuil1").Range("A1:F1").Value
    Personnellement, quand il y a des variables ou des valeurs calculée en jeu, je préfère utiliser Cells plutôt que Range, mais les deux peuvent être utilisés.

    Dernier détail : si tu veux passer par une variable comme je l'ai fait, DerLigne doit être déclaré en Long, comme toute variable faisant référence à un numéro de ligne.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Bonjour Menhir et merci de t'être penché sur mon problème.

    En effet, c'est bien le numéro de ligne qui m’intéressait, le code est plus simple et c'est bien mieux !

    J'ai essayé ton code, mais seule la premier cellule est remplie.

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    J'ai fait une erreur.
    Comme perso je fais généralement les copies de zone avec une Copy, je n'indique que la première cellule de la destination.
    Mais, avec ta méthode utilisant un "=", il faut effectivement donner toutes la zone.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DerLigne = Workbooks("Destination.xlsm").Sheets("Feuil1").Cells(Rows.Count,1).End(xlUp).Row + 1
    Workbooks("Destination.xlsm").Sheets("Feuil1").Range("A" & DerLigne & ":F"  & DerLigne).Value = Workbooks("Source.xlsm").Sheets("Feuil1").Range("A1:F1").Value

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Un grand merci Menhir, ton code fonctionne parfaitement !

    Pour info je remplace un code préalablement fait avec la fonction copy, mais je trouve ce principe plus simple.

    Encore merci et bonne journée !

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par atk_49 Voir le message
    Pour info je remplace un code préalablement fait avec la fonction copy, mais je trouve ce principe plus simple.
    Chacun son style et sa méthode.

    Moi j'aurais plutôt écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DerLigne = Workbooks("Destination.xlsm").Sheets("Feuil1").Cells(Rows.Count,1).End(xlUp).Row + 1
    Workbooks("Source.xlsm").Sheets("Feuil1").Range("A1:F1").Copy
    Workbooks("Destination.xlsm").Sheets("Feuil1").Cells(DerLigne,1).PasteSpecial(xlValue)

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

Discussions similaires

  1. [XL-2003] Erreur code:copie de données non vides sur une autre feuille
    Par Razekiel_ dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/04/2013, 08h08
  2. Réponses: 7
    Dernier message: 03/05/2012, 16h10
  3. [WS 2003] Copie de données sur redondant
    Par dev_php51 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 17/10/2011, 14h12
  4. Copier une plage et la coller dans la dernière plage vide
    Par mosta2010 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 25/03/2008, 20h00
  5. Réponses: 1
    Dernier message: 27/11/2007, 11h38

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