Si quelqu'un possède 2 moniteurs, j'aimerais qu'il prenne quelques minutes pour tester les 3 boutons de ce programme et vérifier si ça fait ce que ça dit ou si ça part en live complet !
En prenant la peine de positionner la fenêtre Excel une fois dans le Moniteur primaire et une fois dans le Moniteur secondaire.
Merci par avance.
@TooFatBoy,
Super, je crois qu'on peut dire qu'on a réussi ! Et c'est tout sauf simple !
Je dis "on" parce que sans ta config complètement bizarre et ton assiduité aux tests, rien n'aurait été possible.
Merci pour ton aide. Je reposte le fichier ici pour faire de ce post la solution.
Je rappelle la partie utile du bidule:
Dans le Module_UserFormMultipleScreens, 2 fonctions de positionnement UserForm:
- PlaceUserFormInExcelSameMonitor(Usf, Position)
- PlaceUserFormInExcelOtherMonitor(Usf, Position)
La position est une des constantes publiques déclarées dans le module en question:
VB:
Public Const PositionMiddle = "Middle"
Public Const PositionTopLeftCorner = "TopLeftCorner"
Public...
@TooFatBoy, si tu as bien pris le dernier fichier, je comprends pas que tu puisses avoir des Left négatifs.
Chez moi, avec ou sans barre des tâches ça positionne correctement sur le 2ème écran.
Ou alors y a un truc énorme qui m'a échappé.
@patricktoulon, j'utilise la différence rcMonitor - rcWork pour déterminer la taille de la TaskBar où qu'elle soit.
Je n'ai que mon environnement pour tester et j'obtiens le résultat escompté.
Les tests de @TooFatBoy sont utiles pour confirmer les miens... sauf quand ça diverge et là c'est très difficile d'en trouver la cause car il faudrait que je me connecte chez lui.
Dans ton environnement Windows 7, peux-tu faire un Screenshot de ce que dit le Bouton 1 sur les valeurs d'affichage ?
@TooFatBoy, si tu as bien pris le dernier fichier, je comprends pas que tu puisses avoir des Left négatifs.
Chez moi, avec ou sans barre des tâches ça positionne correctement sur le 2ème écran.
Ou alors y a un truc énorme qui m'a échappé.
Non, y a un problème sur la barre des tâches du secondaire dont les coordonnées sont incohérentes.
C'est de là que vient le problème chez toi.
Tu l'as mise où la barre des tâches du secondaire ?
Ok, je comprends mieux, et il faut que je revoie tous les calculs qui ont comme hypothèse des valeurs positives.
Mais je ne comprends pas qu'il y ait des valeurs négatives ou des Top qui partent pas à 0 +/- un chouia avec les considérations de @patricktoulon sur les histoires de thème et autres. Bon, c'est comme ça.
Je verrai ça plus tard car en fait il faut que je remette tout à plat et que je simplifie.
Bonne soirée et merci encore.
C'est logique : puisque l'écran primaire commence en (0,0) et qu'il est à droite, les coordonnées horizontales de l'écran secondaire sont négatives.
De plus, comme les écrans ne sont pas alignés en haut, les coordonnées verticales de l'écran secondaire ne commencent pas à zéro.
Je vois ! Donc pour me compliquer la vie, t'as mis le primaire à droite et un secondaire qui s'aligne pas.
Ah ben bravo !
Remarque, si ça passe chez toi, ça passera partout
Mais je crois savoir comment je vais simplifier mon bazar pour le faire fonctionner.
Voilà, ça devrait aller beaucoup mieux et le code est bien simplifié.
Finalement je me base exclusivement sur le rcWork du GetMonitorInfo() Type MONITORINFO.
Tanpis si pour certains cas de thème ou autres de versions Windows < 10 il varie quelque peu. A voir. @patricktoulon nous dira !
Chez moi ça marche parfaitement, et je ne fais plus aucun décalage savant en fonction du Moniteur ou de la Barre des Tâches. rcWork is the Truth .
Edit: une amélioration possible serait de désigner le n° de moniteur au cas où il y aurait 3+ moniteurs.
Pièces jointes
VBA Position UserForm avec 2 Moniteurs Screens Écrans.xlsm
Ou presque : quand Excel est sur le secondaire, les UserForm s'affichent à l'inverse de là où ils devraient être.
Autrement dit, les UserForm s'affichent au même endroit, qu'Excel soit sur le primaire ou le secondaire.