Here's an article about line patterns. Fill patterns work similar to that:

http://www.visguy.com/2008/03/03/release-the-power-of-visio-custom-line-patterns/The other method is your suggested one:

- Give Bar shape a userdefined cell: User.Circlenumber.

- Place a formula in that cell, that calculates the number of visible circles depending on the length of the shape or the value in your ShapeData property, that defines the length.

- Draw the maximum number of circles you need and group them to your bar shape.

- Give each a custom property or user defined cell with it's number/position, for example User.Number.

- Make another userdefined cell: User.Visible.

- Inside a formula ala =(Sheet.123!UserCirclenumber>=User.Number)

- where Sheet.123 is the name of the group shape / bar shape.

- That formula is true when the number of needed circles is equal or bigger than the number of the actual circle.

- In Shape geometry of circle shape,in NoShow cell place a formula =not(User.Visible) to hide the shape, when number of needed circles is lower then the shapes number.

- Place a formula in width-cell that places the circle on position one when invisible and on position n when visible, ala:

=10mm+If(User.Visible,(User.Number-1)*5mm,0mm)

- Above formula places the first circle at 10mm and ever other circle 5mm after the previous one.