Bouclage d'un userform

Résolu
Bonjour,

Merci de prendre de votre temps.

Mon idée :

Remplir un Userform (qui s'appelle Fournisseur), une fois rempli, appuyer sur un bouton "Ajouter".

Lorsque je cliques sur Ajouter, j'ai une MsgBox qui me demande si je veux en ajouter un autre.

If MsgBox("Autre ajout ? ", vbYesNo + vbInformation, "Autre ajout de fournisseur ?") = vbYes Then

Et j'aimerai donc, que si je cliques sur oui, qu'il me relance mon userform "Fournisseur" vierge.
Chose que je n'arrives pas à réaliser
Que je cliques sur oui ou non , l'userform ce ferme.

J'ai pensé à un GoTo, mais j'ai lu sur le net que ça n'était pas terrible comme codage, et je n'y suis pas arrivé...

Merci de votre aide,

DGVDR

5 réponses

  1. Bonjour,

    Quel type de contrôles as-tu sur ton UF (TextBox, Combobox etc ...) ?

    Tu es sur Excel, Access, VB6 ... ?

    :0)

    «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
    Nicolas Boileau
    1. Bonjour,

      Pourquoi passer par un MsgBox ?
      Dans ton UserForm, je mettrais un bouton "Ajouter" et un bouton "Fermer" et c'est tout.

      A+

      PS : sinon, il faut jongler entre hide/show, load/unload
      1. slt,

        Pourquoi passer par un MsgBox ?

        C'est peut être une contrainte du cahier des charges !!!

        ;0)
      2. Salut Polux,

        On verra bien...
        Pour moi c'est de la surspécification si c'est dans le cahier des charges.

        A+
    2. Bonjour,

      Merci à vous deux.

      Ce n'est pas une spécification, c'est la solution à laquelle j'avais penser.

      Un bouton "Fermer" et un "Autre ajout" peut faire l'affaire , comme le propose Zoul6 !

      Cependant, avez vous une idée du code permettant de repartir avec un userform vierge sans le fermer ?

      Merci !

      DGVDR
      1. Re,

        ça dépend un peu de comment tu as organisé le tout...
        Un simple appel à UserForm_Initialize peut suffire si tout est dedans (vidange des TextBox, absence de sélection dans les ListBox,...).

        A+
      2. J'ai essayé en plaçant un

        Fournisseur.show apres mon test oui/non de ma MsgBox, ça m'indiquait que mon userform était déjà présent, ce qui est le cas...

        Je n'ai pas la solution...
    3. Voilà une procédure qui permet de boucler sur les contrôles d'un UF

      Dim Ctrl As Control
      
      For Each Ctrl In Me.Controls
          'Efface les saisies des TextBox
          If TypeOf Ctrl Is MSForms.TextBox Then Ctrl.Text = ""
      
          'Efface les libellés des Label
          If TypeOf Ctrl Is MSForms.Label Then Ctrl.Caption = ""
      
      Next Ctrl 

      1. Polux,

        Peux-tu m'expliquer ce code ?

        Dans le sens ou "For Each Ctrl" = ? Quel effet ?

        "As Control" = Cible quels objets?

        Merci de ton aide,

        DGVDR
      2. For Each Ctrl In Me.Controls

        C'est une boucle sur tous les controles (TextBox, Label, ComboBox, ListBox etc etc ...) contenus sur l'UF.

        Ctrl As Control représente l'objet de la collection Controls contenu dans l'UF.

        TypeOf ... Is ... permet de connaître le type de controle.
      3. Merci
    4. Trop compliqué :

      reponse = MsgBox("Autre ajout ? ", vbYesNo)

      If reponse = vbYes Then
      'code
      Else
      'Rien ^^
      End If
      1. Jusque là, j'y étais arrivé.

        Le problème c'est le 'code du
        If reponse = vbYes Then

        Je ne sais pas comment faire revenir mon userform vierge pour une nouvelle entrée
      2. DGVDR,

        En fait, si tu nous mets le fichier à disposition sur https://www.cjoint.com/ on te trouvera sans doute des solutions...
      3. http://www.ozgrid.com/forum/showthread.php?t=61776

        Unload Me 
        UserForm1.Show
      4. Me=MsgBox ?!
      5. La solution de sipherion fonctionne, je n'avais en effet pas penser à le décharger avant de poser un Fournisseur.show !

        Merci à vous,

        DGVDR