What module is this code in? What worksheet are you looping through?
At the end of the loop you create a new sheet, which becomes the active sheet. If this code is in a standard module (like Module1) then the condition at the top of the loop will refer to Cells(i, 2) in the active sheet, which is a different sheet than it referred to the first time through the loop. Because the sheet was just created, there is no data in column 2 and your loop will exit.
It is a best practice to qualify range references, such as what you did in the first line of the loop.
It is not a good practice to select thing if you are not doing so for the convenience of the user. I would rewrite the code as follows to clean up, but this doesn't solve your original question:
Bookmarks