Copier coller ligne vba

Fermé
-
 carine -
Bonjour,
Je suis novice puisque c'est ma première tentative, et je cherche une solution à un pb:
Le but de l'exercice est de réaliser un fichier récapitulatif.
J'ai plusieurs onglets actifs dont je souhaite mettre les données à la suite sur un onglet récapitulatif.
Je prends les données du 1er onglet et je les colle dans la récap:
Range("A4").Select
Sheets("Onglet1").Select
Rows("4:4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Récap").Select
Range("A4").Select
ActiveSheet.Paste
Je copie les données de l'onglet 2 que je colle dans l'onglet récap à la suite des données déjà copiées précédemment:
Sheets("Onglet2").Select
Rows("5:5").Select
ActiveWindow.SmallScroll Down:=-15
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap").Select
Range("A4").Select
Selection.End(xlDown).Select
ActiveSheet.Paste
Et ainsi de suite pour les autres onglets...

J'ai créé un bouton et tout se met bien à jour lorsque je clique.
Mon problème est que lorsque j'ajoute des données sur l'onglet 1, je ne récupère pas la dernière ligne. Je ne récupère les données que jusqu'à la dernière ligne -1.

Comment modifier le code pour obtenir la dernière ligne? Je pensais que XLDown suffisait.

Petite précision, en amont de tout cela j'ai ajouter la suppression de toutes les données de l'onglet récap. Et cela fonctionne très bien:
Rows("4:4").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp

Merci pour votre aide car je suis un peu perdue.

Carine

A voir également:

3 réponses

Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
525
Bonjour,

Une bonne habitude à prendre : supprimer les "select" autant que possible.
Voici tes 2 macros revues et corrigées.
Sub Test()
'Je prends les données du 1er onglet et je les colle dans la récap:
With Sheets("Onglet1")
.Range(.Rows("4:4"), .Rows("4:4").End(xlDown)).Copy
ActiveSheet.Paste Destination:=Worksheets("Récap").Range("A4")
End With
'Je copie les données de l'onglet 2 que je colle dans l'onglet récap à la suite des données déjà copiées précédemment:
With Sheets("Onglet2")
.Range(.Rows("5:5"), .Rows("5:5").End(xlDown)).Copy
ActiveSheet.Paste Destination:=Worksheets("Récap").Range("A4").End(xlDown).Offset(1)
End With
Application.CutCopyMode = False
End Sub

Sub Suppression()
With Worksheets("Récap")
.Range(.Rows("4:4"), .Rows("4:4").End(xlDown)).Delete Shift:=xlUp
End With
End Sub


A+
Un grand merci Gyrus. Grace à vos conseils je vais progresser!
Bonjour et bonjour le forum

En gros avec End(xlDown) on trouve en descendant la cellule pleine juste avant la première cellule vide, même s'il y a des données en dessous; avec End(xlUp) on part de la dernière cellule de la colonne et on remonte jusqu'à trouver la première cellule pleine.
Dans la majorité des cas il vaut mieux utiliser End(xlUp) Plutôt que End(xlDown)

Par ailleurs, l'utilisation des Select alourdit le code, mais surtout la vitesse d'exécution. A éviter donc

Proposition:
'Je prends les données du 1er onglet et je les colle première ligne libre de 'récap:
DerRecap = Sheets("Récap").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("Onglet1").Rows("4:" & Range("A" & Rows.Count).End(xlUp).Row).Copy Sheets("Récap").Range("A" & DerRecap)

'Je copie les données de l'onglet 2 que je colle dans l'onglet récap à la 'suite des données déjà copiées précédemment:
DerRecap = Sheets("Récap").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("Onglet2").Rows("5:" & Range("A" & Rows.Count).End(xlUp).Row).Copy Sheets("Récap").Range("A" & DerRecap)


A+
Re et bonjour GYRUS

Un poil trop tard, avec en plus une erreur sur le référencement des feuilles
'Je prends les données du 1er onglet et je les colle première ligne libre de 'récap:
DerRecap = Sheets("Récap").Range("A" & Rows.Count).End(xlUp).Row + 1
With Sheets("Onglet1")
.Rows("4:" & .Range("A" & Rows.Count).End(xlUp).Row).Copy Sheets("Récap").Range("A" & DerRecap)
End With

'Je copie les données de l'onglet 2 que je colle dans l'onglet récap à la 'suite des données déjà copiées précédemment:
DerRecap = Sheets("Récap").Range("A" & Rows.Count).End(xlUp).Row + 1
With Sheets("Onglet2")
.Rows("5:" & .Range("A" & Rows.Count).End(xlUp).Row).Copy Sheets("Récap").Range("A" & DerRecap)
End With


A+