VBA - Assembler des lignes nouvelle feuille [Résolu/Fermé]

Signaler
Messages postés
23
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
28 décembre 2009
-
derout
Messages postés
23
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
28 décembre 2009
-
Bonjour,

Je désirerai créer une macro qui copierait les lignes de 3 feuilles dans une 4ème feuille.
le problème que je souhaite résoudre est de parvenir à copier les nouvelles lignes sans que celles-ci n'écrasent celle qui ont été copié précédement. Pour cela il faut definir la formule qui permette à la macro de détecter la 1ère ligne vide.

Voici un échantillon du fichier sur lequel je dois travailler:

https://www.cjoint.com/?fng3zhfQTA

Merci pour votre aide,


Derout

2 réponses

Messages postés
23
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
28 décembre 2009
1
Toujours personne pour m'aider?

J'ai réalisé le début du code qui me permet:

* de créer la nouvelle feuille (celle où les données des 3 autres feuilles doivent être collées)
*d'importer les données de la 1ère feuille avec le titre

Voici le fichier que j'ai également légèrement modifié:

https://www.cjoint.com/?fmrbKpxwmo


Ce que ne parvient pas à trouver et qui concerne l'import des lignes des feuilles B et C, c'est la façon d'ecrire "pour la feuille "Assemblage", si la ligne est vide alors colle la feuille B puis si la ligne est vide alors colle la feuille C".

Voici mon code:

Sub add_sheet_and_copy_1st_sheet()

Dim new_sheet As Worksheet

Set new_sheet = Worksheets.Add
new_sheet.Name = "Assemblage"
Set new_sheet = Nothing

Sheets("A").Range("1:65536").Copy Destination:=Sheets("Assemblage").Cells.Range("A1")

End Sub

Lorsque vous visionnerez mon code vous constaterez que concernant la zone à copier/coller de la feuille A, j'ai mis: Range("1:65536"). Le soucis c'est que le nombre de lignes est variable (car de nouveaux fichiers sont régulièrements créés).
Avec l'enregistreur de macro j'ai sélectionné la zone de la manière suivante:

Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select

J'aimerai conserver cette manière de sélectionner la plage à copier/coller.

J'ai essayé d'adapter le code mais quelque chose manque, voici ce que j'ai réalisé :

Sub total_selection()

Dim new_sheet As Worksheet

Set new_sheet = Worksheets.Add
new_sheet.Name = "Assemblage"
Set new_sheet = Nothing

Sheets("A").Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select.Copy Destination:=Sheets("Assemblage").Cells.Range("A1")


End Sub


Donc si quelqu'un pouvait m'aider à écrire la condition "si ligne vide alors collage" ce serait splendide et si quelqu'un connait le code pour les touches CLTR+shift pour sélectionner la plage de données alors qu'il n'hésite pas.

J'attends vos suggestions,

derout
Messages postés
23
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
28 décembre 2009
1
Vive le monologue...
Merci pour votre soutien à tous. Le peu de code que je demandais était clairement basic (2 minutes d'écriture), j'apprécie votre empressement à répondre aux débutants...

Voici pour ceux qui pourrait avoir besoin de ce code (la feuille a été renommé Z):


Sub ImportLines()

' This will add a new worksheet called "Z"
Worksheets.Add().Name = "Z"

' This will copy all the contents of Worksheets "A" into worksheet "Z"
Worksheets("A").Cells.Copy Destination:=Worksheets("Z").Cells(1, 1)

' This will copy all the contents of Worksheets "B" into the last row of worksheet "Z"
Worksheets("B").Range("A2:G" & Worksheets("B").Range("A65536").End(xlUp).Row).Copy _
Destination:=Worksheets("Z").Range("A" & Worksheets("Z").Range("A65536").End(xlUp).Row + 1)

' This will copy all the contents of Worksheets "B" into the last row of worksheet "Z"
Worksheets("C").Range("A2:G" & Worksheets("C").Range("A65536").End(xlUp).Row).Copy _
Destination:=Worksheets("Z").Range("A" & Worksheets("Z").Range("A65536").End(xlUp).Row + 1)


End Sub