Many ways.
Here's one, with variable declaration required, and using "last cell". There are other ways to find the last used cell, however.
Dim loCurrentWS As Worksheet
Dim loSourceRange As Range
Const StartDataCol As Long = 1
Const StartDataRow As Long = 12
'Next line only here for testing purposes
'In your macro, it would be set as you iterate through the
' worksheet loop
Set loCurrentWS = ActiveSheet
With loCurrentWS
Set loSourceRange = .Range(.Cells(StartDataRow, StartDataCol), .Cells.SpecialCells(xlCellTypeLastCell))
End With
Edit: I note that you wrote you want to copy only the rows with data. If the "data" is NOT a result of formulas, you could set that range a bit more robustly by looking for the last row and column with data:
Dim loCurrentWS As Worksheet
Dim loSourceRange As Range
Dim lLastRow As Long, lLastCol As Long
Const StartDataCol As Long = 1
Const StartDataRow As Long = 12
'Next line only here for testing purposes
'In your macro, it would be set as you iterate through the worksheet loop
Set loCurrentWS = ActiveSheet
With loCurrentWS
'cell must contain value
lLastRow = .Cells.Find(what:="*", after:=[a1], LookIn:=xlValues, _
searchorder:=xlByRows, searchdirection:=xlPrevious).Row
lLastCol = .Cells.Find(what:="*", after:=[a1], LookIn:=xlValues, _
searchorder:=xlByColumns, searchdirection:=xlPrevious).Column
Set loSourceRange = Range(.Cells(StartDataRow, StartDataCol), .Cells(lLastRow, lLastCol))
End With