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 l'Userform Active


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Par défaut Fermer l'Userform Active
    Bonjour,

    J'aimerais pouvoir fermer l'userform active. Cependant je ne souhaite pas utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.Close= True           'ou 
    Unload.Me                  'ou encore
    Unload.Userform1
    En j'ai une multitude de Userform et sur chacune d'elles j'ai un bouton retour qui renvoie à la Userform principale.
    Au lieu d'écrire toujous les même lignes de codes pour chaque bouton de chaque userform je souhaite créé une subroutine qui ferme la userform active. C'est pour ça que les exemple au dessus ne fonctionne pas (ou sont mal écrit).
    Est ce qu'il y a quelquechose du genre ActiveWorkbook mais pour une userform car j'ai essayé mais je n'ai pas trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Retour()
        If MsgBox("Retour au menu princial ?   ", vbQuestion + vbYesNo) = vbYes Then
               'ligne manquante  
        End If
    End Sub
    En vous remerciant.

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonjour,

    :quoi: et comment comptez-vous appeler cette sous-routine ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Par défaut
    Call Retour

    J'ai déjà fais la subroutine pour quitter la macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Quitter()
        If MsgBox("Voulez vous vraiment quitter la macro?   ", vbQuestion + vbYesNo) = vbYes Then
            End
            ThisWorkbook.Activate
            Worksheets("travail").Activate
        End If
    End Sub
    Et ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton3_Click()
        Call Quitter
    End Sub
    Là ça fonctionne.

    Mais pour fermer juste la userform acive c'est plus compliqué

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Par défaut
    Je ne sais pas pourquoi, mais lorsque la sub quitter est appelée, je ne reviens plus sur la bonne page de mon classeur.

    Quelqu'un aurait une piste pour fermer la userform active? Merci

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut HEU
    Bonjour

    la fonction (End)a pour but d'arreter tout code (arret brutal)

    forcement la ou il est placer le activate qui suit n'est pas pris en compte
    essaie plutôt comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Quitter()
        If MsgBox("Voulez vous vraiment quitter la macro?   ", vbQuestion + vbYesNo) = vbYes Then
                    ThisWorkbook.Activate
            Worksheets("travail").Activate
     
     End If
    End
    End Sub
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre confirmé
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Par défaut
    Ca parait plutôt logique quand tu le dis
    Merci beaucoup !

    Par contre j'ai garder le end à l'intérieur du If

    Aurais tu une solution pour créer un subroutine qui ferme seulement la userform active comme je l'ai expliqué plus haut Merci

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut RE
    ET BIEN EN FAIT CA DEPEND DES PARAMETRES


    le bouton qui envoie la commande pour fermer ton USF
    et il dans le userform lui même?
    ou
    la commande et elle envoyée par une autre macro ou évènement du sheet

    ou dans une autre sub routine

    au quel cas si le bouton est dans le userform tu pourrais mettre la routine que j'ai corigé a l'interieur de l'evenemt du bouton tout simplement

    si ca n'est pas possible alors une autre solution envoyer l'argument a la routine lors du click sur le bouton dans ton userform

    exemple dans ton userform tu a un bouton

    et l'évènement du bouton serait ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    subroutine me           'le "me" représente le userform c'est ce que l'on appel un argument 
    End Sub
    en fait on envoie en argument le nom de l'userform en tant qu'object par l'expression "Me"
    maintenant dans un module standard tu a ta subroutine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sub subroutine( usf as object)
     
    msgbox "je sui une macro et je vais fermer le userform qui m'a appelé par son bouton "
     
    unload usf 
    end sub
    après cela il y a les api pour déterminer la quelle fenêtre est active mais la tu a du boulot
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre confirmé
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Par défaut
    J'ai toujours du mal en arguement et valeur, même si je sais que c'est important

    EDIT :
    J'ai testé, ça fonctionne !!!
    Merci !!!

    Il faut bien que j'assimile cette histoire d'argument, ça peux simplifier pas mal les choses

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut RE
    Re en fait il il a une autre solution qui peut avoir des avantage très intéressant

    et la on va parler des variables "PUBLIC"

    ces variables sont utilisables dans tout le classeur car elles sont déclaré en "public" a l'inverse de "dim" qui a une utilité local

    commençons par ton module standard ou se trouve ta subroutine

    en haut de module et en dehors des macro on va déclarer une variables public comme ceci:
    dans le module standard on met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public maform as object
    ensuite on place le code de la subroutine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub subroutine( )'ici plus d'argument est attendu comme tu peux le voir 
     msgbox "je sui une macro et je vais fermer le userform qui m'a appelé par son bouton "
     unload maform
    end sub
    maintenant dans le module du userform
    dans le activate de l'userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Activate()
    set maform=Me 
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    subroutine         '  ici il n'y a plus d'argument dans l'appel a la fonction  
    End Sub
    après avoir déclencher l'affichage de ton userform désormais pendant toute la duré de l'utilisation du fichier la variable "maform" représente ton userform
    et peut être utilisé quand bon te semble

    l'avantage de cette façon c'est que la commande "unload nom ou variable de l'userform peut être déclenché de n'importe ou sans même passer par le bouton ou l'userform lui même

    les inconvénient c'est que si tu a plusieurs userform affichés il te faut répéter l'opération autant de fois que de userform

    avec les arguments pas la peine

    voila pour aujourdh'ui

    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [VBA-E] Désactiver la croix pour fermer un userform
    Par $p00ky dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/06/2006, 10h51
  2. Réponses: 6
    Dernier message: 04/06/2006, 19h02
  3. fermer toutes fenetres active de l'application avant quitter
    Par iam dans le forum Bases de données
    Réponses: 0
    Dernier message: 03/06/2006, 11h42
  4. [VB6] Fermer une fenetre active
    Par tim69000 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/03/2006, 09h24
  5. Fermer la fenêtre active
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 11/12/2005, 21h57

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