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 :

Figer un Userform constamment au premier plan [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2014
    Messages : 53
    Par défaut Figer un Userform constamment au premier plan
    Bonjour,

    je cherche a figer un Userform constamment au premier plan.

    Je veux dire par ca que s'il perd le focus qu'il reste au premier plan.

    Quelqu'un sait il si c'est possible?

    J'ai essayé avec setwindowpos mais cela ne fonctionne pas....

    Merci

  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
    bonjou
    voir les api windows
    setwindowpos de la librairie user(32)
    tu a moulte exemple sur le forum

    c'est la seule api qui te permet non seulement de mettre ton userform au premier plan et qu'elle le reste
    il y en a d'autre qui mettent seulement le userform en premier plan mais ne fige pas cet etat
    comme showWindow,BringWindowToTop,setforeagroundwindow ,etc......
    bonne recherche elle ne devrait pas durer longtemps
    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 confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2014
    Messages : 53
    Par défaut
    Bonjour et merci

    J'ai cherché mais je dois faire une connerie....

    Avec ce code l'Userform passe bien au premier plan mais un clic sur une autre fenêtre et c'est terminé


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Public Declare PtrSafe Function SetWindowPos Lib "User32" _
    (ByVal Hwnd As LongPtr, _
    ByVal hWndInsertAfter As Long, _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal cx As Long, _
    ByVal cy As Long, _
    ByVal wFlags As Long) As Long
     
    Public Declare PtrSafe Function FindWindow2 Lib "User32" _
    Alias "FindWindowA" (ByVal IpClassName As Any, _
    ByVal IpWindowName As Any) As Long
     
    Public Const HWND_TOPMOST = -1
     
    Public Const SWP_NOSIZE As Long = &H2
     
     
    Sub Epingle()
     
        Dim Hwnd_Userform As LongPtr
     
        Hwnd_Userform = FindWindow(vbNullString, UserForm1.Caption)
     
        Call SetWindowPos(Hwnd_Userform, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE)
     
    End Sub

  4. #4
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2014
    Messages : 53
    Par défaut
    Yes.....

    ByVal hWndInsertAfter As LongPtr

    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 re
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetWindowPos handle_useform, -1, 0&, 0&, 0&, 0&, (&H1 Or &H2)    'force l'userform au  premier plan
    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
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je rappelle modestement que toute nouvelle fenêtre qui s'imposerait au premier plan "volerait" de toutes manières le premier plan TopMost de toute fenêtre qui en disposerait.
    S'il n'en allait pas ainsi, la fenêtre que l'on souhaite mettre au topmost ne pourrait alors pas s'y imposer à coup certain.
    Dans ce genre de démarche, c'est comme avec Louis XVI : c'est le dernier qui "parle" qui a raison.

    Conclusion : pour aller dans le sens de l'adverbe "constamment" utilisé tant dans le titre que dans l'exposé de la demande : --->> va falloir installer un timer (quelle qu'en soit la forme) si l'on veut récupérer à coup sûr un "topmost" qu'aurait volé une fenêtre tierce demandant elle aussi à être au "topmost".
    Et je préfère ne pas parler de la situation vicieuse qui surgirait si l'application gérant cette fenêtre tierce utilisait elle également (de son côté, donc) un timer pour rester elle aussi CONSTAMMENT au "topmost"
    Je vais faire ma sieste.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tu ne testes pas les bonnes choses. Donc ça ne saurait pas fonctionner.

    Fais le test avec un userform et ton code dans Excel. Ton usf est à l'avant plan. Pas de soucis. Tu peux ouvrir toutes les applis que tu veux, elles seront derrière. OK. Pourquoi ok? Parce qu'elles ne demandent pas d'être à l'avant-plan comme la tienne le demande....

    Maintenant, avec ton beau usf Excel à l'avant-plan... Crée un usf similaire dans Word, et lance-le... Qui est à l'avant-plan? Celui de Word. Donc, celui d'Excel ne sait pas être constamment à l'avant-plan... CQFD.

    Et, comme déjà dit, si tu réalises le test avec deux usf non modaux au sein d'Excel (avec ton code deactivate) puis que par une proc standard, tu lances le 1 puis le 2, ça devient rigolo (d'où mon conseil d'enregistrer tes travaux Excel)... Pourquoi? Parce que tu pars dans une boucle infinie... (et l'infini, c'est long, surtout vers la fin - Jean Yanne, je crois)

    Maintenant, je vais te dire pourquoi ça se passe comme cela, et ça n'a rien à a voir avec l'informatique. C'est juste un raisonnement logique.

    Ton usf peut demander de rester à l'avant-plan, mais il n'est pas le seul à pouvoir faire cela. D'autres fenêtres peuvent le faire aussi. Et pour ne pas qu'une appli puisse bloquer l'avant-plan ad vitam aeternam (t'imagines? Tu lances ta fenêtre, tu lui donnes la taille de l'écran et elle constamment à l'avant-plan... Tu comprends le problème?), c'est la dernière qui demande l'avant-plan qui l'obtient. Donc, ta fenêtre ne peut pas rester constamment à l'avant-plan. Tous tes tests et démos n'y changeront strictement rien...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    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
    @pierre je viens de tester ton test word/excel j'etait curieux et quoi que c'a fait tellement longtemps que j'utilise ces deux lignes de code que je connaissais le resultat
    j'ai donc créer un fichier word avec un userform
    nommé "userformword"
    dans son activate j'ai mis exactement pareil que dans le activate du userform1 dans excel
    c'est a dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Sub UserForm_Activate()
        'a l    'ouverture le userform prends le dessus
        Handle = FindWindow(vbNullString, UserFormword.Caption)
        SetWindowPos Handle, -1, 0&, 0&, 0&, 0&, (&H1 Or &H2)    'force l'userform au  premier plan
    End Sub
    dans le open du document j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Document_Open()
    UserFormword.Show 0
    End Sub
    on est bien d'accords que des que je lance ce fichier le userformword va s'afficher et c'est bien le lui dernier qui aura parler !!

    enregistrer le fichier sur le bureau
    je reviens dans excel
    dans son userform1 j'ai le activate et déactivate je le remontre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Sub UserForm_Activate()
        'a l    'ouverture le userform prends le dessus
        Handle = FindWindow(vbNullString, UserForm1.Caption)
        SetWindowPos Handle, -1, 0&, 0&, 0&, 0&, (&H1 Or &H2)    'force l'userform au  premier plan
    End Sub
    Private Sub UserForm_Deactivate()
    'si il est deactivé par l'ouverture d'une new fenetre quel quelle soit  il reprend le dessus
       Handle = FindWindow(vbNullString, UserForm1.Caption)
       SetWindowPos Handle, -1, 0&, 0&, 0&, 0&, (&H1 Or &H2)    'force l'userform au  premier plan
      End Sub
    voila maintenant je vais cliquer sur le bouton sur le sheets et afficher le userform1 dans excel c'est lui qui parle le premier on est d'accords????
    ensuite je vais ouvrir le fichier word en double cliquant dessus sur le bureau le userformword va s'ouvrir on est d'accords
    et donc prendre le dessus puisque c'est lui le dernier a avoir parler on est d'accords

    et bien une demo parle plus que les mots
    tout les resultat que tu pretends sont faux ou alors tu t'explique mal
    preuve
    Nom : demo2.gif
Affichages : 2782
Taille : 1,09 Mo

    comme on dit chez nous t'a raison j'ai pas tords
    et la tu peux pas dire que je m'arrange avec les resultat la demo est parlante

    par contre effectivement les deux userforms(excel/word) seront au dessus de tout le reste c'est la mon astuce
    sauf le window de excel réactivé la oui le userformword disparaitra mais le userform1 excel sera toujours dessus tu peux faire tout ce que tu veux
    a moins que la encore tu me dise que ca n'est valable que pour 2007 ce dont je doute fortement

    je te donne les deux fichiers si tu veux il n'y a pas de soucis
    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

  9. #9
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Bonjour,

    Retrouver le handle d'un userform à partir de son caption est hasardeux, surtout si les deux userform ont le même caption...

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Arkham46 Voir le message
    Bonjour,

    Retrouver le handle d'un userform à partir de son caption est hasardeux, surtout si les deux userform ont le même caption...
    C'est bien là le problème. Si dans Excel et dans Word, le userform a le même caption (ce qui est le cas dans le test de Patrick), le test valide sa thèse.

    Dans mon test, Les deux userforms ont des caption différents et Word prend donc la main.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Patrick,

    chez moi, le second userform prend le pas sur le premier (Word et Excel maximisés à l'écran, les deux userforms de taille identique se superposent), et je répète que c'est le comportement normal de Windows pour les raisons que j'ai expliquées dans un message précédent.

    Imagine simplement les conséquences si ton premier userform prend tout l'écran. Tu bloques alors toute possibilité de de travailler avec une autre application que la tienne. Je ne sais pas comment tu as procédé (je n'ai pas pris le temps de tester ton mode opératoire), mais je garantis que le second userform passe devant le premier.

    Autre situation dont je parlais plus haut: Fais le test avec deux userforms dans Excel (ou word, mais les deux dans la même appli), affiche-les en non modal avec le code suivant dans un module standard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub test()
      userform1.show 0
      userform2.show 0
    Tu peux me faire un gif du résultat que tu as? Tu vois bien qu'il y a bagarre entre tes deux userforms pour être à l'avant plan...

    J'essaierai d'ici ce soir de faire un gif de mon test Excel/word pour te montrer que le second usf passe bien devant le premier.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    J'ajoute ceci :
    extrait de l'aide interne VBA
    Les événements Activate et Deactivate ne se produisent que lorsque vous déplacez le focus à l'intérieur d'une application. Placer ou déplacer le focus sur ou hors d'un objet depuis une autre application ne déclenche ni l'un ni l'autre de ces événements.
    J'avais suggéré (cela aurait mis un terme à cette discussion, mais mon message a "disparu") de lancer l'une quelconque des applications qui, elles également, sont "candidates au topmost". Parmi elles, celle que je signalais (magnify.exe).
    Bonne journée à tous.

  13. #13
    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 Juste des observations, sans conclusions.
    Bonjour,

    Je confirme les dires de Jacques par un test que je viens de réaliser.

    Pré-requis :


    1. Fichier Word :
      • 1 userform avec sa propriété Caption = "userformWORD"
        Dans le module de cet Userform, le code donné par Patrick :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
        Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
        Private Sub UserForm_Activate()
            'a l    'ouverture le userform prends le dessus
            Handle = FindWindow(vbNullString, UserFormWORD.Caption)
            SetWindowPos Handle, -1, 0&, 0&, 0&, 0&, (&H1 Or &H2)    'force l'userform au  premier plan
        End Sub
      • Dans le module ThisDocument, le code (toujours celui de Patrick) :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        Private Sub Document_Open()
        UserFormWORD.Show 0
        End Sub
        ATTENTION : le 0 est ici très important. Le comportement serait tout autre sans, j'en ferais l'observation après.****
    2. Fichier Excel :
      • Un bouton dans la feuille avec ce code :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        Private Sub CommandButton1_Click()
           UserForm1.Show 0
           ouvre
        End Sub
        ATTENTION : le 0 est ici très important. Le comportement serait tout autre sans, j'en ferais l'observation après. ****
      • Un Userform dont la propriété Caption = UserformEXCEL
        Placer le code de Patrick dans le module de l'Userform :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
        Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
        Private Sub UserForm_Activate()
            'a l    'ouverture le userform prends le dessus
            Handle = FindWindow(vbNullString, UserForm1.Caption)
            SetWindowPos Handle, -1, 0&, 0&, 0&, 0&, (&H1 Or &H2)    'force l'userform au  premier plan
        End Sub
        Private Sub UserForm_Deactivate()
        'si il est deactivé par l'ouverture d'une new fenetre quel quelle soit  il reprend le dessus
           Handle = FindWindow(vbNullString, UserForm1.Caption)
           SetWindowPos Handle, -1, 0&, 0&, 0&, 0&, (&H1 Or &H2)    'force l'userform au  premier plan
        End Sub
      • Dans un module standard, le code d'ouverture du fichier Word :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
        6
        7
        8
        Option Explicit
         
        Sub ouvre()
        Dim NomFic As String, Wrd As New Word.Application
           NomFic = "C:\Users\" & Environ("username") & "\Desktop\Doc1.docm"
           Wrd.Documents.Open NomFic
           Wrd.Visible = True
        End Sub
        ATTENTION : nécessite de cocher la référence à Microsoft Word 14.0 Object Library

    Note à Patrick : tu ne déclares jamais tes variables??

    J'enregistre le fichier Word et le ferme.
    Ici, peu importe que l'une ou l'autre des applications (ou les deux) soit Maximisée ou pas.

    Au clic sur le bouton, l'userform Excel s'affiche suivi par Word.
    Le résultat est que l'Userform d'Excel est bien devant celui de Word :
    Nom : ouverture.png
Affichages : 2680
Taille : 25,7 Ko

    Au clic sur l'userform de Word, celui-ci passe devant ET y reste (ce que disait Jacques précédemment à propos de l'événement Deactivate...) :
    Nom : Word.png
Affichages : 2625
Taille : 17,4 Ko
    On voit, en plus, que l'application Word passe devant Excel, mais reste derrière l'Userform Excel.
    Comportement tout à fait "normal".

    Les 0...

    • ****L'userform Word est affiché en mode Modal (sans le 0), celui d'Excel est en "Non Modal" (avec le 0) :
      1. Positionnements :
        • L'userform Word est au premier-plan
        • L'userform Excel est au second plan
        • L'application Excel est au troisième plan
        • L'application Word n'est pas visible
      2. L'userform Excel a le focus.
        S'il le perd (clic sur l'userform Word), il ne le retrouvera jamais, le focus, tant que l'userform Word est affiché.
      3. L'application Word devient visible à la fermeture de l'userform Word, au troisième plan (derrière l'userform Excel et l'application Excel).
    • **** L'userform Word est affiché en mode "Non Modal" (avec le 0), celui d'Excel est en Modal (sans le 0) :
      Très simple.
      Le code de la Sub ouvre() s'arrête à l'affichage de l'userform Excel et ne reprends (ouverture de Word) que lorsque l'Userform Excel est fermé par l'utilisateur.
      Comportement on ne peut plus normal.
      Notez que l'application Word passe au second plan, derrière l'userform Word. L'application Excel se contente alors du troisième plan.
    • Ce même comportement est observé si les deux Userforms sont en mode Modal (sans le 0).
      Notez qu'ici l'application Word ne sera visible que lors de la fermeture de l'userform Word.

    Ce ne sont que des observations, je me suis bien gardé de tirer des conclusions, conclusions bien connues en relisant les réponses de Pierre et Jacques.

    Ma réponse personnelle donc à Jean-Philippe44 :
    je cherche a figer un Userform constamment au premier plan.
    Je veux dire par ca que s'il perd le focus qu'il reste au premier plan.
    Quelqu'un sait il si c'est possible?
    Cela semble, en effet, bien impossible.

    EDIT : Mais, au juste, qu'elle est la finalité de tout ceci?
    Pourquoi vouloir conserver un Userform au premier plan?

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

Discussions similaires

  1. [XL-2010] selectionner quel userform mettre en premier plan parmis plusieurs
    Par SpcCwb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/05/2013, 10h19
  2. [XL-2010] premier plan d'un userform
    Par pilounet54 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2012, 22h10
  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