Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Passer un USF ouvert d'un fichier à l'autre

carlos

XLDnaute Impliqué
Supporter XLD
Bonjour,
j'ai crée usf que j'ouvre sur le fichier 1.
Lorsque je passe sur le fichier 2 le usf n'apparait plus alors qu'il y a 2 ou 3 ans cela était possible.
J'ai pourtant mis: USF1.show 0.
Avez vous une réponse à me proposer?
Merci
Carlos
 

patricktoulon

XLDnaute Barbatruc
bonjour
je ne sais pas pourquoi @Dranreb utilise la getforegroundWindow pour chopper le handle du userform mais selon moi c'est pas une bonne idée il est possible qu'une de tes fenêtres soit en topmost absolu au quel cas c'est elle qui donne son handle
on est dans le activate alors utiliser la getactivewindow
 

Dranreb

XLDnaute Barbatruc
Dans le classeur joint l'UserForm a sa propriété ShowModal à True et n'est pas non plus affiché par UserForm1.Show vbModeless. Rien d'autre ne peut donc être exécuter pendant le Show, il est même possible que ça le pousse à ouvrir un autre classeur dans un processus différent.
 

Dranreb

XLDnaute Barbatruc
Chez moi il reste bien affiché quoi que je fasse.
Si ce n'est pas le cas chez vous, à tout hasard essayez ça :
VB:
Option Explicit
         #If VBA7 Then
Private Declare PtrSafe Function GetForegroundWindow Lib "user32" () As Long
Private Declare PtrSafe 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 PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
   (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
         #Else
Private Declare Function GetForegroundWindow Lib "user32" () As Long
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 SetWindowLong Lib "user32" Alias "SetWindowLongA" _
   (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
            #End If
Private hWnd As Long, WithEvents AppXL As Application
Private Sub UserForm_Initialize()
   Set AppXL = Application
   End Sub
Private Sub AppXL_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
   Me.Hide
   Me.Show
   End Sub
Private Sub UserForm_Activate()
   hWnd = GetForegroundWindow
   SetWindowPos hWnd, -1, 0, 0, 0, 0, &H43 ' Pour le forcer à rester affiché.
'   SetWindowPos hWnd, -2, 0, 0, 0, 0, &H43 ' Au dessus seulement des fenêtres qui ne sont pas en -1 mais sous celles ci.
   SetWindowLong hWnd, -8, 0 ' Pour le rendre indépendant de toute autre fenêtre.
   End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
@Dranreb le setwindowlong hwnd,-8
tu peux donner quelque explications

@calrlos a mon avis tu dois mal faire quelque chose

cela dit par expérience
je fait toujours le setwindowpos en dernier
le setwindowlong effectuer âpres pourrait tres bien changer la position
 

Dranreb

XLDnaute Barbatruc
GetWindowLong
GWL_WNDPROC(-4)Pour connaître l'adresse de la fonction WindProc de la fenêtre.
GWL_STYLE(-16)Renvoie le style de la fenêtre.
GWL_EXSTYLE(-20)Renvoie le style étendu de la fenêtre.
GWL_HWNDPARENT(-8)Permet de récupérer le handle de la fenêtre Parent.
GWL_HINSTANCE(-6)Pour récupérer le handle de l'instance possédant la fenêtre.
Set WindowLong hWnd, -8, 0 met donc je pense à 0 le handle de la fenêtre parent
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
325
Réponses
3
Affichages
563
Compte Supprimé 979
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…