Autres ceci surtout à PatrickToulon et certains utilisateurs !?

Roland_M

XLDnaute Barbatruc
Bonjour à tous,

Bien le bonjour à toi Patrick, il s'agit d'une fonction venant de toi,
je m'en sert beaucoup, car c'est efficace, sans API, hyper simple, encore bravo !

je voulais juste faire une petite remarque à propos de cette formule, ce qui ne met pas en cause son efficacité !
au cas ou certaines personnes s'en serviraient, encore faut t'il qu'ils s'en servent sur Excel 2007 !?
car c'est de ça qu'il s'agit ! encore que sur d'autres versions à venir . . . !?!

j'ai remarqué qu'avec Excel 2007, si Application.ScreenUpdating=False, PtoPx=0
alors que j'ai aussi Excel 2016 et ça ne le fait pas !?

ceci pour essai:
Private Function PtoPx()
'Application.ScreenUpdating = False
Z# = 100 / ActiveWindow.Zoom
PtoPx = (ActiveWindow.ActivePane.PointsToScreenPixelsX(3) - ActiveWindow.ActivePane.PointsToScreenPixelsX(0)) / 3 * Z
MsgBox PtoPx
End Function

bien entendu j'ai solutionné ça.
 

Roland_M

XLDnaute Barbatruc
résultats avec 2007 idem 2016
imag7.jpg
imag8.jpg
imag9.jpg
 

patricktoulon

XLDnaute Barbatruc
re
@Roland_M
a ben tu vois chez toi c'est 72 qui marche le mieux
chez moi c'est cells.width sur 2007 et 2013
comme tu a pu constater (avec les calculs sans correction) le zoom d'excel n'est pas incrémenté ou décrémenté régulièrement (SURTOUT EN DPI(120))
c'est pour ça que je met le correctif , comme ça c'est régulier tu a tout le temps ton coeff point to pixel exact
;)

bonjour @TooFatBoy (chez moi non plus)
 

patricktoulon

XLDnaute Barbatruc
@TooFatBoy
c'est le coeef unité point --> unité pixel
et oui le coeff doit rester constant bien sur
1 point = 1pixel ,333333333333333
on a la possibilité de modifier la resolution dans nos affichages qui modifie le DPI
en resolution normal donc 100 c'est 1.33333333333333
en resolution dpi 120 soit 125% c'est alors 1.66666666666667 soit 1.333... * 1.25

il y a aussi la fonction passant par le registre et la clé AppliedDPI qui reste la plus simple
là on a pas besoins de correctif
VB:
Function Reg_PtoPX() As Double
Reg_PtoPX = CreateObject("WScript.Shell").RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI") / 72
End Function

Sub test()
MsgBox Reg_PtoPX
End Sub
;)
 

patricktoulon

XLDnaute Barbatruc
re
@TooFatBoy tu n'es peut être pas en dpi 100 ou 120 mais dpi111 ou dpi137 ou dpi144 de plus en plus répandu vu que l'on utilise de plus en plus des grands écrans

teste avec la cle reg tu sera fixé

la démarche avec la fonction vba pointstoscreenpixelsx(chiffre) est de ne pas aller chercher une source externe à excel(api ou registre ou autres astuces)
cependant elle est limité dans le sens ou ayant toujours travaillé en dpi 100 ou 120 cette fonction suffit
 

TooFatBoy

XLDnaute Barbatruc
la démarche avec la fonction vba pointstoscreenpixelsx(chiffre) est de ne pas aller chercher une source externe à excel(api ou registre ou autres astuces)
Oui, ça j'avais compris (c'est d'ailleurs le seul truc que j'ai compris...)

Oui, comme je t'avais dit sur un autre fil de discussion, je suis en 111 DPI.
Mais tu dis que le ratio devrait quand même rester constent dans la partie "avec correction" , si j'ai bien compris. Nan ??? 🤔
 

patricktoulon

XLDnaute Barbatruc
re
@Roland_M
voilà maintenant tu sais pourquoi j'ai ajouté ce correctif
tu peux donc rester avec 72 avec correctif qui fonctionnera sur tout pc avec dpi 100 ou 120
;)

@TooFatBoy il est constant avec correctif uniquement en dpi 100 ou 120
après il faudrait que j'ai la possibilité de faire des tests pour inclure le dpi 111
actuellement je peux pas la carte graphique de mon pc portable (la pauvre) a déjà bien du mal a suivre ma tv 107 cm

toi tu pourrais te servir de la cle reg Post#21
et quoi que je serais curieux de savoir ce que ta clé donne
 

TooFatBoy

XLDnaute Barbatruc
Avec_3.pngAvec_72.pngAvec_Cells.Width.png

après il faudrait que j'ai la possibilité de faire des tests pour inclure le dpi 111
actuellement je peux pas la carte graphique de mon pc portable (la pauvre) a déjà bien du mal a suivre ma tv 107 cm
Je pige pas le rapport entre les 111 DPI et la puissance de la carte graphique.
C'est mon moniteur qui est en 111 DPI. Ca n'a pas d'impacte sur la puissance demandée à la CG.
Ton téléviseur est peut-être aussi dans les 111 DPI, sauf s'il est FHD.
 

Roland_M

XLDnaute Barbatruc
voilà ce que j'utilise et qui répond à tous mes besoins !
sur toutes mes config ça fontionne !

je test même si screenupdating est à False
si ErrPtoPx > 1 il y erreur ! MAIS ça c'est pour moi par précaution, on est pas obligé !
tu remarqueras > If PtoPx = 0 Then

Private Function PtoPx() As Double
ErrPtoPx = 0 ' pour test Err.PtoPx
Retour:
If ErrPtoPx > 1 Then Exit Function
With ActiveWindow.Panes(1)
Z# = .Parent.Zoom / 100: PtoPx = ((.PointsToScreenPixelsX(72) - .PointsToScreenPixelsX(0)) / 72) / Z
If PtoPx > 0 Then PtoPx = Array((4 / 3), (4 / 3) * 1.25)(Abs(PtoPx > 1.4))
End With
If PtoPx = 0 Then
If Application.ScreenUpdating = False Then Application.ScreenUpdating = True
ErrPtoPx = ErrPtoPx + 1: GoTo Retour
End If
End Function

Sub ESSAI()
MsgBox PtoPx
End Sub
 

patricktoulon

XLDnaute Barbatruc
@Roland_M
VB:
Private Function PtoPx() As Double
Dim memoscreen&
    With Application
        memoscreen = .ScreenUpdating
        If .ScreenUpdating = False Then .ScreenUpdating = True
        With ActiveWindow.Panes(1)
            Z# = .Parent.Zoom / 100: PtoPx = ((.PointsToScreenPixelsX(72) - .PointsToScreenPixelsX(0)) / 72) / Z
            PtoPx = Array((4 / 3), (4 / 3) * 1.25)(Abs(PtoPx > 1.4))
        End With
        .ScreenUpdating = memoscreen
    End With
End Function

Sub ESSAI()
    MsgBox PtoPx
End Sub
;)
 

Discussions similaires