Copier une plage de donnée variable dans un autre onglet

Bonjour à tous

Je débute en VBA, après avoir pas mal chercher sur le forum et essayer d'appliquer certains codes à mon cas mais je bloque.

Je cherche à copier une plage de données dont le nombre de ligne est variable vers en un autre onglet en fonction du critère indiquée dans la colonne A.

En plus clair dans l'onglet IMMOS j'importe des données depuis un fichier .csv., la colonne A indique suivant le code de la colonne B (compte) vers quel onglet il doit être copié. les colonnes a copiée sont les colonnes C D E & F les autres ne sont pas reprises. puis elles doivent êtres copiées dans l'onglet correspondant à partir de la cellule B14 (pour la feuille bâtiment). Les données "autres" ne seront pas utilisées. Dans chaque onglet il y a des calculs qui seront réalisé à partir des données collées.

voici le code que j'ai essayé de mettre en place (uniquement sur le critère "Bâtiment", il ne fonctionne pas à la fin, car il colle toujours sur la première ligne de l'onglet bâtiment mais pas à la suite :

Sub CopieBAT()

Dim k As Integer

Application.ScreenUpdating = False
Sheets("IMMOS").Activate
Range("A2").Activate

Do While ActiveCell <> ""
 If ActiveCell = "Bâtiment" Then
 k = k + 1
 Range(ActiveCell.Offset(0, 2), ActiveCell.Offset(0, 5)).Copy

Sheets("Bâtiment").Select
Range("A65000").End(xlUp).Offset(1, 1).Select
ActiveSheet.Paste

End If
Sheets("IMMOS").Activate
ActiveCell.Offset(1, 0).Activate

Loop

Application.CutCopyMode = True

End Sub

Le fichier joint est une partie d'un projet plus globale.

Merci beaucoup d'avance

Gwen

55essai.xlsm (59.48 Ko)

Bonjour,

macro adaptée. je n'ai pas compris s'il fallait effacer les lignes de Immos, une fois copiées dans batiments, je les ai donc laissées.

Sub CopieBAT()

    Application.ScreenUpdating = False
    Set wsi = Worksheets("IMMOS")
    Set wsb = Worksheets("Bâtiment")
    dlb = wsb.Range("A" & Rows.Count).End(xlUp).Row
    i = 2
    Do While wsi.Cells(i, 1) <> ""
        If wsi.Cells(i, 1) = "Bâtiment" Then
            dlb = dlb + 1
            wsi.Range(wsi.Cells(i, 1).Offset(0, 2), wsi.Cells(i, 1).Offset(0, 5)).Copy wsb.Range("B" & dlb)
        End If
        i = i + 1
    Loop
    Application.ScreenUpdating = True

End Sub

Merci beaucoup h2so4 pour ta réponse rapide

c'est exactement ce que je cherchais !!

Rechercher des sujets similaires à "copier plage donnee variable onglet"