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
 

carlos

XLDnaute Impliqué
Supporter XLD
Ca ne passe pas même avec un fichier contenant juste un userform vide. Grh!!
1668245344699.png
.
 

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:

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
288
Réponses
3
Affichages
522
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 232
Messages
2 086 461
Membres
103 220
dernier inscrit
samira2024