hoh!!! j'en ai des tas
Version imprimable
hoh!!! j'en ai des tas
Si tu veux, ça me gène pas, c'est intéressant
Bonjour
Je ne veux pas vous faire de peine, mais ce dernier code provoque chez moi un décalage vers la droite (environ 2 pixels).
Alors que le code que j'ai mis dans mon message 225 place toujours à la perfection le userform.
Config : XP + office 2007
EDIT : je viens de mesurer le décalage ! il est très exactement de 2 points
comme on le disait seule la config XP n'a pas été testée
cette config étant obsolètes au vue des versions offices actuelles ,xp ne recevant plus de mises a jours
je sais même pas si il supporterait 2010
pour comprendre d'ouvien le soucis il nous faudrait
la mesure de
le retour deCode:application.width-application.usablewidth
et deCode:application.operatingsystem
avec ces renseignement on pourrais peut être ajouter cette conditionCode:application.version
Bonjour unparia
teste de ton poste 225 a 100%
Pièce jointe 280863
teste de ton poste a 200%
Pièce jointe 280866
@unparia je viens de regarder notre dernière version et si tu enlevais 2 chez moi même avec -2 ca reste au bord de l'userform
Code:cadre = IIf(system Like "*10*" And Val(Application.Version) <> 12, -cadre / 2.4, cadre / 2.4 - 2)
Je sais (Nicolas JACQUIN l'avait dit).
Problème : pile-poil avec XP et Office 2007 quel que soit le zoom !
-->>
Pièce jointe 280871
essaie au moins avec la ligne modifiée notre version pour voir
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Function PositionForm2(usf, rng) Dim Zooom#, PtToPx#, cadre#, system system = Application.OperatingSystem cadre = Application.Width - Application.UsableWidth cadre = IIf(system Like "*10*" And Val(Application.Version) <> 12, -cadre / 2.4, cadre / 2.4 - 2) 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 ttop = .PointsToScreenPixelsY(rng.Top * PtToPx * Zooom) / PtToPx + IIf(system Like "*6*", cadre, 0) Wwidth = IIf(rng.Columns.Count > 1, rng.Width * (Zooom) - cadre * 2, usf.Width) Hheight = IIf(rng.Rows.Count > 1, rng.Height * Zooom - cadre, usf.Height) End With PositionForm2 = Array(lleft, ttop, Wwidth, Hheight) End Function Sub TestUserformtopleftcell2() r = PositionForm2(UserForm1, [b3]) With UserForm1: .Show 0: .Left = r(0): .Top = r(1): End With End Sub
fait une capture
non, même en retirant +cadre au left avec zoom 200 il y a un décalage
Pièce jointe 280888
il faut mettre - cadre et ça passe au left
edit
Pièce jointe 280903
c'est etonnant
il faut donc -cadre*2 au left
et +cadre*2 autop
a moins que application.width-application.insidewidth ne ramène encore une variante différente
donc les 3 test de rigeur
t=application.width-application.insidewidth &vbcrlf
t=t & application.operatingsystem & vbcrlf
t=t & application.version
msgbox t
Ouille ...
Je viens de poser un regard sur les différentes captures d'écran et vous invite à en faire autant.
Il semble bien qu'il y ait une sacrée différence de définition du zoom entre une version (la mienne, par exemple) et l'autre .
Regardons par exemple ma dernière image :
on passe d'un zoom à 50 % à un zoom à 200 %.
Dans la "philosophie" du développeur de ma version, on voit bien qu'il s'agit non de multiplier par 4 hauteur et largeur, mais d'obtenir une surface 4 fois supérieure (et donc de ne pas multiplier par 4 les deux dimensions).
J'observe une "approche" très différente à l'examen des autres captures d'écran !
Je commence à penser que tout le problème est là : définitions différentes de ce qu'est un zoom !
576 les bords de l'application y a erreur la!!!!
version 00 ya erreur encore
a ben pas étonnant la version de Windows est en 64 bits même pas la peine de continuer a chercher
preuve est fait que la fonction peut même pas ramener le numéro de version Windows
il est de notoriété public et même Microsoft recommande l'installation de la version 32 bits
je me demande pourquoi on continue a le vendre ou l'installer sur les pcs commerciales
tu t'es pas planté dans ce que tu m'as demandé
Pièce jointe 280911
Pièce jointe 280916
ma version qu'on a faite et qui fonctionne est pourtant un Windows 64bits aussi
oui et non
en fait tu a system 32 et syswow64 dans Windows
une application32 bits tourne avec le sywow64 une sorte de (Windows 32 bits virtuel)
ce qui fait que si tu a un office xxxx 32 bits le application.operatingsystem te donnera toujours Windows (32-bit) NT x.xx même si ton Windows et en 64
ok, y a un problème sur le code par rapport à mon pc, sur ce qu'on avait fait jusque là,
je suis en train de reprendre de ma base avec tout les rajouts que tu as fait pour voir ou ça bug,et il se trouve
que j'ai fait tous les essais en mode plein écran et en mode fenêtre sa bug, je pense que c'est au niveau du cadre
ça m'énerve
Pièce jointe 280956
c'est cette ligne qui déconneCode:cadre = IIf(system Like "*10*" And Val(Application.Version) <> 12, -cadre / 2.4, cadre / 2.4)
avec W10 et 2016?????
ben oui fait ch..., j'avais pas fait gaf
c'est au niveau de
que ça doit coincé, j'ai rajouté cette ligne là en dernier et image que j'ai mi au dessus mais que en fenêtre réduiteCode:, -cadre / 2.4, cadre / 2.4)
comme c'est là, ça marche
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Function PositionForm1(usf, rng) Dim Z As Double, K As Double, E As Double Dim Zooom#, PtToPx#, cadre# 'system = Application.OperatingSystem 'cadre = Application.Width - Application.UsableWidth 'cadre = IIf(system Like "*10*" And Val(Application.Version) <> 12, -cadre / 2.4, cadre / 2.4) cadre = IIf(Application.OperatingSystem Like "*10*" And Val(Application.Version) <> 12, -5, 1) 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 ttop = .PointsToScreenPixelsY(rng.Top * PtToPx * Zooom) / PtToPx + IIf(system Like "*6*", cadre, 0) Wwidth = IIf(rng.Columns.Count > 1, rng.Width * (Zooom) - cadre * 2, usf.Width) Hheight = IIf(rng.Rows.Count > 1, rng.Height * Zooom - cadre, usf.Height) End With PositionForm1 = Array(lleft, ttop, Wwidth, Hheight) UserForm1.Label1.Caption = "Zoom" & " " & Zooom * 100 End Function
quest ce que c'est cette histoire
ton fichier ne reconnais plus app....width ou app...Insidewidth
si toutes les heures tes fichiers répondent différemment alors on s'en sort plus:ptdr::ptdr:
Sinon tanpis je laisse comme ça pas grave, mais c'est bizarre
Dès que c'est pas en pleine écran ça bug, bizarre
Pièce jointe 280983
ben non il ne faut pas laisser demain si c'est pointstoscreenpixels qui bug sans raison ou si il ne reconnait plus active window tu imagine ??
non il faut régler le soucis
enfin tu fais comme tu veux mais ta version ne pourra pas être universelle
ce qui me fait plus chier dans l'histoire, c'est que tu as passé des heures dessus pour que je te dise ça maintenant :oops:
parfois ca peut durer des semaines la résolution d'un problème
ca marchait cet apres midi non? alors ca doit continuer a marcher
j'ai peut-être une réponse qui pourrais aider
Application.Width - Application.UsableWidth en n'importe quelle taille de la fenetre est à 1.5
et en mode pleine écran est à 12
re
en voila une drôle de surprise chez moi ca change pas toujours 9.599999999
c'est absolument pas normal que ca change
oui c'est normal apparemment 2013 later
https://msdn.microsoft.com/fr-fr/lib.../ff840678.aspx
re tu interprète ce que tu lis en aucun cas il est dit qu'une fenêtre maximisée perds sont borderwidth
ca
ca veut dire réduit dans la barre des tachesCitation:
Si la fenêtre est réduite, la largeur est en lecture seule et renvoie la largeur de l'icône de la fenêtre
re
donne moi le résultât de ca sur tes deux PCs
je m'occupe du reste j'ai une autre astuce sous la mancheCode:
1
2
3
4 system = Round(Val(Split(Application.OperatingSystem, " ")(3))) vers = Val(Application.Version) MsgBox system + vers
26 correspondrait a 16 pour office 2016 et 10 pour Windows
15 c'est parce que vba ne retourne rien pour application.operatingsystem
tu confirme que 16 et la version qui t'est retournée pour office sur ton pc actuel ??
ce que je cjercjhe c'est de savoir
2007=12
2010= ?
2013=?
2016=16
oui moi c'est bien 16, et le portable en 2013 c'est 15, la version est affiché dans program files