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 :

Conserver un userform au premier plan


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé de projets stratégie et organisation
    Inscrit en
    Janvier 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets stratégie et organisation
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 13
    Par défaut Conserver un userform au premier plan
    Bonjour à tous,

    Je me permets de poster car je ne trouve pas exactement la réponse au problème que je rencontre:
    - j'ai un userform dans lequel j'ai ouvert un navigateur pour disposer d'informations en temps réel (un widget en gros)
    - je réussi très bien à réduire mon classeur Excel sans réduire les autres
    - mon userform est donc toujours affiché lorsque je travaille sur mon PC.

    Le seul hic:
    quand j'ouvre un autre classeur, et que je le réduis, mon userform se réduit aussi. Il faut donc que je conserve tous mes classeurs en xlnormal et ça c'est un peu gênant.

    J'ai lu un post où on explique que l'on peut reconnaître une activité sur un autre workbook:
    Citation Envoyé par Maxence HUBICHE Voir le message
    Hello !

    Ca y est !
    Ca marche !


    Bon, l'idée c'est que tout le code soit géré dans ta macro complémentaire
    Dans dans le ThisWorkBook de ta macro complémentaire, tu as besoin d'une variable qui pointe sur l'application en cours et qui trappe les évènement de l'objet application en cours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Private WithEvents objApp As Application
    Ensuite, il faut initialiser ta variable à l'installation en tant que macro complémentaire, et la détruire quand tu désinstalle (si tu le fais) la macro complémentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Workbook_AddinInstall()
        Set objApp = Application
    End Sub
    Private Sub Workbook_AddinUninstall()
        Set objApp = Nothing
    End Sub
    Pour finir, tu récupères l'évènement dont t'a parlé pgz sur l'application (et non le classeur) pour tester la feuille et renvoyer un traitement plus adéquat que dans l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub objApp_SheetActivate(ByVal Sh As Object)
        If Sh.ProtectContents Then
            MsgBox "Attention ! Cette feuille est protégée !", , "Information Sécurité"
        Else
            MsgBox "C'est bon ! tu peux y aller !!!", , "Information Sécurité"
        End If
    End Sub
    Tout ce code est contenu dans le seul module de ThisWorkBook, dans ton projet

    vàlà
    Mais je n'arrive pas à le faire fonctionner. Pour moi si je veux disposer de mon userform toujours au premier plan, je dois détecter toute activité Application.WindowState = xlMinimized et, à partir de là remettre systématiquement mon userform en show.

    Vous en pensez quoi? (je suis débutant en VBA).

    Merci de votre aide

  2. #2
    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
    Bon je vois pas ou est ton soucis les choses simple sont les plus eficaces en general
    dans le code de ton userform tu met

    a l'activate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Activate()
    Application.Visible = False
    End Sub
    pour fermeture de l'userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Application.Visible = True
    End Sub
    et voila quand tu ouvre le userform l'aapp excel disparait et quand tu le ferme elle reviend
    point barre
    c'est pas compliqué
    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

  3. #3
    Membre averti
    Homme Profil pro
    Chargé de projets stratégie et organisation
    Inscrit en
    Janvier 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets stratégie et organisation
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 13
    Par défaut
    Bonjour Patrick,

    Merci pour votre réponse. C'est simple oui, mais je ne veux pas masquer mes autres classeurs.
    Ce que je veux c'est masquer le classeur dans lequel est contenu le userform. Le hic de cette démarche c'est que si je travaille sur un autre classeur et que je finis par le réduire, de fait, le userform se réduit aussi.

    C'est cela que je veux éviter.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tes classeurs sont probablement situés dans la même instance.

    il faudrait dans ce cas :

    - avoir ce fichier dans une instance Excel
    - pour tout autre fichier sur lequel tu travailles en même temps : se mettre sur une seconde instance.

    regarde si c'est bien ça

  5. #5
    Membre averti
    Homme Profil pro
    Chargé de projets stratégie et organisation
    Inscrit en
    Janvier 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets stratégie et organisation
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 13
    Par défaut
    Hum, je pense que ce serait la bonne solution effectivement.
    J'ai trouvé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim currentExcel As Excel.Application
        Dim newExcel As Excel.Application
     
        Set currentExcel = GetObject(, "excel.application")
        Set newExcel = CreateObject("excel.application")
     
        newExcel.Visible = False
        newExcel.Workbooks.Add
    Mais ça ne fonctionne pas des masses...

    Merci pour votre aide

  6. #6
    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 soit c'est pas compliqué no plus

    donc quand tu ouvre le userform le classeur du userform doit etre invisible et quand tu le ferme c'est lui qui prend le dessus

    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim classeurusf 'pour garder la variable dans tout les evenement ou les macros
    pour le activate du userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Activate()
    classeurusf = ActiveWindow.ActiveSheet.Parent.Name
    Windows(classeurusf).WindowState = xlMinimized
    End Sub
    pour le close du userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Windows(classeurusf).WindowState = xlMaximized
    End Sub
    voila
    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

  7. #7
    Membre averti
    Homme Profil pro
    Chargé de projets stratégie et organisation
    Inscrit en
    Janvier 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets stratégie et organisation
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 13
    Par défaut Re
    Merci Patrick, mais malheureusement ça ne correspond pas à ce que je recherche (sorry).

    1) Je cherche vraiment à ce que le classeur contenant le userform disparaisse de la barre des tâches
    2) le userform doit dans tous les cas de figure être au premier plan de mon écran mais ne doit en aucun cas bloquer la possibilité de travailler sur d'autres classeurs excel par exemple.

    L'unique difficulté que je rencontre est de pouvoir le conserver à l'écran quand je réduis un des autres classeurs. Comme l'a écrit Joe.levrai je pense que ce problème est dû au fait que mon classeur Excel s'ouvre dans la même instance que les autres. Le problème c'est que je ne sais pas comment faire ça...

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

Discussions similaires

  1. [XL-2013] Affichage d'un userform en premier plan
    Par BGVendée dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/09/2015, 17h53
  2. [XL-2007] Mettre Userform en premier plan VS barre des tâches
    Par Lufia dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/08/2013, 14h05
  3. [XL-2007] Userform reste au premier plan
    Par XceSs dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/03/2012, 17h42
  4. Afficher un userform au premier plan
    Par Invité(e) dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/08/2011, 23h35
  5. Laisser userform en premier plan
    Par Iloon dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/09/2008, 13h19

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