Userform Excel "always on top" Possible ? [Résolu]

cs_cobra2008 25 Messages postés mardi 24 juillet 2007Date d'inscription 27 août 2010 Dernière intervention - 2 nov. 2007 à 13:54 - Dernière réponse : Moy22BZH 3 Messages postés mardi 1 août 2006Date d'inscription 17 janvier 2008 Dernière intervention
- 17 janv. 2008 à 21:09
Bonjour,
je début en VBA (Excel) et pour mon application, j'aurais voulu savoir s'il est possbile de pour rendre un userform  toujours visible même en commutant entre applications, ex :


avoir le userform visible au dessus des autre applications lorsque je passe de excel vers IE ou Outlook  (ou tout autre programme)??


Merci pour votre aide
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
zavier666 267 Messages postés mardi 7 septembre 2004Date d'inscription 30 avril 2009 Dernière intervention - 2 nov. 2007 à 19:52
3
Merci
Oui, c'est possible:

1. fct qui  rechercher le handle de ta fenêtre
Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal 
nom_classe As String, _
ByVal nom_fenetre As String) As Long 


2. fct rend la fenêtre always on top
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _
ByVal 
param1 As Long, ByVal x As Long, ByVal y As Long, _
ByVal largeur As Long, 
ByVal hauteur As Long, _
ByVal param2 As Long) As Long 

3. le code 

nom_fenetre =   nom de la fenetre 
handle_fenetre = FindWindow(vbNullString, nom_fenetre)

SetWindowPos Form1.hwnd, -1, 0, 0, 0, 0, &H1 Or &H2




voilà

--------------------------------------------------
Toujours + de VB et d'API => APi @ le Loupe
http://apialaloupe.free.fr

Merci zavier666 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de zavier666
cs_cobra2008 25 Messages postés mardi 24 juillet 2007Date d'inscription 27 août 2010 Dernière intervention - 5 nov. 2007 à 08:40
0
Merci
Merci bcp pour ton aide, cela fonctionne nickel
Commenter la réponse de cs_cobra2008
cs_scotty59 4 Messages postés mardi 6 novembre 2007Date d'inscription 6 novembre 2007 Dernière intervention - 6 nov. 2007 à 11:48
0
Merci
Bonjour, j'ai exactement le meme cas
j'essai de developper un outil qui me lance un formulaire à une heure donnée. Pour cela j'utilise application.ontime -->pas de pb

ça fait maintenant 3 jours que je cherche le moyen de faire apparaitre ce userform en premier plan mais rien n'y fait.
j'ai voulu utiliser le code de xavier666 pour faire apparaitre le userform mais j'ai un message d'erreur "incompatibilité de type" sur la fonction findwindow

pouvez vous m'aider?
Commenter la réponse de cs_scotty59
cs_cobra2008 25 Messages postés mardi 24 juillet 2007Date d'inscription 27 août 2010 Dernière intervention - 6 nov. 2007 à 12:09
0
Merci
Salut Scotty 59,
voila comment j'ai fait avec comme base le code de xavier66 (pour la récupération du handle de la fenêtre, j'utilise une autre fonction) :

1/ je crée un module de classe que je nomme CustomProperties (nom pouvant changer)
dans ce module de classe je met le code suivant :

' Fonction d'acquisition de l'identifiant de la fenêtre active
 Private Declare Function GAW Lib "user32" Alias "GetActiveWindow" () As Long

'API nécessaire pour le mode "toujours visible"
 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  Whdl As Long
'*** Acquisition du Handle de la Userform ***
 '*** pour initialisation ***
 Public Function Initialisation()
  Whdl = GAW
 End Function

'Fonction toujours Visible, necessité d'appeler la fonction initialise avant celle-ci (pour avoir le handle de la userform)
 Public Function forward()
 Dim Resultat As Long
 Const Flags = &H2 Or &H1 Or &H40 Or &H10
 Resultat = SetWindowPos(Whdl, -1, 0, 0, 0, 0, Flags)
 End Function

 'annuler toujours visible,necessité d'appeler la fonction initialise avant celle-ci (pour avoir le handle de la userform)
 Public Function backward()
 Dim Resultat As Long
 Const Flags = &H2 Or &H1 Or &H40 Or &H10
 Resultat = SetWindowPos(Whdl, -2, 0, 0, 0, 0, Flags)
 End Function

2/Dans mon userform, dans la fonction Private Sub UserForm_Activate(), je me le code suivant

Private Sub UserForm_Activate()
  Me.CustomProperties.Initialisation 'Acquisition du Handle de la Userform
  Me.CustomProperties.forward    'Permet de mettre la calculatrice en toujours visible (always on top)
End Sub

Normalement, avec cela tu devrait t'en sortir
Commenter la réponse de cs_cobra2008
cs_scotty59 4 Messages postés mardi 6 novembre 2007Date d'inscription 6 novembre 2007 Dernière intervention - 6 nov. 2007 à 13:19
0
Merci
salut, j'ai bien utilisé tes fonctions mais une erreur de compilation "membre de methode ou données introuvables" apparait
j'ai bien nomme le modul de classe etc...

merci pour le coup de main ..;je suis trop mauvais
Commenter la réponse de cs_scotty59
cs_cobra2008 25 Messages postés mardi 24 juillet 2007Date d'inscription 27 août 2010 Dernière intervention - 6 nov. 2007 à 14:22
0
Merci
Autant pour moi, j'ai oublié de te dire une chose (et j'ai fait une erreur....),
1/dans le code de ta userform, il faut mettre :

' Variable global au useform on attache la variable au module de classe
 Public MyPropriety As CustomProperties 'CustomProperties étant le module de classe

2/et du coup, la fonction Private Sub UserForm_Activate() devient
Private Sub UserForm_Activate()
  Me.MyPropriety.Initialisation 'Acquisition du Handle de la Userform
  Me.MyPropriety.forward    'Permet de mettre la calculatrice en toujours visible (always on top)
End Sub
Commenter la réponse de cs_cobra2008
cs_scotty59 4 Messages postés mardi 6 novembre 2007Date d'inscription 6 novembre 2007 Dernière intervention - 6 nov. 2007 à 14:47
0
Merci
effectivement, je n'ai plus d'erreur
par contre je lance mon timer, je me met sur outlook(exemple) et la fenetre ne se met toujours pas en premier plan (il faut que je clic sur excel pour voir mon formulaire)

c'etait le pourquoi de l'ouverture de cette discussion.  pour toi ça marche?
Commenter la réponse de cs_scotty59
cs_cobra2008 25 Messages postés mardi 24 juillet 2007Date d'inscription 27 août 2010 Dernière intervention - 6 nov. 2007 à 14:54
0
Merci
oui, cela fonctionne pour moi, j'ai fait l'essai, si tu a un mail, je peux te passer mon fichier excel pour que tu puisse voir si cela fonctionne chez toi....
(Pour rappel, mon programme, cache Excel et affiche un userform)
Commenter la réponse de cs_cobra2008
cs_scotty59 4 Messages postés mardi 6 novembre 2007Date d'inscription 6 novembre 2007 Dernière intervention - 6 nov. 2007 à 14:55
0
Merci
ok ok
j'ai vu...effectivement quand tu switch d'appli via la barre de menu le userform reste en premier plan...
ce que je voudrait en plus ce que le userform apparaisse en premier plan meme si tu es en train de bosser sur une autre appli
c est faisable?

merci  (c'etait le temps que l'info arrive au cerveau)
Commenter la réponse de cs_scotty59
cs_cobra2008 25 Messages postés mardi 24 juillet 2007Date d'inscription 27 août 2010 Dernière intervention - 6 nov. 2007 à 15:08
0
Merci
oui, mon appli le fait (je suis sous Word par exemple, eet je double clic sur mon fichier Excel, et l'appli apparait devant word)

en fait, qd excel s'ouvre, je le cache et je met mon userform en alway on top, et quand je ferme mon appli, je ferme en mêm temps Excel.
Si tu le shoutaite, je peux t''envoyer par mail un exemple de fichier Excel qui fait ce que tu veux (si j'ai tout compris)..
Commenter la réponse de cs_cobra2008
zavier666 267 Messages postés mardi 7 septembre 2004Date d'inscription 30 avril 2009 Dernière intervention - 6 nov. 2007 à 19:38
0
Merci
Hello,


je vous propose (pour aller plus loin) une astuce supplémentaire:

Connaissez-vous le vbModeless?


Dans une sheet, placer un bouton.

Associez à ce code : userform1.show(vbModeless)      => vous devez donc aussi créer une userform :)


Quelle différence?


Contrairement au chargement traditionnel d'une userform, vous pouvez utiliser en même temps votre instance excel.

Pour voir la différence, enlevez vbModeless et essayer de cliquer sur la feuille.


Et voilà tout un monde de nouvelles perspectives qui s'ouvre à nous!!!

--------------------------------------------------
Toujours + de VB et d'API => APi @ le Loupe
http://apialaloupe.free.fr
Commenter la réponse de zavier666
Moy22BZH 3 Messages postés mardi 1 août 2006Date d'inscription 17 janvier 2008 Dernière intervention - 10 janv. 2008 à 16:38
0
Merci
Bonjour à tous.
Je débute vraiment en vb sous excel et je n'ai pu mettre en route les codes proposés sur la première page.
Pourriez-vous mettre à dispo un petit fichier xls de démo ?
Merci beaucoup !
Commenter la réponse de Moy22BZH
cs_cobra2008 25 Messages postés mardi 24 juillet 2007Date d'inscription 27 août 2010 Dernière intervention - 11 janv. 2008 à 11:44
0
Merci
Salut Moy22BZH,
le lien ci dessous te permet de récupérer un exemple de mon programme pour afficher une userform alwayOnTop (je cache Excel en même temps)
http://www.vbfrance.com/codes/USERFORM-ALWAYS-ON-TOP-AVEC-VBA-SOUS-EXCEL_45385.aspx
Commenter la réponse de cs_cobra2008
Moy22BZH 3 Messages postés mardi 1 août 2006Date d'inscription 17 janvier 2008 Dernière intervention - 17 janv. 2008 à 21:09
0
Merci
Merci beaucoup COBRA2008 !
Ca marche nickel ! Juste le code qu'il me manquait... Encore merci !
Commenter la réponse de Moy22BZH

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.