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

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

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 . 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
Je suis allé dans ThisWorkbook et je n'y ai même pas trouvé l'évènement !!

Dans le UserForm ? Alors là je dis non ! Ce n'est pas possible.

Ah!! oui!!! ben tiens
regarde si il y est pas dan mon userform

LOL!!
 

Pièces jointes

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

Dudu2

XLDnaute Barbatruc
Très fort mon @patricktoulon !
Ces With Events je les appréhende de loin sans vraiment bien les contrôler.
Dans ce que tu as fait, est-ce à dire que tant que le UserForm est actif, tous les évènements Workbook doivent être interceptés dans le code du UserForm ?
 

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
Oui je préfère aussi que tout soit regroupé.

Chez moi ça refuse de marcher. Ça m'énerve.
Tu peux regarder STP ?
 

Pièces jointes

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

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…