The following gives me pause
Do While Selection.Value > 0
     If Range("BU2").Value <= 0 Then
where your criteria to step into the loop is if the selection "BU2" is greater than 0 and then inside the loop you want to copy the rows where "BU2" is less than or equal to 0. My understanding is that your if statement won't work because of your do while statement.