IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fermer/ouvrir un userform à partir d'un module


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut Fermer/ouvrir un userform à partir d'un module
    (re)Bonjour à tous,

    Je souhaitais pouvoir fermer / ouvrir un UserForm à partir d'un module, en utilisant une variable, contenant le nom du formulaire.
    Je pensais réaliser cela comme sur Access, mais DoCmd n'est pas reconnu !
    Après quelques recherches, je suis arrivé à deux possibilités :

    I.
    Appel de procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Function openclose(leform As UserForm)
    Unload leform
    leform.Show
    End Function
    II.
    Appel de procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Function openclose(leform As String)
    Unload leform
    leform.Show
    End Function
    Aucun de ces deux codes ne fonctionne, l'erreur mise en avant est "type missmatch" ;
    Dans le premier cas, au niveau de l'appel de procédure, dans le second dans la procédure elle-même.

    Dans cet exemple précis, réinitialiser le formulaire serait suffisant, mais je souhaite par la suite pouvoir fermer un formulaire et en ouvrir un autre, cette méthode ne sera donc pas suffisante.

    En vous remerciant d'avance pour votre aide,

    Wulfram

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Sub Appel()
    Dim Nom As String, Form As Object
       Nom = "UserForm" & 1
       Set Form = VBA.UserForms.Add(Nom)
       openclose Form
    End Sub
     
    Private Sub openclose(maForm As Object)
       'Unload maForm
       maForm.Show
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Bonjour, et merci pour l'aide !

    Tout d'abord, je me suis permis de passer la private sub en public sub, puisque la procédure se trouve dans un module distinct, qui aura vocation à être appelé depuis divers formulaires. Mon code est donc ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Appel()
    'écrite dans le code de mon formulaire
    Dim Nom As String
    Dim Form As Object
    Nom = Me.Name
    Set Form = VBA.UserForms.Add(Nom)
    openclose (Form)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub openclose(maForm As Object)
    'écrite dans le module
    Unload maForm
    maForm.Show
    End Sub
    Avec ce code, j'ai une runtime error 361, "can't load or unload this object".
    Si je retire la ligne de l'unload, comme dans ton exemple, j'ai une runtime error 438, "Object doesn't support this property or method".

    Le seul moyen qui m'ait permis d'utiliser cette forme de code était de nommer explicitement le formulaire, donc sans passer par une variable, ce qui réduit l'intérêt...

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Quel est l'intérêt?
    J'avoue ne pas comprendre...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Par défaut
    Il y a peut-être un mode de résolution de mon problème bien plus adapté !

    Voici le contexte :
    J'invite un utilisateur à entrer des informations dans un formulaire. Une fois la saisie effectuée, et lorsqu'il la valide, je souhaite fermer ce formulaire.
    Dans cet exemple, je souhaite rouvrir ce même formulaire, afin qu'il puisse effectuer un même type de saisie : dans ce cadre, réinitialiser le formulaire conviendrait tout à fait !
    Néanmoins, dans certaines situations, ce premier formulaire devra être fermé, et un autre type de formulaire ouvert selon divers paramètres ; ce type de changement de formulaires pouvant avoir lieu dans différents sens, je cherchais une procédure générique permettant une telle opération, sachant que le nom du nouveau formulaire pourra toujours être récupéré à partir des paramètres en questions.

  6. #6
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    je souhaite rouvrir ce même formulaire, afin qu'il puisse effectuer un même type de saisie
    Ben ne le ferme pas. Réinitialise tous ses contrôles comme à l'origine. ==> bouton "INIT"

    Néanmoins, dans certaines situations, ce premier formulaire devra être fermé, et un autre type de formulaire ouvert selon divers paramètres
    ==> autre bouton ==> "CLOSE"
    Utilise donc l'événement QueryClose pour faire tes choix selon les paramètres.

    Exemple :
    Ouvre un nouveau classeur.
    Places-y trois userforms nommés UserForm1, UserForm2 et UserForm3
    Dans l'UserForm1 dessines un TextBox (TextBox1) et un bouton (CommandButton1)

    Le but est de saisir, dans le TextBox, 2 ou 3 et donc d'afficher soit l'UserForm2, soit l'userForm3.
    Ok?

    Le code de l'UserForm1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Private Sub CommandButton1_Click()
       Unload Me
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
       Choisi Me, Me.TextBox1.Value
    End Sub
    Le code dans un module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Public Sub Choisi(U As Object, N As String)
    Dim Nom As String, Form As Object
       U.Hide
       Nom = "UserForm" & N
       Set Form = VBA.UserForms.Add(Nom)
       Form.Show
    End Sub
    Et voilà...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Ouvrir un pdf à partir d'un userform
    Par matimatfr dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/01/2018, 16h28
  2. comment désigner une combobox d'un userform à partir d'un module
    Par rominet64 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/11/2017, 18h26
  3. [XL-2010] ouvrir un userform à partir d'une image créée dynamiquement
    Par eno97 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/10/2012, 11h27
  4. Ouvrir fonction à partir d'un module
    Par kemiolek dans le forum VBA Access
    Réponses: 4
    Dernier message: 27/06/2008, 11h28
  5. Réponses: 12
    Dernier message: 02/02/2005, 16h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo