As far as I can see you've implemented the Find properly,

It's the code following it that doesn't look right.

For example what are you doing here?
            keyRow = keyRow
            Advert = (.Cells(keyRow.Row, 14).Value)
That first line is going to set keyRow to a Double variable, but on the next line you try to refer to it as if it's a range.

What is the first line supposed to do?

If I remove every instance of it in the code it runs without error until it reaches this section where the formulas fail as a lot of the variables are empty, some of them haven't been declared either, eg MakeRdy.

    .Cells(iRow + 1, 1).Value = Advert
        .Cells(iRow + 1, 2).Value = Admin
        .Cells(iRow + 1, 3).Value = "=" & Maint & "-" & MakeRdy & "-" & contSvc1 & "-" & contSvc2
        .Cells(iRow + 1, 4).Value = MakeRdy
        .Cells(iRow + 1, 5).Value = "=" & contSvc1 & "+" & contSvc2
        .Cells(iRow + 1, 6).Value = PayRoll
        .Cells(iRow + 1, 7).Value = Mgmt
        .Cells(iRow + 1, 8).Value = Utl
        .Cells(iRow + 1, 9).Value = iNS
        .Cells(iRow + 1, 10).Value = "=" & tAX & "-" & iNS
        .Cells(iRow + 1, 11).Value = Repairs
        .Cells(iRow + 1, 12).Value = Improvements
        .Cells(iRow + 1, 14).Value = rev
PS You should add Option Explicit at the top of the code, that should help weed out any undeclared variables.