Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

  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

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
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:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…