Thanks Yacine,
I apologize for not getting back sooner. I really appreciate the effort you have put into my post and the other post I reviewed of yours for us mortal individuals

.
I've been attempting to tweak what you have provided to more accurately fit my scenario. Your summation of what I need to do its pretty accurate but I posted an image of what I am trying to do.
So far I have taken your idea and put it into code.
What I am finding is the shapes are stacking from left to right, bottom up and in relation to the page instead of the container. I've been trying to manipulate this in such a way that it going from left to right, top down starting in the container with a 3mm margin.
I'm going to continue tinkering with this. One advantage I do have is that the shape size can be reduced or increased as desired.
var shapeWidth = componentStyle == ComponentStyle.Modern ? VisioConstants.MODERN_SHAPE_WIDTH : VisioConstants.CLASSIC_SHAPE_WIDTH;
var shapeHeight = componentStyle == ComponentStyle.Modern ? VisioConstants.MODERN_SHAPE_HEIGHT : VisioConstants.CLASSIC_SHAPE_HEIGHT;
var containerShapeIds = container.ContainerProperties.GetMemberShapes((int)VisContainerFlags.visContainerFlagsDefault);
var sortedDictionary = VisioHelper.CreateAndSortShapeDictionary(_application, containerShapeIds);
decimal containerWidth = (decimal)container.GetMeasuredValue("Width", VisUnitCodes.visInches);
decimal containerHeight = (decimal)container.GetMeasuredValue("Height", VisUnitCodes.visInches);
int i = 0;
foreach (var shape in sortedDictionary)
{
var shapeX = i % ((double)containerWidth / shapeWidth) * shapeWidth;
var shapeY = Math.Floor(i / (double)containerWidth / shapeWidth) * shapeWidth;
var containedShape = _application.ActivePage.Shapes.ItemFromID[shape.Key];
containedShape.SetPin(shapeX, shapeY);
i++;
}