i would personally use p45cal's code. it not only is neater but also deals with different number of repetitions in column A.
below very simple code (which i wrote last night but gave up posting it after seeing p45cal's neater code ) works only with static number of repeats in col A.
Sub vbax_52858_insert_blank_rows_every_nth_row_fill_from_above()
Dim i As Long, HeaderRow As Long, nth As Long
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
HeaderRow = 1 'HeaderRow = 0 if there is no header row
nth = 3
Worksheets("before").Copy After:=Worksheets("before")
With ActiveSheet
.Name = "before_new"
LastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
For i = (LastRow + 1) To (HeaderRow + nth) Step -nth
Rows(i).Insert
Next i
LastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Row + 1
For i = (HeaderRow + nth) To LastRow
If .Range("A" & i).Value = "" Then
.Range("A" & i).Value = .Range("A" & i - 1).Value
.Range("B" & i).Value = .Range("B" & i - 1).Value
.Range("C" & i).Value = .Range("C" & i - 1).Value
.Range("D" & i).Value = .Range("H2").Value
.Range("E" & i).Value = .Range("I2").Value
End If
Next i
End With
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub