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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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...
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 😂
 
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 en 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:
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.
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour