Copier uniquement selection cellules jusqu'à dernière ligne remplie

Bonjour

J'ai un code qui copie les cellules VISIBLES de la plage A1 - S500 , c'est à dire les cellules cachées ne le sont pas.

Cependant je cherche à améliorer ce code afin que soit copiée la plage jusqu'à la dernière ligne remplie (selon la colonne B).

La plage sera toujours jusqu'à la colonne S même si des cellules sont remplies après la colonne S.

Mais il faut que la sélection soit faite jusqu'à la derniere ligne remplie.

Par exemple si la cellule B56 est remplie mais en dessous B57 est vide, alors la macro copiera les données des cellules visibles de plage A1 - S56

Voici le code qui copie une plage de cellules fixe:

Set Source = Nothing

On Error Resume Next

Set Source = Range("A1:S500").SpecialCells(xlCellTypeVisible)

On Error GoTo 0

If Source Is Nothing Then

MsgBox "The source is not a range or the sheet is protected, please correct and try again.", vbOKOnly

Exit Sub

End If

With Application

.ScreenUpdating = False

.EnableEvents = False

End With

Set wb = ActiveWorkbook

Set Dest = Workbooks.Add(xlWBATWorksheet)

Source.Copy

With Dest.Sheets(1)

.Cells(1).PasteSpecial Paste:=8

.Cells(1).PasteSpecial Paste:=xlPasteValues

.Cells(1).PasteSpecial Paste:=xlPasteFormats

.Cells(1).Select

Application.CutCopyMode = False

End With

Bonjour Ericw,

Essaye en rajoutant cette ligne de commande :

derlgn=Range("B" & Rows.Count).End(xlUp).Row
Set Source = Range("A1:S"&derlgn).SpecialCells(xlCellTypeVisible)

Ca fonctionne mais je viens de faire attention à une erreur de ma part. Désolé

Donc je corrige mon explication:

Il y a une condition :

la dernière ligne copiée sera au minimum la ligne 17 (jusqu'à la colonne S), même si B15, par exemple, est une cellule vide.

Exemple: les cellules B6 à B16 sont vides --> la plage copiée sera de A1 à S17

les cellules B6 à B13 sont vides mais la cellule B20 est remplie --> la plage copiée sera de A1 à S20

Bonjour à vous deux

Je me permets de faire un retour pour ta condition:

derlgn = WorksheetFunction.Max(17, Range("B" & Rows.Count).End(xlUp).Row)
Set Source = Range("A1:S"&derlgn).SpecialCells(xlCellTypeVisible)

De cette façon, la dernière ligne sera la valeur maximale, entre 17, et la dernière ligne remplie que tu vas trouver, j'espère que ça répondra bien à ton besoin

super ca marche! merci!!!!

Rechercher des sujets similaires à "copier uniquement selection derniere ligne remplie"