Here's the basic code I would use (though obviously you can make the db sheet variable to match a client name or another field on your template)
Points - I have set up a worksheet called "Template" on which there are four fields that I wish to copy to the "Database" sheet.
Sub TEMPLATE_WIZARD()
Application.ScreenUpdating = False
TEMPLATE_SHEET = "Template"
DATABASE_SHEET = "Database"
COUNT_ROW = 2
DATABASE_RECORDS = Sheets(DATABASE_SHEET).Range("A1:A10000")
'To identify the next blank row in the database sheet
For Each DBRECORD In DATABASE_RECORDS
If DBRECORD <> "" Then COUNT_ROW = COUNT_ROW + 1
Next DBRECORD
'To copy the data from the template to the database
Sheets(TEMPLATE_SHEET).Select
'Data Field 1 to database
Range("B1").Copy
Sheets(DATABASE_SHEET).Range("A" & COUNT_ROW).PasteSpecial xlPasteValues
'Data Field 2 to database
Range("B3").Copy
Sheets(DATABASE_SHEET).Range("B" & COUNT_ROW).PasteSpecial xlPasteValues
'Data Field 3 to database
Range("B5").Copy
Sheets(DATABASE_SHEET).Range("C" & COUNT_ROW).PasteSpecial xlPasteValues
'Data Field 4 to database
Range("B7").Copy
Sheets(DATABASE_SHEET).Range("D" & COUNT_ROW).PasteSpecial xlPasteValues
'To sort the database on basis of say date - column D in Database
Sheets(DATABASE_SHEET).Select
Range("A1:D10000").Select
Selection.Sort KEY1:=Sheets(DATABASE_SHEET).Range("D1"), ORDER1:=xlAscending, HEADER:=xlYes, ORDERCUSTOM:=1, MatchCase:=False, Orientation:=xlTopToBottom
Sheets(TEMPLATE_SHEET).Select
Range("C1").Select
ActiveWorkbook.Save
End Sub