ça peut venir de quoi ?, tous mais réglages sont en 100%, j'ai 2 écran mais sont réglés pareil, je comprend pas
ça peut venir de quoi ?, tous mais réglages sont en 100%, j'ai 2 écran mais sont réglés pareil, je comprend pas
re
et oui 1.333333333333333
mon calcul est donc bon c'est ca qui rends fou
ben moi non plus je cherche
mes calculs donnent pareil que les api mais le résultat n'est pas le même
je n'ai pas d'explication
tiens teste celle la comme tel
chez moi c'est ok
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub UserFormAlign1() '''''''''''''''OK''''''''''''''''' Dim x As Double, y As Double, w As Double, h As Double 'x = GetDeviceCaps(GetDC(0), 88) / 72 'y = GetDeviceCaps(GetDC(0), 90) / 72 x = (ActiveWindow.ActivePane.PointsToScreenPixelsX(3) - ActiveWindow.PointsToScreenPixelsX(0)) / 3 y = x xplus = UserForm1.Width - UserForm1.InsideWidth yplus = (UserForm1.Height - UserForm1.InsideHeight) / 2 With UserForm1 .StartUpPosition = 0 .Left = (ActiveWindow.ActivePane.PointsToScreenPixelsX(ActiveCell.Left) / x) + xplus .Top = (ActiveWindow.ActivePane.PointsToScreenPixelsY(ActiveCell.Top) / y) + xplus .Show End With End Sub
juste par curiosité enlève ".activepane" dans tout mon code
et oui je commence a comprendre
il ne faut pas l'enlever partout mille excuse je me suis rompé
c'esr comme ca qui faut tester
si ca marche j'ai compris
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub UserFormAlign1() '''''''''''''''OK''''''''''''''''' Dim x As Double, y As Double, w As Double, h As Double 'x = GetDeviceCaps(GetDC(0), 88) / 72 'y = GetDeviceCaps(GetDC(0), 90) / 72 x = (ActiveWindow.ActivePane.PointsToScreenPixelsX(3) - ActiveWindow.ActivePane.PointsToScreenPixelsX(0)) / 3 y = x xplus = UserForm1.Width - UserForm1.InsideWidth yplus = (UserForm1.Height - UserForm1.InsideHeight) / 2 With UserForm1 .StartUpPosition = 0 .Left = (ActiveWindow.PointsToScreenPixelsX(ActiveCell.Left) / x) + xplus .Top = (ActiveWindow.PointsToScreenPixelsY(ActiveCell.Top) / y) + xplus .Show End With End Sub
non ça colle pas non plus et c'est pas proportionné selon la cellule choisi
et si je choisi par exemple 'g6' ça cache caremment
et oui autrement dit ca ne peut plus etre universel
selon les versions d'exel activepane n'est plus rattaché mais mergée avec activewindow
et même avec les api c'est pareil
tampis, mais le sujet est pas mal, désolé de t'avoir pris la tête la dessus, aller bonne nuit
non tu me prends la la tete
tu tourne avec quoi (excel/window)
je m'en doutais
je sais pas encore je n'ai pas tout décortiqué car j'ai proscrit W 8 et 10 je les analyse par curiosité
mais je sais déjà que les shell32 nont pas les meme ossature
donc le rendu des fenêtre sont différents
ensuite les versions ultérieures a 2007 ont subis pas de refonte aussi
parti de la c'est compliqué
le problème c'est que quand on un fichier a faire tourner sur diverses machine (Windows/offices) ce genre de macro est complètement inutile
des vrais salopards chez Microsoft
business is business, mais je vais me contenter de l'api pour notre fameux calendrier, aller bis et bonne nuit, @+
puré nuit courte déjà réveillé
oui ben ca ne fonctionnera pas chez moi par exemple
quand tu aura un moment test juste ca simplement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Sub test15() Dim ptpx#, xplus#, yplus# With UserForm1 ptpx = (ActiveWindow.ActivePane.PointsToScreenPixelsX(3) - ActiveWindow.ActivePane.PointsToScreenPixelsX(0)) / 3 xplus = .Height - .InsideHeight yplus = .Width - .InsideWidth .Left = (ActiveWindow.ActivePane.PointsToScreenPixelsX(ActiveSheet.[b3].Left) / ptpx) + yplus .Top = (ActiveWindow.ActivePane.PointsToScreenPixelsY(ActiveSheet.[b3].Top) / ptpx) + yplus .Show End With End Sub
Bonjour Patrick,
Là ça centre l'userform sur la page
Tout ira beaucoup moins mal, patricktoulon, lorsque tu comprendras enfin que tous tes malheurs sont inhérents à des conversions d'unités dont tu peux te passer, puisque tout peut être directement calculé en points (sans conversion, donc) en ce qui concerne la position à l'écran du userform. Elle l'est dans le seul esprit de l'application Excel. Et donc en points également. Aucune conversion névessaire. Je te l'ai dit et répété.
Comment la calculer ? Je te l'ai également dit et répété (et c'est ce que tu t'es amusé à appeler ma "petite fonction" ou "petite formule", hein ... avec une pointe d'ironie qui ne m'a pas échappé ... et te voilà maintenant dans un bain dans lequel je vais donc te laisser mariner quelque temps ).
Ce ne sera qu'à l'issue de cette marinade que je reviendrai (à moins que tu ne te mettes à relire enfin tout autrement qu'en diagonale et que, ce faisant, tu y parviennes enfin sur ces bases).
Amuse-toi bien.
nicolas creuse la question je suis persuadé que les versions ulterieur a W7 et excel 2007 ont des paramètres différents
je te dis que tes actuve window.left +........+application usableheight....... dont tout est en point ,ne marche pas meme si je te l'accorde c'est logique
quand tu le comprendra a ton tour hein????? il faut que je te le dise en quoi???
pour te donner un exemple concret
simplement activewindow.left donne le left de l'application chez moi alors que si on suit ta démo en image il est sensé me donner le left du classeur flottant ou pas
parti de la je sais pas comment il faut te l'expliquer
de toute façon résultat faux ou non il est bien évident que selon les versions de excel ou Windows ou les deux chaque expression aura un incidence différente ca on a plus a le prouver
dans le dernier exemple
je ne pet auxine donné numérique en dur
seulement le pointoscreenpixelsX/Y et le résultat est diffèrent sur divers pc
je sais plus comment te le faire comprendre
a c que je sache
y=activewindow.activpane.pointstoscreenpixelsY([B1].left) te donne la B1.left par raport a l' écran en pixel on est bien d'accords je te fait une démo animée si tu veux
si je divise par le coeef je l'ai en point
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager