VBA - Assembler des lignes nouvelle feuille

Résolu
derout Messages postés 25 Statut Membre -  
derout Messages postés 25 Statut Membre -
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
Configuration: Windows XP Internet Explorer 6.0

2 réponses

  1. derout Messages postés 25 Statut Membre 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
    0
  2. derout Messages postés 25 Statut Membre 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
    0