Some quick tips... you want to eliminate all the "selecting" and "activating" where you can. Your macro recorder will show you a lot of that, just restructure the recorded code to send your commands to the correct sheets/objects/ranges directly. Also, you should declare every variable type to save yourself hours of headaches later trying to debug problem code. By turning on the Auto Syntax Check (which puts Option Explicit at the top of new modules), Excel will help you by pointing out many errors as you make them....very helpful. So I declared your "i" variable.
So your original macro could possibly be:
Here's another way to loop through the values on one sheet to filter/print another without really ever activating either: