Autres calcul de position d’écart left top qui déraille

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
pour calendar je suis en train de faire un patch qui me permettra de respecter les positions en forcant une marge left et top

sauf que dans l'exemple qui suit ( 2 userforms simple) le calcul ne fait pas la différence en - ou +

le calcul additionne tout le temps ??????????????????:oops:🤔🤔🤔🤔🤔🤔

  1. ouvrez l'userform ,cliquez sur le bouton rouge
  2. le userform2 s'affiche replacez le en coin haut et gauche de B3
  3. et recliquez sur le bouton rouge du uf1

j'ai tout essayé même avec sgn rien y fait c'est un truc de fou
 

Pièces jointes

  • test calcul position.xlsm
    22.4 KB · Affichages: 15
Solution
allez on garde comme ça
merci a tous
VB:
Private Sub showW_Click()
    With uf2
        Dim L1#, T1#, OperX&, OperY&
        If Not .Visible Then
            ddecx = 0: ddecy = 0    '1er lancement
            .StartUpPosition = 0
            With ActiveWindow
                PtoPx = (.ActivePane.PointsToScreenPixelsY(72) - .ActivePane.PointsToScreenPixelsY(0)) / 72    'coeff point to pixel
                Z = .Zoom / 100
                L1 = (.ActivePane.PointsToScreenPixelsX(Int([b3].Left)) / PtoPx) * Z    'placement partie mobile
                T1 = .ActivePane.PointsToScreenPixelsY(Int([b3].Top)) / PtoPx * Z
            End With
            .Left = L1
            .Top = T1
            .Show 0
            ddecx = L1
            ddecy...

patricktoulon

XLDnaute Barbatruc
oui visiblement c'est bien tu es allé jusque là mais un peu plus tard on apprend a travailler avec les nombres relatifs
VB:
si j'ai mon uf2 a 123 de left et que le repositionne à 128 de left je devrait avoir dans ddecx 5
si j'ai mon uf2 a 128 de left et que le repositionne à 123 de left je devrait avoir dans ddecx -5
hors dans les deux sens il additionne j'obtiens 133
Sans voir l'opération et sans connaître la valeur de chacun des opérandes, pas simple de t'aider.
Mais il semble tout de même ici évident que tu t'es trompé dans ton opération : tu fais une addition au lieu de faire une soustraction (ou tu fais une soustraction au lieu de faire une addition). 😉

tu met juste le doigt dessus et tu ne comprends toujours pas la demande en fait et on en est a 59 post
pour une demande qui est résolu depuis le post #15 ou la réponse correspond exactement a mon besoins
après si tu veux jouer a celui qui fait pipi le plus loin va y ne te gène pas , moi je n'y joue plus depuis plus de 40 ans , je t'octroie la victoire sans conteste 😂
 

TooFatBoy

XLDnaute Barbatruc
si tu veux jouer a celui qui fait pipi le plus loin va y ne te gène pas, moi je n'y joue plus depuis plus de 40 ans , je t'octroie la victoire sans conteste 😂
Non, pas du tout.
Je voulais juste t'expliquer les deux erreurs que tu commettais dans ton raisonnement.

C'est dommage que tu le prennes comme ça, d'autant que le "problème" semble super facile à résoudre à utilisant la bonne opération (une soustraction à la place d'une addition), et qu'il semble totalement inutile de compliquer avec SGN et ABS.

Si tu prends le temps de tout relire, grâce aux explications tu comprendras facilement tes deux erreurs.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Encore une fois ces deux instructions au poste #15 :
VB:
OperX = Sgn(uf2.Left - CDbl(ddecx)): ddecx = OperX * (Abs(uf2.Left - CDbl(ddecx)))
OperY = Sgn(uf2.Top - CDbl(ddecy)): ddecy = OperY * (Abs(uf2.Top - CDbl(ddecy)))
Reviennent exactement au même que :
VB:
ddecx = uf2.Left - CDbl(ddecx)
ddecy = uf2.Top - CDbl(ddecy)
Le seul truc c'est que dans le classeur d'origine ça mettait toujours simplement uf2.Left et uf2.Top parce que ddecx et ddecy était remis à 0 au début.
 

TooFatBoy

XLDnaute Barbatruc
ces deux instructions au poste #15 :
OperX = Sgn(uf2.Left - CDbl(ddecx)): ddecx = OperX * (Abs(uf2.Left - CDbl(ddecx)))
OperY = Sgn(uf2.Top - CDbl(ddecy)): ddecy = OperY * (Abs(uf2.Top - CDbl(ddecy)))


Reviennent exactement au même que :
ddecx = uf2.Left - CDbl(ddecx)
ddecy = uf2.Top - CDbl(ddecy)
Oui, il faut espérer que ce soit pareil, sinon c'est qu'il y a un gros bug dans Excel. ;)

Ou alors peut-être quand on travaille avec des variables de tailles différentes (octet et long par exemple) : Excel ne sait peut-être pas bien s'adapter et donne un résultat faux ???

En tout cas, rien ici ne prouve une telle chose : voir sur les gif de #40 où les résultats donnés par Excel sont parfaitement conformes à ceux que l'on attend (c'est-à-dire respectivement 3, 3, -3 et 3) au vu des opérations effectuées.
 
Dernière édition:

Statistiques des forums

Discussions
312 240
Messages
2 086 514
Membres
103 239
dernier inscrit
wari