If you're using the VBA Emulator, you can open 2 instances of it. just open ruby/sapphire on the other one. Configure it to use a different joypad(different key commands), untick the pause when inactive, and then proceed to trade with yourself. I just did that on my FireRed for another challenge.
Hope that helped xD