The .cells property has some logic that makes it a little awkward for what you're trying to do. Basically, every time you reference a range using the cells([row],[column]) notation, VBA assumes you are refering to the active worksheet, unless otherwise specified immediately before the cells reference. When you hit this line of code, if either Sheet1 or Sheet2 is the active sheet, you could eliminate that qualifier from its side of the equation. Here's what it looks like with sheet specified in the necessary places:
It's kind of a mouthful. Might be easer to assemble to assemble an address string instead.
Range(Sheet1.Cells(4, 6), Sheet1.Cells(4, 24)) = Range(Sheet2.Cells(2, 2), Sheet2.Cells(2, 20)).Value