Sub InsertRowAfterButton()
' Find location of calling button, return column A of same row
c = Cells(ActiveSheet.Buttons(Application.Caller).TopLeftCell.Row, 1).Address(0, 0)
'Find next occurrence of "total" after button
Cells.Find(What:="total", After:=Range(c), _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
' insert new row
Selection.EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
' get address of new row, column A
aRow = ActiveCell.Row
aCol = 1
' cycle through formula below new row until first emty cell
Do Until IsEmpty(Cells(aRow + 1, aCol).Value)
' get address of last cell in column before new row, new row and formula row
oldrange = Cells(aRow - 1, aCol).Address(0, 0)
insrange = Cells(aRow, aCol).Address(0, 0)
formrange = Cells(aRow + 1, aCol).Address(0, 0)
' search formula for address of last cell before new row
If InStr(Range(formrange).Formula, oldrange) Then
' and replace it with address of same cell in new row
Range(formrange).Formula = Replace(Range(formrange).Formula, oldrange, insrange)
End If
' next column in cycle
aCol = aCol + 1
Loop
End Sub