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
 

Dudu2

XLDnaute Barbatruc
Le bouton qu'il a placé dans son code:
VB:
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
 

vmatthieu

XLDnaute Occasionnel
je viens d'essayer en repartant de 0, chez moi cela ne fonctionne pas. Je joins le fichier, si desfois quelques uns peuvent me confirmer si cela fonctionne chez eux ?
(ça reste quand même troublant ...)
 

Pièces jointes

  • test exceldownload.xlsm
    17.8 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
Bonjour.
Il ne faut pas l'afficher dans la Workbook_Open.
Lancez y par Application.OnTime Now + TimeSerial(0, 0, 1), une procédure d'un module standard qui l'affiche.
J'ai l'impression que fait comme ça, c'est la fenêtre du classeur qui devient la fenêtre d'avant plan avant celle de l'UserForm. Donnée alors par GetForegroundWindow, c'est elle qui reste affichée et indépendante des autres au lieu de la sienne.
C'était probablement déjà la cause des réactions bizarres de votre classeur, que je n'avais pas compris au poste #27. Il ne doit plus être en train d'exécuter des évènements Excel au moment où on affiche l'UserForm, sinon, résultat imprévisible.
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Je confirme.
Ça marche mieux comme ça.
La situation que j'ai décrit n'a pas évolué
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 ...
Si on réduit complètement la fenêtre du Classeur actif lorsque l'userform a été lancé, l'userform aussi est réduit ... donc inexploitable .
1640772213787.png
1640772324144.png
 

Dranreb

XLDnaute Barbatruc
Bonjour
Chez moi non, il reste visible quand je réduit la fenêtre d'un autre classeur ou du TestVmatthieu.xlsm, d'où qu'ait été lancée sa Sub AfficheUFm1 du moment que ce n'est pas directement d'une Workbook_Open du ThisWorkbook pendant son déroulement, ce qui lui fait prendre note d'un mauvais UFhWnd (en différé, après son exécution, par un Application.OnTime effectué dedans, ça va). Par contre c'est vrai, sa barre de titre n'est pas tout de suite visible dans la barre des tâches, juste après SetWindowLong UFhWnd, -8, 0 et j'ignore pourquoi. D'autre part la SetWindowPos UFhWnd, -2, 0, 0, 0, 0, 3 n'a pas tout à fait l'effet escompté: l'UserForm est masqué au lieu de rester affiché mais derrière le MsgBox. Mais vous pouvez toujours faire des recherches et tests de paramétrages différents de ces API, peut être que vous trouverez mieux. Quand même scandaleux qu'on soit obligé de bricoler comme ça pour rattraper les conneries de Microsoft.
Si ça se justifie parfois, que la fenêtre d'un UserForm soit affiliée à celle du classeur actif au moment de son Show, bon, d'accord, mais alors ça devrait pouvoir se définir par une nouvelle propriété des UserForm, et pas empêcher le fonctionnement bien pratique d'autrefois !
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 630
Messages
2 111 379
Membres
111 115
dernier inscrit
mermo