[VBA] Utiliser la valeur d'une cellule pour cacher 1 Frame

Résolu
Bonjour,

Voilà,

J'ai 2 UF : UF1 et UF2.

Je suis sur l'UF1, lorsque je passe à l'UF2, le nom de l'UF1 se stock dans une cellule.
Une fois sur l'UF2, j'aimerai que lorsque je clique sur Valider, il me fasse disparaître un frame présent sur l'UF1.

Pour se faire, je voudrais utiliser le nom de l'UF1 que j'ai stocké. J'avais eu comme idée de déclarer X as Variant, de donner la valeur de la cellule à X et d'écrire

X.Frame1.Visible = False

J'ai aussi essayé ça :

Sheets("Feuil1").Range("A20").Value.Frame1.Visible = False

Mais bien sûr, ça ne fonctionne pas.

Une idée svp ?

PS : pourquoi ne pas tout simplement écrire MonUf.Frame.Visible = False... tout simplement car je n'ai pas que 2 UF, j'en ai plein donc il faut que ce soit générique, d'où le stockage du nom de l'UF.

En gros, je veux pouvoir réutiliser le nom de l'UF que j'ai "stocké".

Si ce n'est pas assez clair, dites le moi.

Merci

6 réponses

Résumé de la discussion

Le problème porte sur la gestion de plusieurs UserForms (UF1 et UF2) et sur la façon de cacher un Frame sur UF1 lorsque l’utilisateur valide sur UF2 en utilisant le nom stocké. Les solutions tournent autour d’une variable globale d’objet et de l’assignation Set USF = Me dans chaque UF, afin d’accéder via USF.Frame1.Visible = False sans connaître le nom dynamique. Certaines réponses insistent sur l’emploi de Option Explicit et sur l’instance correcte de l’objet, notamment en évitant les références nulles et en instanciant USF dans l’ouverture du formulaire. D’autres évoquent une approche directe, par exemple MonUf.Frame.Visible = False, mais cela sacrifie la généricité lorsque le nombre de UF augmente et complique le passage de contexte.

Bobot (l’IA à votre service)
  1. Bonjour,

    Je suis sur l'UF1, lorsque je passe à l'UF2 ...

    L'UF1 reste active ou bien déchargée par un Unload ?

    0
    1. Bonjour Polux31,

      Il n'est ni déchargé ni caché.
      0
    2. La meilleur solution reste MonUf.Frame.Visible = False.
      Stoker le nom de l'UF ne sert à rien. Ce genre de comportement d'un objet ne peut pas être générique.
      0
    3. Oui mais ça ne sera pas optimisé...mais bon si là est la seule solution, j'vais faire ainsi.
      0
    4. Ou bien, stocker le nom de mon UF dans une cellule et écrire à chaque fois

      If Sheets("Feuil1").Range(A1).Value = MonUF.Name Then
      MonUf.Frame1.Visible = False
      End If

      Et faire ça avec tous les UF que j'ai...
      0
  2. Bonjour a vous deux,

    c'est faisable sans probleme: variable public object

    https://www.cjoint.com/?DABl007SPvE

    thesentry:
    mais comment allez vous gerer les actions en fonction de l'UF a piloter ????
    0
    1. Bonjour f894009,

      Je n'ai pas dit que c'était impossible ^^
      J'ai eu la même réflexion concernant la gestion des UF ... d'où "La meilleur solution reste MonUf.Frame.Visible = False".
      0
    2. Re,

      Ok, nous somme d'accord, va pas etre simple a gerer
      0
    3. Bonjour,

      Votre code semble se rapprocher de ce dont j'ai besoin.

      Cependant, pas sûr que ça marche dans le cas où j'ai plusieurs UF (cf mon indication dans le message suivant).
      0
  3. Je vais détailler un petit peu plus ce que j'ai :

    J'ai 10 UF "normaux".

    J'ai 4 UF "pop-up".

    Les 4 UF "pop-up" sont présent pour chaque UF "normal" (un même UF "pop-up" est rattaché à 10 Uf "normaux").

    Si j'ouvre l'UF "normal" 5, et que je clique sur la première option, je vais avoir l'UF "pop-up" 1 qui va s'ouvrir. Lorsque sur cet UF "pop-up" je vais cliquer sur Valider, le Frame1 de l'UF "normal" 5 contenant la première option devra disparaître.
    0
    1. 4 pop-up par UF ... ce n'est peut être pas la peine de monter une usine à gaz pour s'éviter quelques lignes de codes ...
      0
      1. Non, je me suis peut être mal exprimé :

        Ces 4 pop-up sont pour les 10 UF normaux. Donc en tout et pour tout, j'ai 14 UF.
        0
      2. Ça j'ai compris !!!

        4 UF "pop-up" sont présents pour chaque UF "normal"
        1 UF normal -> 4 pop-up ...

        Et 1 pop-up -> 10 UF.

        La proposition de F894009 dans son exemple peut être appliquée avec une variable globale public object. Il faudra instancier l'objet dans la méthode d'appel du pop-up.
        0
      3. Ta participation est la bienvenue et agréable. Mais reste calme hein ;-)

        En d'autres termes, ça donne quoi le "une variable globale public object. Il faudra instancier l'objet dans la méthode d'appel du pop-up."?
        0
      4. Re,

        Juste de passage. Regardez l'exemple que j'ai mis Lien (#4)
        0
      5. Re,

        Je vous ai répondu tout à l'heure... je vois à peu prêt le fonctionnement.
        Mais est-ce applicable pour 10 UF ?

        Le fait de mettre USF = Me retient seulement l'UF actif ? (je débute, je m'exprime peut être mal...)
        0
    2. Re,

      J'ai essayé de l'incorporer dans mon programme mais ça ne fonctionne pas.

      J'ai déclaré sur l'UF le
      Set USF = Me
      , je l'ai mis dans Private Sub UserForm_Initialize et dans un de mes pop up (pour le test), j'ai mis

      USF.Frame1.Visible = False
      USF.CommandButton4.Visible = True


      Mais ça ne fonctionne pas, au débogage, il me dit qu'un objet est requis. Mais dans l'idée, c'est comme le code de f894009...
      0
      1. Bjr,

        Private Sub OptionButton1_Click()
            Set USF = Me
            KOREP.Show
        End Sub 


        Y-a-t'il un CommandButton4 sur l'UF ?
        0
        1. Oui il a bien un CommandButton4.

          Mon Frame1 présente le parcours, une fois que l'utilisateur a cliqué sur l'étape qu'il veut, le pop-up approprié s'ouvre. Lorsqu'on clique sur "Valider" dans le pop up, il se ferme, le frame1 de l'UF disparaît et un bouton apparaît pour ré-afficher si besoin le frame1 pour une modification.

          J'ai tout le temps :

          Erreur d'exécution '424' :
          Objet requis
          0
        2. Bonjour,

          Facile!!!!!!
          0
        3. Quoi donc ?
          0
        4. Ah oui ça semble pas mal Polux31.

          Question, à quoi sert le "option Explicit" ?
          0