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
 

Dudu2

XLDnaute Barbatruc
Sinon, je sais bien que chaque environnement (combinaison version Window / version Office) a ses propres caractéristiques. Mais à défaut d'autre chose il faudrait tenter ce Width - InsideWidth < 5, c'est tout ce qu'on a pour le moment ! Mais bon là c'est sûr il faut des testeurs !

Edit: J'ai adapté ce fichier de test en conséquence.
 

Pièces jointes

  • Classeur1B.xlsm
    36.8 KB · Affichages: 2
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
tiens dudu2 je l'ai retrouvé ça date de 2017 ;c'est pour te dire
tu verra il y autant de différences que de retours
et depuis la version 22h2 de windows 10 ca a encore changer (en mieux certes)
et ryu il nous a laissé tomber
 

RyuAutodidacte

XLDnaute Impliqué
@Dudu2
Edit: Tu pourrais placer directement les Left et Top de la cellule dans les PointsToScreenPixelsX/Y. Ça t'éviterait d'invoquer le Zoom dans le calcul.
Une remarque sur ton code...
Tu positionnes par rapport à Panes(1). Alors je ne sais pas sur Mac mais si la cellule est dans un autre Pane faudrait voir si ça fonctionne, j'ai un petit doute.
Je valide 👍 , j'ai modifié en conséquence et mis le paramètre getPane dans la function ;) :
VB:
Sub TestUserform() ' Auteur RyuAutodidacte - Version 2.1 | 26-27/09/2023-V1 | 30/09/2023-V2
Dim UfC, cel As String
    cel = "F4" ' Mettre l'adresse de la cellule voulue
    UfC = UserformOnCell(cel, 3)
     With UserForm1
        .startupposition = 0
        .Left = UfC(0)
        .Top = UfC(1)
        .Show 0
    End With
End Sub

Function UserformOnCell(cel As String, getPane As Byte) As Variant ' Auteur RyuAutodidacte - Version 2.1 | 26-27/09/2023 | 30/09/2023-V2
Dim Adr, Z, L, T, MargeLeft As Byte, MargeTop As Byte

    MargeLeft = 2:              MargeTop = 3

    Adr = Split(ActiveWindow.VisibleRange.Address, ":")
    If (Range(cel).Column >= Range(Adr(0)).Column And Range(cel).Column <= Range(Adr(1)).Column And Range(Adr(0)).Row <= Range(cel).Row) = False Then
        ActiveWindow.ScrollRow = Range(cel).Row
        ActiveWindow.ScrollColumn = Range(cel).Column
    End If
    
    With ActiveWindow
        L = .Panes(getPane).PointsToScreenPixelsX(Range(cel).Left) - MargeLeft
        T = .Panes(getPane).PointsToScreenPixelsY(Range(cel).Top) - MargeTop
    End With
    
    UserformOnCell = Array(L, T)
End Function

@patricktoulon
et si j'ai raison je t'ai déjà donné une fonction fonctionnelle en page 1 ou 2 de ce topic
Si tu parles de cela vois ce que le code fais et regarde la partie espion

1696075402155.png


activewindow.left=100
msgbox 100 & vbcrlf & activewindow.panes(1).pointstoscreenpixelsx(0)
1696075554294.png


L = .Panes(1).PointsToScreenPixelsX(0)
donc acivewindow et panes et pointstoscreenpixels fonctionnent sur mac
1696075801762.png
 

RyuAutodidacte

XLDnaute Impliqué
J'ai fait une correction pour que le pane soit pris en compte correctement et je l'ai mis en option dans la function :
VB:
Sub TestUserform() ' Auteur RyuAutodidacte - Version 2.1 | 26-27/09/2023-V1 | 30/09/2023-V2
Dim UfC, cel As String
    cel = "F4" ' Mettre l'adresse de la cellule voulue
   ' dans optional si vous voulez le pane actif mettre => ActiveWindow.ActivePane.Index
    UfC = UserformOnCell(cel)
     With UserForm1
        .startupposition = 0
        .Left = UfC(0)
        .Top = UfC(1)
        .Show 0
    End With
End Sub

Function UserformOnCell(cel As String, Optional getPane As Byte = 1) As Variant   ' Auteur RyuAutodidacte - Version 2.1 | 26-27/09/2023 | 30/09/2023-V2
Dim Adr, Z, L, T, MargeLeft As Byte, MargeTop As Byte

    MargeLeft = 2:              MargeTop = 3
    With ActiveWindow
        Adr = Split(.Panes(getPane).VisibleRange.Address, ":")
        If (Range(cel).Column >= Range(Adr(0)).Column And Range(cel).Column <= Range(Adr(1)).Column And Range(Adr(0)).Row <= Range(cel).Row) = False Then
            .Panes(getPane).ScrollRow = Range(cel).Row
            .Panes(getPane).ScrollColumn = Range(cel).Column
        End If
 
        L = .Panes(getPane).PointsToScreenPixelsX(Range(cel).Left) - MargeLeft
        T = .Panes(getPane).PointsToScreenPixelsY(Range(cel).Top) - MargeTop
    End With
 
    UserformOnCell = Array(L, T)
End Function
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
ok ryu
donc le point(0) est bien donné
donc tu chasse le dahu depuis plus de 9 pages
alles un dernier petit test pour confirmer au cas ou hein
teste ce fichier
envoie une capture d'ecran
regle le ptopx si besoin dans le code mais dis moi si tu l'a modifié
 

Pièces jointes

  • exemple pour ryu pc windows Only.xlsm
    23.3 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
re
quand je lis ces deux lignes de code
VB:
 L = .Panes(getPane).PointsToScreenPixelsX(Range(cel).Left) - MargeLeft
        T = .Panes(getPane).PointsToScreenPixelsY(Range(cel).Top) - MargeTop
donc aux quelles tu n'ajoute pas de coeff de conversion points/pixel

et que surtout!!! toute à l'heure tu me dis 23 pour le pointstoscreenpixelsX(0)
ce qui est cohérent (à peu près la même chose chez nous les windowsiens )


je ne peux qu'en conclure que sur mac les fonctions pixel travaille en points

LOL ET RE LOL ET ENCORE UN LOL
 

Discussions similaires

Réponses
3
Affichages
1 K

Statistiques des forums

Discussions
315 105
Messages
2 116 262
Membres
112 704
dernier inscrit
zanda19