Я бы использовал автофильтр в области B19:O23 с отбором (отображением) строк, в которых заполнена ячейка из столбика B и далее копировал эти видимые строки на лист БД. Примерно таким кодом:
[vba]Код
Sub copyVisibleRows()
Dim rng As Range
On Error Resume Next
Worksheets("Движение товара").ListObjects("Таблица22").Range.AutoFilter Field:=1, Criteria1:="<>"
Set rng = Worksheets("Движение товара").Range("B19:O23").SpecialCells(xlCellTypeVisible)
If Err = 0 Then
rng.Copy
Worksheets("БД Движения товара").Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
Worksheets("Движение товара").ListObjects("Таблица22").Range.AutoFilter Field:=1
End Sub
[/vba]
Обратите внимание, что подобное копирование из-под фильтра работает и при отборе несмежных строк в диапазоне B19:O23. Т.е., например, фильтр отобрал строки 1,2 и 4 - в БД они добавятся в конец списка как 3 последовательные строки.