XL 2016 Cherche possesseur de MAC connaissant VBA

Dudu2

XLDnaute Barbatruc
Bonjour,

Pour un XLDNaute du Canada j'ai développé un code sous Windows.
Je vire tout ce qui est API Windows. Et tous les caractères accentués.

1 - Cependant comment fait-on en MAC pour trouver le ratio Point / Pixel ?
2 - Y a-t-il une fonction Sleep(milliseconds) ?

Merci par avance
 

patricktoulon

XLDnaute Barbatruc
re
@Dudu2
Tu parles des Drivers. Ok, admettons que les drivers Windows soient inadaptés.
Mais tu ne peux pas non plus demander à tous les utilisateurs de ton code qu'ils changent leurs drivers juste pour pouvoir appliquer un coeff de 0.75 invariant.
c'est pas ce que je dis @Dudu2 je te dis de mettre des drivers WHQL pour pouvoir utiliser les fonctions tel qu'il se doit et pas les tarabiscoter de (calculs patcheurs)

tu veux garder getdevicecap ; pas de soucis ; mais met tes drivers a jour sinon c'est absurde
après tu fait comme tu veux mais tes fonctions seront plus qu'incertaines et devront le cas échéant être surpatcher


@RyuAutodidacte
c'est simple on fait le test que j'ai deja donné
VB:
Sub test()
    With Application
        .WindowState = xlNormal
        .Left = 100
        .Top = 100
        .Width = 800
        .Height = 600
        With ActiveWindow.ActivePane
            l = .PointsToScreenPixelsX(0)
            h = .PointsToScreenPixelsY(0)
        End With
        texte = " test PointsToScreenPixels" & vbCrLf
        texte = texte & "app.left :" & .Left + 19 & vbCrLf & "app.top : " & .Top + 19 & vbCrLf & _
                "app.left en pixel : " & l & vbCrLf & "app.top en pixel +ribbon : " & h & vbCrLf & vbCrLf

        texte = texte & "test pour le left " & vbCrLf

        texte = texte & "dpi simulé 100% " & (.Left + 19.25) & "/0.75" & " = " & (.Left + 19.25) / 0.75 & vbCrLf
        texte = texte & "dpi simulé 125% " & (.Left + 19.25) & "/0.6" & " = " & (.Left + 19.25) / 0.6 & vbCrLf
        texte = texte & "dpi simulé 133% " & (.Left + 19.25) & "/1" & " = " & (.Left + 19.25) / 1 & vbCrLf

    End With
    MsgBox texte
End Sub


testez ça et dites moi le quelle ligne est juste des 3 dernières

c'est pas compliqué on a la réponse tout de suite
comme vous le voyez chez moi c'est la ligne dpi simulé 100% qui est juste
1695978106529.png
 
Dernière édition:

RyuAutodidacte

XLDnaute Impliqué
Re @patricktoulon

Voilà le résultat avec Zoom différents

1695983654852.png
1695983712736.png
1695983779059.png
1695983862582.png


par rapport à ta vidéo le dernier code que j'ai posté (uniquement Mac) marche très bien (Imac 27" retina et Macbook Pro 14")

PS : Excel vba donne des fonctions dont le résultats est soit en pixel soit en point ...
c'est galère ca oblige les conversions surtout en ce qui concerne la position sur écran via Excel...
 

patricktoulon

XLDnaute Barbatruc
re
oui on vois bien que vos résultats sont incohérents
c'est pas vous qui allez me contredir hein ;)

@Dudu2 tu dis etre en DPI 120 soit 125% soit un coeff de 0.6
donc si je fait
msgbox (app.left+19.25) * 0.6 ' les 19.25 c'est le header des lignes a un poil de yack près

je devrait donc tomber un 1 ou deux pixels près (on va pas chipoter hein) à
msgbox activewindow.panes(1).pointstoscreenpixelsx(0)

et selon tes captures ce n'est pas le cas il y a 50 pixel de différence

arrivé a un moment je pense qu'il faut se poser les bonne questions

si deux méthodes simples et immuables ne vous donne pas le même résultat c'est que c'est ailleurs que ça se passe
 

Dudu2

XLDnaute Barbatruc
@RyuAutodidacte ,
Merci pour ce test qui me conforte à la fois dans le calcul de position et celui de correction des marges .Left et .Top sur MAC. Ça cadre parfaitement.

PS : je ne comprends pas cette partie de code … c'est censé vérifier quoi.?
C'est juste ma méthode à moi de calcul pour déterminer le Pane de l'Object.
J'ai 2 options de calcul:
- Object visible ou pas (il peut être dans un Pane dans ou hors du champ d'affichage)
- Object visible (il DOIT être dans le champ d'affichage)

Comme tu l'as déjà remarqué, pour la position du UserForm, je n'exige pas que l'Object (la cellule) soit visible en laissant à l'appelant de la fonction le soin de le rendre visible s'il le souhaite.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
@RyuAutodidacte ,
Merci pour ce test qui me conforte à la fois dans le calcul de position et celui de correction des marges .Left et .Top sur MAC. Ça cadre parfaitement.


PS : je ne comprends pas cette partie de code … c'est censé vérifier quoi.?
C'est juste ma méthode à moi de calcul pour déterminer le Pane de l'Object.
J'ai 2 options de calcul:
- Object visible ou pas (il peut être dans un Pane dans ou hors du champ d'affichage)
- Object visible (il DOIT être dans le champ d'affichage)

Comme tu l'as déjà remarqué, pour la position du UserForm, je n'exige pas que l'Object (la cellule) soit visible en laissant à l'appelant de la fonction le soin de le rendre visible s'il le souhaite.
 

patricktoulon

XLDnaute Barbatruc
re
@Dudu2
ici tu utilise un dégrèvement avec le size-indesize que j'utilisais il y a quelques années
j'avais fait tester ça a beaucoup de config (Win/OFFICE)
VB:
#If Mac Then
    UserForm.Top = PixelsToPointsY(Pan.PointsToScreenPixelsY(WorksheetObject.Top)) - LeftMarginShift + VerticalShiftPoints
#Else
    UserForm.Top = PixelsToPointsY(Pan.PointsToScreenPixelsY(WorksheetObject.Top)) - TopMarginShift + VerticalShiftPoints
#End If
on c'est vite rendu compte que deux pc différent avec le même(WIN/OFFICE) pouvaient donner deux résultats différents
c'est pour ça que j'avais abandonné cette piste
cela dit entre nous 1 à 3 pixels près on va pas chipoter

pour info ici
Code:
#If Mac Then
    UserForm.Top = PixelsToPointsY(Pan.PointsToScreenPixelsY(WorksheetObject.Top)) - LeftMarginShift + VerticalShiftPoints
tu utilise ce que je faisais sur Windows 7 a cause de l'aéro avant de taper dans la wmapi.dll
 

RyuAutodidacte

XLDnaute Impliqué
re
oui on vois bien que vos résultats sont incohérents
c'est pas vous qui allez me contredir hein ;)

@Dudu2 tu dis etre en DPI 120 soit 125% soit un coeff de 0.6
donc si je fait
msgbox (app.left+19.25) * 0.6 ' les 19.25 c'est le header des lignes a un poil de yack près

je devrait donc tomber un 1 ou deux pixels près (on va pas chipoter hein) à
msgbox activewindow.panes(1).pointstoscreenpixelsx(0)

et selon tes captures ce n'est pas le cas il y a 50 pixel de différence

arrivé a un moment je pense qu'il faut se poser les bonne questions

si deux méthodes simples et immuables ne vous donne pas le même résultat c'est que c'est ailleurs que ça se passe
• Je n'ai pas utilisé le zoom windows qui lui est à 100%,
• mais j'ai seulement utilisé le zoom Excel que l'on peut voir sur les captures précédentes
• Donc le zoom Excel à 100% est ok

On voit bien que le Zoom d'Excel fait varié les Résultats

Donc les test avec le Zoom écran de windows

Si je met le zoom Ecran et celui d'Excel à 100% :

1695987694976.png
1695987869109.png


Update du msg
 

patricktoulon

XLDnaute Barbatruc
@patricktoulon,
Merci pour ce test.
Je vois effectivement un léger décalage dû au LeftMarginShift sur ton environnement.
Le problème c'est que SANS API je ne connais pas le critère qui fait la différence entre toi et moi.
Je vais voir si c'est lourd d'intégrer l'API de correction.
sincèrement est ce que ça vaut le coup? ;)
tu a combien d’écart toi ? est ce que visuellement c'est si gênant?

rapport:
patricktoulon -->pointstoscreenpixels(x,y) --> pas besoin de redressage
Dudu2 ---> pointstoscreenpixels(x,y) ---> redressage sur le left (en négatif)
ryu su Mac---> poinstoscreenpixels(x,y)----> redressage des deux (principe identique sur windows 7 aéro
 

Discussions similaires

Réponses
3
Affichages
1 K

Statistiques des forums

Discussions
315 106
Messages
2 116 269
Membres
112 706
dernier inscrit
Pierre_98