Userform Excel "always on top" Possible ?

Résolu
cs_cobra2008 Messages postés 25 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 27 août 2010 - 2 nov. 2007 à 13:54
Moy22BZH Messages postés 3 Date d'inscription mardi 1 août 2006 Statut Membre Dernière intervention 17 janvier 2008 - 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
A voir également:

14 réponses

zavier666 Messages postés 266 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 30 avril 2009 1
2 nov. 2007 à 19:52
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
3
cs_cobra2008 Messages postés 25 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 27 août 2010
5 nov. 2007 à 08:40
Merci bcp pour ton aide, cela fonctionne nickel
0
cs_scotty59 Messages postés 4 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 6 novembre 2007
6 nov. 2007 à 11:48
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?
0
cs_cobra2008 Messages postés 25 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 27 août 2010
6 nov. 2007 à 12:09
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_scotty59 Messages postés 4 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 6 novembre 2007
6 nov. 2007 à 13:19
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
0
cs_cobra2008 Messages postés 25 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 27 août 2010
6 nov. 2007 à 14:22
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
0
cs_scotty59 Messages postés 4 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 6 novembre 2007
6 nov. 2007 à 14:47
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?
0
cs_cobra2008 Messages postés 25 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 27 août 2010
6 nov. 2007 à 14:54
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)
0
cs_scotty59 Messages postés 4 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 6 novembre 2007
6 nov. 2007 à 14:55
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)
0
cs_cobra2008 Messages postés 25 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 27 août 2010
6 nov. 2007 à 15:08
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)..
0
zavier666 Messages postés 266 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 30 avril 2009 1
6 nov. 2007 à 19:38
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
0
Moy22BZH Messages postés 3 Date d'inscription mardi 1 août 2006 Statut Membre Dernière intervention 17 janvier 2008
10 janv. 2008 à 16:38
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 !
0
cs_cobra2008 Messages postés 25 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 27 août 2010
11 janv. 2008 à 11:44
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
0
Moy22BZH Messages postés 3 Date d'inscription mardi 1 août 2006 Statut Membre Dernière intervention 17 janvier 2008
17 janv. 2008 à 21:09
Merci beaucoup COBRA2008 !
Ca marche nickel ! Juste le code qu'il me manquait... Encore merci !
0
Rejoignez-nous