XL 2019 utilsation d'un userform dans plusieurs fichiers

vmatthieu

XLDnaute Occasionnel
bonjour à tous,
j'utilisais un fichier avec une macro sous excel 2003 (oui ça existe encore) qui me permetait d'ouvrir un userform et d'utiliser celui çi sur n'importe quels autres fichiers excel ouverts( grace à la propriété modal false).

je suis maintenant sous windows 11 sous office 2019 , la propriété modal reste bien en false mais quand je change de fichier excel, l'userform disparait. Il n'est utlisable qu'avec le classeur dans lequel il est. Du coup je suis marron.

l'un de vous sait t'il comment on peut procéder pour que (comme avant) une fois l'userform ouvert, il reste utilisable sur n'importe quel autre fichier excel ouvert?

merci d'avance
bonne journée
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

La ligne est répétée 2 fois d'ou le message
1640514487112.png


Bonne fêtes

@Phil69970
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à tous, bonjour @Dranreb
je suivais cet échange (j'avais trouvé sur un autre site l'utilisation de SetWindowPos en TOPMOST sans l'affichage dans la barre des tâches)
J'ai juste une petite remarque, si l'UserForm lance une autre fenêtre qui attend une réponse (exemple un Msgbox) et que cette fenêtre s'affiche derrière le UserForm ... On est bloqué car on ne peut plus déplacer le UserForm et il est inactif.
Voir l'exemple joint : le UserForm s'affiche au centre , on clique sur le bouton "Nom du Classeur", le message box s'affiche juste derrière et on ne peut plus rien faire, sauf "Entrée" pour acquitter le MsgBox en aveugle et récupérer la main.

Bonne Fêtes à tous
 

Pièces jointes

  • UsF Modal.xlsm
    21.7 KB · Affichages: 3

Dranreb

XLDnaute Barbatruc
Ceci semble régler le problème :
VB:
Option Explicit
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
Private UFhWnd As Long
Private Sub UserForm_Activate()
   UFhWnd = GetForegroundWindow
   SetWindowPos UFhWnd, -1, 0, 0, 0, 0, 3 ' Pour le forcer à rester affiché.
   SetWindowLong UFhWnd, -8, 0 ' Pour le rendre indépendant de toute autre fenêtre.
   End Sub
Private Sub CBn_Nom_Click()
   SetWindowPos UFhWnd, -2, 0, 0, 0, 0, 3 ' Au dessus seulement des fenêtres qui ne sont pas en -1 mais sous celles ci.
   MsgBox ActiveWorkbook.Name
   SetWindowPos UFhWnd, -1, 0, 0, 0, 0, 3 ' Au premier niveau, conservant cet attribut même lorsqu'elle perd le focus.
   End Sub
Le fait que son Caption soit dans la barre des tâches n'est pas dû au SetWindowPos mais au SetWindowLong servant à annuler cette stupide décision de Microsoft d'avoir un jour affilié les fenêtres d'UserForm à celles des classeurs.
 
Dernière édition:

AtTheOne

XLDnaute Impliqué
Supporter XLD
Ceci semble régler le problème :
VB:
Option Explicit
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
Private UFhWnd As Long
Private Sub UserForm_Activate()
   UFhWnd = GetForegroundWindow
   SetWindowPos UFhWnd, -1, 0, 0, 0, 0, 3 ' Pour le forcer à rester affiché.
   SetWindowLong UFhWnd, -8, 0 ' Pour le rendre indépendant de toute autre fenêtre.
   End Sub
Private Sub CBn_Nom_Click()
   SetWindowPos UFhWnd, -2, 0, 0, 0, 0, 3 ' Au dessus seulement des fenêtres qui ne sont pas en -1 mais sous celles ci.
   MsgBox ActiveWorkbook.Name
   SetWindowPos UFhWnd, -1, 0, 0, 0, 0, 3 ' Au premier niveau, conservant cet attribut même lorsqu'elle perd le focus.
   End Sub
Le fait que son Caption soit dans la barre des tâches n'est pas dû au SetWindowPos mais au SetWindowLong servant à annuler cette stupide décision de Microsoft d'avoir un jour affilié les fenêtres d'UserForm à celles des classeurs.
Merci @Dranreb
Effectivement ça solutionne le problème
Bon appétit si ce n'est déjà fait
 

vmatthieu

XLDnaute Occasionnel
😭, ça ne fonctionne pas chez moi, j'ai bien tout coller , pas d'erreur mais ça ne fonctionne pas.
j'ai téléchargé le fichier d attheone usf modal.xlsm (plus haut), il ne fonctionne pas non plus.

j'ai bien l'userform mais qui disparait dès que je vais sur un autre classeur.
Mais pourquoi donc ????
je joins le fichier, si vous voyez quelque chose ...
 

Pièces jointes

  • test exceldownload.xlsm
    72 KB · Affichages: 2
Dernière édition:

Dranreb

XLDnaute Barbatruc
Faites de temps à autre Alt+DL avant de lancer la sauce.
Dans UserForm1 remplacez partout UserForm1 par Me.
Mais de toute façon il y a aussi un problème que je ne comprends pas bien, une mystérieuse anomalie de la fenêtre du classeur qui empêche d'atteindre les autres …
Vous devriez peut être repartir de zéro avec juste un UserForm muni du dispositif pour voir s'il réagit normalement, et après seulement ajouter du code …
Mettez plutôt la propriété ShowModal du UserForm à False: Il doit être conçu en non modal et qu'il ne soit jamais question de l'afficher autrement.
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Bonjour le fil,
Je découvre de plus en plus de problèmes avec la version 2019 (64bits) ...


J'ai installé/désinstallé Excel 2019 mais rien n'y fait ... et si j'insiste à trop ouvrir et fermer de classeurs excel en conservant le VBE ouvert, j'ai un message de mémoire insuffisante et un freeze complet d'excel .
Pour info, ce n'est pas la mémoire qui me fait défaut ( pas encore ... )
1640532166230.png

Et ma foi, c'est identique sur 2 pc , l'un en W10 et l'autre en W11 ( à part la présentation ).

Quel est le rapport avec le post ?
Je veux bien participer , mais je suis aléatoirement marron dès que j'ouvre plus de 3 classeurs en simultané ...

M'enfin, 😩
J'ai bien appliqué ce que suggère @Dranreb .
Voici ce que je constate :
J'ouvre 2 classeurs indépendants .
Je lance l'userform et il est "scotché" avec le classeur actif (même si ce n'est ps celui qui a le code de l'userform)
je bascule vers l'autre classeur , l'userform est caché par celui-ci , on ne trouve pas l'userform dans la barre des taches ( tout au moins dans la mienne )
Pour pouvoir interagir confortablement dans les 2 classeurs avec le même userform,il faut que l'espace écran soit partagé entre les 2 classeurs ( je n'ai pas testé plus ..) et que l'userform soit à cheval sur les deux ...

Pas de solution en fait ...
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof