Microsoft Visio is extensible. Everything in a Visio drawing is a SmartShape, whether it is just a single line or one character of text. A ShapeSheet is behind every Shape, and a ShapeSheet contains cells with formulae.
So, my first rule is:
Only resort to any coding if you cannot achieve what you want in the ShapeSheet.
My second rule is:
Encapsulate as much as possible in the ShapeSheet, and send as little chatter as you can between Shapes and Code to make it work.
I say this upfront because experience has shown me that too many good programmers ignore the power of the ShapeSheet and try to control everything in code. Then, they wonder why it starts to get complicated . . . and slow.
If you need code, then Microsoft Visio is delivered with Visual Basic for Applications (VBA) built-in. And, you can create add-ons, Component Object Model (COM) Add-ins, Visual Studio Tools for Office (VSTO) Add-ins, Add-ons, and wrapper applications. So, how do you make your choice?