XL 2016 Cherche possesseur de MAC connaissant VBA

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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

Dernière édition:
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
 
@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
 
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:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
1 K
Retour