En copiant sur un exemple Crosoft, j'utilise des variables BOOL (ou autre selon besoin) qui servent d'indicateur d'"état" (fichier lu, calcul fait, fichier sauvé, etc..).
On écrit ensuite un module qui fait "chef d'orchestre" appelé à chaque changement de contexte. Il gère les menus en fonction de chaque variable d"'état".
if (A and B and not C) then menu1.grisé else menu1.pasgrisé
menu2.enabled = (B AND C)
etc..
On peut même y mettre aussi (lisible ?) la gestion de boutons (visible, enablé, ..).
Si on modifie les menus, c'est plus facile à retrouver pour modif que quand dispersé dans de nombreuses sous-routines.
Les menus grisés (disablés) ne sont pas fonctionnels. Si click dessus, pas d'action.
Une variante consiste à faire dans ce module une liste des états des menus en fonction de l'action : "select case Action" puis des case Ouverture, case Sauvegarde, case Calcul_Truc, mais pas valable si 50 actions distinctes possibles (lourd).
Dans ce contexte, les menus reflètent l'état des variables, mais on ne passe pas "son temps" à tester les menus (ce qui dans l'absolu revient au même : variable gérée par VB (VC, BC, ..)).
Y a sans doute mieux (suis simple amateur (loisirs)).