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
 

RyuAutodidacte

XLDnaute Impliqué
Re
@RyuAutodidacte ,
Si tu te sens de saisir cette longue chaîne de caractères diacritiques et exécuter le code chez toi...
Regarde la pièce jointe 1179638
VB:
Option Explicit

Const LettresDiacritiques = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝŸàáâãäåçèéêëìíîïñòóôõöùúûüýÿ"

Sub a()
    Dim i As Integer
    Dim S As String
 
    [C3].Value = LettresDiacritiques
    '[C:C].EntireColumn.AutoFit
 
    For i = 1 To Len(LettresDiacritiques)
        S = S & Hex(Asc(Mid(LettresDiacritiques, i, 1))) & " "
    Next i
    [C4].Value = S
End Sub

Chez moi ça donne ça:
Regarde la pièce jointe 1179637
ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜ?Ÿàáâãäåçèéêëìíîïñòóôõöùúûü?ÿ
CB E7 E5 CC 80 81 82 E9 83 E6 E8 ED EA EB EC 84 F1 EE EF CD 85 F4 F2 F3 86 3F D9 88 87 89 8B 8A 8C 8D 8F 8E 90 91 93 92 94 95 96 98 97 99 9B 9A 9D 9C 9E 9F 3F D8
1695674772329.png
 

RyuAutodidacte

XLDnaute Impliqué
Re
le code de Ron de Bruin dont tu avais mis le lien centre bien le Userform qq soit la position de la fenêtre Excel ainsi que sa taille.

Pour info si on reprend les différent paramètres … y 'a t'il une solution (trop la flegme de chercher là) :

Sur mon Mac :

VB:
Sub Param()
    Debug.Print "Application.UsableHeight : " & Application.UsableHeight; ""
    Debug.Print "Application.UsableWidth : " & Application.UsableWidth
    Debug.Print "Application.Height : " & Application.Height
    Debug.Print "Application.Width : " & Application.Width
    Debug.Print "CommandBars(""; ribbon; "").Height : " & CommandBars("ribbon").Height
    Debug.Print " CommandBars(1).Height : " & CommandBars(1).Height
    Debug.Print "[F4].Left : " & [F4].Left
    Debug.Print "[F4].Top : " & [F4].Top
End Sub

'Application.UsableHeight : 1440
'Application.UsableWidth : 2560
'Application.Height : 599
'Application.Width : 688
'CommandBars("; ribbon; ").Height : 0
' CommandBars(1).Height : 26
'[F4].Left : 325
'[F4].Top : 45

et

VB:
Sub PosWindowExcel()
    Debug.Print "Position X|Y de la fenêtre excel : " & MacScript("set AppleScript's text item delimiters to ""|""" & vbNewLine & _
    "tell application ""Microsoft Excel"" to return (the position of the front window) as string")
End Sub
'Position X|Y de la fenêtre excel : 54|681

Y aura des conversions à faire …
 

patricktoulon

XLDnaute Barbatruc
re
bonjour ryu
déjà il y a un soucis entre les 4 premières ligne
une telle différence entre les 2 premières et les deux suivantes c'est pas possible

ensuite le ribbon =0 comme ca c'est clair ça confirme ce que je disais Mac aplati

ceci est un résultat probant
Application.UsableHeight : 245,25
Application.UsableWidth : 513
Application.Height : 407,25
Application.Width : 514,5
CommandBars("; ribbon; ").Height : 147
CommandBars(1).Height : 26
[F4].Left : 300
[F4].Top : 45
si on fait le le height - le usableheigth on arrive à 162
si on fait ribbon height+ la comB(1) on arrive 173 -les 10 de la barre de formule ça fait 163
là oui c'est cohérent mais tes résultats ne le sont pas
d'autant plus que chez toi le usable est plus grand que la totalité de l'app 🤣 🤣 🤣
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
fait ce test
VB:
Sub Param()
    Dim cellule
    Set cellule = [A1]
    With ActiveWindow.Panes(1)
        Debug.Print "le point left(0)en pixel : " & .PointsToScreenPixelsX(0)
        Debug.Print "le point top (0) en pixel  : " & .PointsToScreenPixelsY(0)
        ptopx = (.PointsToScreenPixelsX(72000 / (.Parent.Zoom / 100)) - .PointsToScreenPixelsX(0)) / 72000
        Debug.Print "Coeff point to pixel  : " & "(/ par " & ptopx & ") ou ( fois " & 1 / ptopx & ")"

        x = .PointsToScreenPixelsX(cellule.Offset(, 1).Left) - .PointsToScreenPixelsX(0)
        Debug.Print "le width en pixel de la cellule A1 : " & x
    End With
End Sub
Résultat
le point left(0)en pixel : 397
le point top (0) en pixel : 315
Coeff point to pixel : (/ par 1,33333333333333) ou ( fois 0,75)
le width en pixel de la cellule A1 : 80
 

RyuAutodidacte

XLDnaute Impliqué
re
fait ce test
VB:
Sub Param()
    Dim cellule
    Set cellule = [A1]
    With ActiveWindow.Panes(1)
        Debug.Print "le point left(0)en pixel : " & .PointsToScreenPixelsX(0)
        Debug.Print "le point top (0) en pixel  : " & .PointsToScreenPixelsY(0)
        ptopx = (.PointsToScreenPixelsX(72000 / (.Parent.Zoom / 100)) - .PointsToScreenPixelsX(0)) / 72000
        Debug.Print "Coeff point to pixel  : " & "(/ par " & ptopx & ") ou ( fois " & 1 / ptopx & ")"

        x = .PointsToScreenPixelsX(cellule.Offset(, 1).Left) - .PointsToScreenPixelsX(0)
        Debug.Print "le width en pixel de la cellule A1 : " & x
    End With
End Sub
Résultat
hello @patricktoulon

en mettant la fenetre Excel en plein écran, le résultat :
le point left(0)en pixel : 23
le point top (0) en pixel : 232
Coeff point to pixel : (/ par 1) ou ( fois 1)
le width en pixel de la cellule A1 : 65

fenetre moitié droite de l'écran :
le point left(0)en pixel : 923
le point top (0) en pixel : 232
Coeff point to pixel : (/ par 1) ou ( fois 1)
le width en pixel de la cellule A1 : 65
 

patricktoulon

XLDnaute Barbatruc
re
test ca dans un fichier vierge avec un userform et ceci dans un module
VB:
Sub test()
 ptopx = 0.75
 
 With ActiveWindow
 l = .Panes(1).PointsToScreenPixelsX(0) * ptopx
 t = .Panes(1).PointsToScreenPixelsY(0) * ptopx
 
 End With
With UserForm1
.Show 0
.Left = l + [F4].Left
.Top = t + [F4].Top
End With
End Sub
et aussi teste cette sub
VB:
Sub test2()
    With ActiveWindow.Panes(1)
        q = (.PointsToScreenPixelsX(Cells(2).Left / (.Parent.Zoom / 100)) - .PointsToScreenPixelsX(0)) / Cells(2).Left
    End With
    MsgBox q
End Sub
 

RyuAutodidacte

XLDnaute Impliqué
@patricktoulon , @Dudu2

Je travaille dessus et fais les modif en conséquence, mais je pense que l'on a le GRALL en multi écran (au moins 2 écrans). :D

Je pense avoir trouvé la bonne formule et avec le zoom en plus et qq soit la position de la fenêtre ;)

Edit : par contre ca ne prend en compte le déplacement des cellules vers la droite, ex. :
1695729147496.png
 
Dernière édition:

RyuAutodidacte

XLDnaute Impliqué
re
ca donne quoi mon truc
Ca ne tombé pas correctement mais y a de l'idée
Notre truc ;) avec mes modifications :

c'est un mixte (à la louche) :
  • avec 1 ligne de code de @Dudu2
  • une moitié de ton code
  • une moitié de mon code
On peut dire qu'à nous trois nous sommes les auteurs de ce code

@patricktoulon
Par contre dis moi si il y a moyen de savoir quelle cellule se trouve dans le coin gauche en haut ??
Par exemple :
1695730509900.png
 

RyuAutodidacte

XLDnaute Impliqué
re
et il est ou ce code modifié?

msgbox activewindow.panes(1).visiblerange.cells(1).address
Je le test encore dans tous les sens (vous n'avez pas de Mac, faut bien que je le fasse ;)) qd j'ai 20 sde
j'ai qd même mon chef derrière moi 🤨 au taf

De toute manière est ce judicieux de faire :
VB:
activewindow.panes(1).visiblerange.cells(1)

Le Userform risque de s'afficher en dehors de l'écran, … non ?

Surement un :
VB:
Application.GoTo Cells(1), true
serait plus adapté …

Qu'en pensez vous ??
 

Discussions similaires

Réponses
3
Affichages
1 K

Statistiques des forums

Discussions
315 105
Messages
2 116 255
Membres
112 702
dernier inscrit
JRCa91