wOOzi --
You are very, very close.
Four little things I tweaked in the way you'd done this:
1. In your Visual Rules, you had created your "swap_to_2" rule perfectly, and had correctly selected that rule as the action for the TRUE branch in your "swap" rule. But your FALSE branch didn't have anything to do. I added a "swap_to_1" rule just like your "swap_to_2" rule (though referring to the other part, of course), and selected it for the FALSE branch:
2. While you had indeed checked "Run Visual Rule when value changed" for the Expression "length", you'd not selected you "swap" rule there... But I see why.

[You couldn't see it there.]
When creating the "swap" rule, you'd checked the little "Invoked From Visual Rule" box. This check indicates that the rule is going to be invoked only from other Visual Rules, and not invoked directly from the UI. In your example, your "swap_to_1" and "swap_to_2" rules are exactly this, and should have this checked, because each of them will only be used from the context of your conditional "swap" rule.
But because you want your "length" expression to invoke your main "swap" rule, this should not be checked. With this checked, your "swap" rule was not visible in the list of available rules in your "length" expression:
Unchecking this for the "swap" rule makes it visible there:
...and so...
3. At that point you can then SELECT your "swap" rule, and you're off to the races.
4. The last one is a stylistic thing, but I also removed the file paths from the Replace Component blocks, like this:
This just helps with portability, if the template location moves around on disk (like when you send it to me, and when I send it back to you.)
Does that all make sense?
Here's a brief video of your swap working:
150511_PTS_VR_component_swap-1.m4v
...and the modified assembly is attached.
Does that help?
Taylor Anderson
NX Product Manager, Knowledge Reuse and NX Design
Product Engineering Software
Siemens Product Lifecycle Management Software Inc.
(Phoenix, Arizona)