What you explain is exactly the use-case why I wrote this macro

But in our case it is impossible for me to know where the user like to start with a new row (or column).
In the worst case the macro will arrange shapes on top or behind other shapes on a page. This could be a lot of work to fix...
So, we work in smaller steps or just let the shapes arrange out of page and move single blocks by hand to their final position.
No chance for further automatism here, so I will not implement it.
If you like to adapt the code to your requirements you just need to modify the last for-loop.
For example, another use-case could be to (re)number shapes:
For i = 1 To c.Count
Set shp1 = c.Item(i)
shp1.Text = i
Next