XL 2016 VBA - Positionnement UserForm - PC a 2 écrans

Dudu2

XLDnaute Barbatruc
Bonjour,

J'ai fait un code pour un utilisateur qui possède 2 écrans sur son PC. Je n'ai pas cette config.
Lorsqu'il lance ce UserForm, il ne va pas sur la fenêtre Excel (1er écran à gauche) mais sur le Bureau (2ème écran à droite).

Une idée de comment forcer le UserForm à s'afficher dans l'écran de la fenêtre Excel ?
Merci par avance.
 

Pièces jointes

  • VBA Retirer le Caption d'un UserForm et le placer en StatusBar.xlsm
    24.9 KB · Affichages: 11

patricktoulon

XLDnaute Barbatruc
regarde tout les handles de fenetres fille et petite fille qui compose la fentrex excel
si la dedans ya pas la statusbars je serait étonne
j'ai du faire une erreur dans mon code je n'arrive pas a avoir leur classe name
1637354118207.png
 

Dudu2

XLDnaute Barbatruc
C'est pas grave de pas trouver la fenêtre de la StatusBar. On sait où elle est.
Et mon utilisateur voulait quelque chose de plus visible que le texte en StatusBar (écrit petit et sur fond gris) c'est pour ça que je suis passé à un UserForm.

2 petits commentaires.

Pour les positions il faut faire la différence entre Application maximisée (les .Top et .Left sont négatifs le .Height je sais pas trop et je n'ai jamais compris ces chiffres négatifs) et Application réduit (Les .Top et .Left sont corrects)
Voilà ce que j'ai du faire pour avoir un positionnement identique selon maximisé ou réduit.
Me.Move 0, Application.Height - Me.Height + 2 * IIf(Application.Top < 0, Application.Top, 0)

Après je sais pas d'où t'as sorti l'évènement Workbook_WindowResize au milieu d'un UserForm mais ça m'a laisse coi :oops:. Cependant cet évènement n'est jamais déclenché chez moi et c'est bien dommage ! Il faut du code dans le ThisWorkbook ?
 

patricktoulon

XLDnaute Barbatruc
re
non pas du tout l'event d'origine reste intègre
l'event de substitution se produit dans un calque si je puis m'exprimer ainsi
tu peux même utiliser les deux events identique

pour info le windowresize d'origine est quasiment en bas de la liste dans le thisworkbook

mais en le mettant dans le userform comme je le fait ton userform n'est pas dépendant du module thisworbook
on évite de s'éparpiller dans les modules comme ca . et la transportabilité du module userform =100%
;)
 

Dudu2

XLDnaute Barbatruc
Ah Merci. Suis allé trop vite.
Je vais aller me coucher.
En tous cas, tu m'as super bien dépoté le problème et je t'en remercie vraiment.
Bonne nuit mon @patricktoulon.

Et Merci aussi à @BrunoM45 pour son code.

Edit: Ce matin je rajoute quand même pour info mon fichier qui est bien sûr conforme à ce que @patricktoulon a mis en place, sauf que j'ai gardé l'API native.
 

Pièces jointes

  • VBA Retirer le Caption d'un UserForm et le placer en StatusBar.xlsm
    24.8 KB · Affichages: 7
Dernière édition:

Dudu2

XLDnaute Barbatruc
Merci à @BrunoM45 pour son post #7 qui a été le point de départ de mon développement concernant ce sujet.
 

Lolote83

XLDnaute Barbatruc
Bonjour à tous.
J'ai parcouru rapidement cette discussion et pour positionner un UserForm sur l'écran Excel en fonction de son positionnement (Gauche ou droite) , j'utilise ceci.
VB:
Private Sub UserForm_Initialize()
    '-------------------------------------------------------- Positionnement UserForm
    Me.StartUpPosition = 0                                                  'Déclarer position MANUAL
    Me.Left = Application.Left + Application.Width / 2 - Me.Width / 2
    Me.Top = Application.Top + Application.Height / 2 - Me.Height / 2
End Sub
J'espère être dans les clous.
@+ Lolote83
 

Discussions similaires

Statistiques des forums

Discussions
314 749
Messages
2 112 461
Membres
111 553
dernier inscrit
cecilou47