le curseur est au coin supérieur gauche de la cellule avec n'importe quel zoom
Version imprimable
@unparia
résultat de ta petite expérience
j'ai été obligé de préciser le parent devant les controls
le curseur est bien en b4 top et left a zoom 100
mais 2 ou 3 point plus bas a zoom 180
Pièce jointe 281296Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long Sub test() Set cible = ActiveSheet.Range("B4") With ActiveSheet.Label1 .Caption = "" .Top = cible.Top .Left = cible.Left .BackColor = RGB(255, 200, 200) End With With ActiveSheet.TextBox1 .Top = ActiveSheet.Range("B4").Offset(1, 0).Top .Left = cible.Left .BackColor = RGB(255, 255, 255) .Text = ActiveWindow.Zoom & " " & (ActiveWindow.ActivePane.PointsToScreenPixelsX(cible.Offset(0, 1).Left) - ActiveWindow.ActivePane.PointsToScreenPixelsX(cible.Left)) / cible.Width End With With ActiveWindow.ActivePane SetCursorPos .PointsToScreenPixelsX(cible.Left), .PointsToScreenPixelsY(cible.Top) End With End Sub
@unparia
je pense avoir compris ce que tu cherche avec
mais en fait le calcul est faux tout du moins tu divise par la cible.width non seulement le width en pixel mais tout le reste jusqu'au point 0 de l'ecranCode:.Text = ActiveWindow.Zoom & " " & (ActiveWindow.ActivePane.PointsToScreenPixelsX(cible.Offset(0, 1).Left) - ActiveWindow.ActivePane.PointsToScreenPixelsX(cible.Left)) / cible.Width
c'est a dire que tu englobe le app.left, le activew...left,le cadre,la colonne des numéros de ligne même si ton calcul est logique mais la fonction ne calcule pas comme ca
d'ailleurs pour t'en rendre compte
il te suffit de faire
pour te rendre compte que le résultat est fauxCode:x=ActiveWindow.ActivePane.PointsToScreenPixelsX([b1].width)
par contre si tu fait
le résultat est bonCode:x=ActiveWindow.ActivePane.PointsToScreenPixelsX([b1].width)-ActiveWindow.ActivePane.PointsToScreenPixelsX(0)
que tu prenne le lef ou le width de la cellule ca te donnera toujours
le point 0 de l'ecran au point 0 de la grille + le width ou le left de la cellule
il nous reste plus q'a attendre les arrays de unparia pour XP
pour 2010 c'est bon je sais que c'est 0 partout
il nous restera 2013 32 bit avec w10 64
ET 2010 AVEC W7
je te donne la réponse un peu plus tard
et même soyons fous prenons en charge aussi office 64 bits puisque application.operatingsystem ne ramène rien alors c'est facile
de 12 a 16 office64 bits et W10 64 :le numéros correspond a la version d'officeCode:
1
2
3
4
5
6
7
8
9
10
11
12 cadre = Switch( _ config = 12, Array(x, x, x, x), _ config = 14, Array(x, x, x, x), _ config = 15, Array(x, x, x, x), _ config = 16, Array(x, x, x, x), _ config = 17, Array(x, x, x, x), _ config = 19, Array(x, x, x, x), _ config = 18, Array(3, 2, -6, -8), _ config = 20, Array(x, x, x, x), _ config = 24, Array(x, x, x, x), _ config = 25, Array(x, x, x, x), _ config = 26, Array(-5, 0, 10, x))
pour les versions office 32 bits
17 =xp office 2007
19= xp office 2010
18= w7 office 2007
20 =w7 office 2010
24= w10 office o 2010
25 =w10 office 2013
26 =w10 office 2016
pourquoi il me met erreur de compilation tableau attendu et il pointe cadre du left ??
system + vers = 0
sorry
system + vers = 21 re sorry
c'est bon j'essai
la ligne system et vers il faut les virer tout est dans la ligne config
j'aurais pu les mettre en commentaire c'est vrai
oulah arrête toi 5 minutes
tes config c'est quoi???? pour de bon
c'est bon j'ai compris, j'ai rajouté
zennnnnn, et je t'envoie les résultatsCode:config = 21, Array(X, X, X, X), _
config = 21 windows10 64 bits et excel 2013 32bits
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Function PositionForm5(usf, rng) Dim Zooom#, PtToPx#, cadre, system#, vers#, config# Dim lleft#, ttop#, Wwidth#, Hheight# system = Round(Val(Split(Application.OperatingSystem, " ")(3))) vers = Val(Application.Version) config = Round(Val(Split(Application.OperatingSystem, " ")(3))) + Val(Application.Version) ' system + vers cadre = Switch(config = 15, Array(0, 0, 0, 0), _ config = 17, Array(X, X, X, X), _ config = 19, Array(X, X, X, X), _ config = 18, Array(2, 2, -6, -8), _ config = 21, Array(-2, 0, 3, 1), _ config = 22, Array(X, X, X, X), _ config = 24, Array(X, X, X, X), _ config = 25, Array(X, X, X, X), _ config = 26, Array(-5, 0, 10, 5)) With ActiveWindow Zooom = .Zoom / 100 PtToPx = ((.ActivePane.PointsToScreenPixelsX(ActiveSheet.[A1].Width) - .ActivePane.PointsToScreenPixelsX(0)) / ActiveSheet.[A1].Width) / Zooom lleft = (.PointsToScreenPixelsX(rng.Left * PtToPx * Zooom) / PtToPx) + cadre(0) ttop = .PointsToScreenPixelsY(rng.Top * PtToPx * Zooom) / PtToPx + cadre(1) Wwidth = IIf(rng.Columns.Count > 1, rng.Width * (Zooom) + cadre(2), usf.Width) Hheight = IIf(rng.Rows.Count > 1, rng.Height * Zooom + cadre(3), usf.Height) End With PositionForm5 = Array(lleft, ttop, Wwidth, Hheight) End Function
c'est quoi 21 !!!! Windows quoi ,office quoi
oulah!!! tu fausse le raisonnement alors depuis tout a l'heure
que retourne vraiment operatingsystem????????????Citation:
config = 21 windows10 64 bits et excel 2013 32bits
parce que tu disais que Windows 10 ramenait 10 donc 10 plus la version excel2013(15) ca fait 25 chez moi hein !!!!!
pareil version 64 bit qui affiche 32
Pièce jointe 281308
Pièce jointe 281312
re
desolé mon grand mais la version 6.2 c'est W 8