To prevent almost all 'screen flicker' in Excel VBA, add this line at the beginning of any macro that results in 'flicker' when called:
Application.ScreenUpdating = False
You do not have to turn it back on at the end of the macro, although most code I see does turn it back to 'True' before the macro ends. However, Excel automatically resets it to 'True' when the macro ends.
To always enter additional data in the next available row, you can use a macro that incorporates this method:
Sub CopyToNext()
ActiveSheet.Range("A1").Copy Destination:=Sheets("Sheet2"). _
Range("A" & Rows.Count).End(xlUp).Offset(1)
End Sub
The 'Rows Count... End(xlup) finds the last used row in column A, working from the bottom up. The 'Offset(1) portion tells Excel to put the data one row after the last used row.
The full syntax is Offset(rows, columns). If you just enter one number, that is perceived to refer to rows. Positive numbers move down for rows, right for columns. Negative numbers move up for rows, and left for columns.
Now, if there is nothing in cell A1 on the 'copy to' sheet, the first iteration will copy the data to cell A2, then A3, etc. If you don't want a blank cell in A1, enter a heading in it.
Edit: there are some situations that if you invoke Updating = False, it will prevent segments of your macro from executing. If you set it to prevent flicker and your macro does not perform normally, you may have to just live with the flicker.