My Named range, "myrange" use this formula.

=Macro!$A$5:$C$22

So will print only the data in this range.

Saying that i need a dynamic range i mean that i need to print all the data for eatch time.

Sometimes will be range A5:C20, ANOTHER a5:c120, another A5:C75 and so on . This is what i mean dynamically. Based on the last row filled with data.

..If your actual data set is only 20 rows you could do that sumproduct as a loop without slowing things down too much:
No as i said in my first post..

.
.As my data sheet will include more that 10000 rows of data i know that the calculations will be too slow..
For 20 or 100 rows no need of code. Formula works great! But for more than 10000 rows..?