XL 2016 affichage userform avec 2 ou + ecrans

roby

XLDnaute Occasionnel
Bonjour le forum,

Lorsqu'on lance un fichier Excel sur un poste avec plusieurs écrans, à chaque fois les userform s'affichent sur un autre écran que l'écran ou est affiché excel.
y a-t-il une parade pour que cet userform s'affiche dans la même fenêtre que excel ?

je joint le même fichier solutionné dernièrement pour le test.

Merci encore.
 

Pièces jointes

  • Roby1.xlsm
    19.8 KB · Affichages: 17

Dudu2

XLDnaute Barbatruc
Résultat chez moi:
1666364977886.png
 

TooFatBoy

XLDnaute Barbatruc
tu peux zoomer ou dezoomer elle est à 1.333333333333333 en DPI normal ou 1.6666666666667 en dpi 120
Autant pour le reste de votre discussion je n'ai absolument rien compris (c'est beaucoup trop balèze pour moi), autant là je sais que c'est n'importe quoi : comme je te l'ai déjà expliqué plusieurs fois, "dpi 120" ne veut rien dire, ça n'a aucun sens ; c'est "zoom 125 %".
Pas facile de perdre les mauvaises habitudes, hein... 😁
 

patricktoulon

XLDnaute Barbatruc
1666666667 tu es en dpi 120 soit 125%
pour preuve voici comment tu l'obtient par le registre
et oui visiblement chez toi en dpi 120 ça déraille
très mauvaise gestion graphique peut etre tourne tu avec les drivers graphique genérique microsoft et non ceux de la marque de ta carte graphique

il y a la solution registre aussi
VB:
Function PtoPX() As Double
PtoPX = CreateObject("WScript.Shell").RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI") / 72
End Function

Function dpi() As Double
dpi = CreateObject("WScript.Shell").RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI")
End Function

Sub test()
MsgBox "Applied DPI   " & dpi
MsgBox " coeff ptopx  " & PtoPX
End Sub
chez moi 96 soit 100%
 

Dudu2

XLDnaute Barbatruc
C'est pas mal en effet. Pour éviter des Shell sur des calculs en boucle c'est mieux de le garder en mémoire.
VB:
Function PointToPixel() As Double
    Static SavePointToPixel As Double
   
    If SavePointToPixel = 0 Then
        SavePointToPixel = CreateObject("WScript.Shell").RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI") / Application.InchesToPoints(1)
    End If
    PointToPixel = SavePointToPixel
End Function
Ou peut-être aussi lier la conservation mémoire au moniteur qu'il faudrait alors passer en paramètre.

Par contre en API on a les conversions en X et en Y, pareil pour le PointToPixelsX et Y.
Alors est-ce encore nécessaire ? Ou peut-on bypasser ce split X et Y ?
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Il y a peut-être un souci avec le moniteur concerné. Si on peut avoir des résolutions différentes sur plusieurs moniteurs utilisés ?
En API c'est GetDC qui avec le Handle de la Window ou si 0 avec le "screen" va lier avec un moniteur.
Lequel d'ailleurs ?
En Registre ?
 

Discussions similaires

  • Résolu(e)
Microsoft 365 32 ou 64 bits
Réponses
46
Affichages
2 K

Statistiques des forums

Discussions
315 147
Messages
2 116 770
Membres
112 857
dernier inscrit
sanogo