Décalage positionnement shape avec zoom

Salut tout le monde,

Je faisais un petit fichier sur l'algo A* dont on parlais avec LouReed il y a quelque temps et j'ai un petit souci :)
Je me suis amusé à faire une animation de mouvement avec une shape random et j'ai un décalage quand j'ai un zoom sur la feuille (55% actuellement).

je la positionne en gros avec un simple

Sheets(1).Shapes(MON_IMAGE).Left = Sheets(1).Cells(X, Y).Left
Sheets(1).Shapes(MON_IMAGE).Top = Sheets(1).Cells(X, Y).Top

Et plus je vais loin en colonne et en ligne, forcément plus le décalage se voit, ci-dessous sur l'image on voit bien que mon image n'est pas assez loin en terme de .left et trop loin en terme de .top (cellule verte est la cible)

https://www.youtube.com/watch?v=E-6Y9gzp9Hs&feature=youtu.be

img decalage

J'ai noté qu'en zoom 100% tout à l'air de bien aller :

img decalage 2

Et en testant en zoom 190% idem un décalage revient:

img decalage 3

Quelqu'un sait comment faire pour que l'image se positionne bien quelque soit le zoom? bon après vu que c'est juste un fichier exemple je peux le sortir avec ce souci et je survivrais mais si quelqu'un à une idée rapidement je suis preneur :)

Pas d'idées pour les pros d'excel? :)

Bonjour,

En attendant une meilleure réponse, je pense au fait que ces propriétés ont une valeur arrondie à la décimale unique. Peut-être qu'avec le zoom, ça crée un problème car la position de l'image prend l'arrondi de la position de la cellule...

Alors en essayant de passer par une variable intermédiaire de type double, peut-être que ça pourrait donner quelque chose avec une conversion...

Cdlt,

bonjour

c'est un phénomène bien connu

et ce n'est pas a cause du zoom tout du moins pas que ca

tu constatera qu'a partir de la colonne 4 tout les index impairs sont décalés et pareil pour les lignes et cela en n importe quel zoom

de plus si la shapes a une bordure (line) + ou - épaisse ça n'est pas pris en compte correctement

de plus si le dpi est à 100(96) l'erreur est moindre moi qui suis en dpi 120(125) l'erreur est augmentée

a ce jour seul un bricolage (pas garantie à 100%) peut faire la différence

la bidouille c'est

si index (ligne ou colonne est impair et >4 then roundup(left) et/ou roundup(col)

mais plus on avance vers des grand index plus ça déraille

il faut pas oublier que excel a sa propre représentation graphique et son échelle

perso j'ai même essayé en pixel qui est une mesure beaucoup plus fine et même là le coeff(point to pixel) vertical et horizontal est différent

Bonjour ExcelCoreGame, 3GB, Patricktoulon,

Par défaut la propriété des images (Voir Format Image, taille et propriétés) est validée à Déplacer sans dimensionner avec les cellules.

Il faut changer cette propriété par Déplacer et dimensionner avec les cellules.

Ainsi quelque soit la taille des cellules, l'image s'y conformera.

re

ben moi je te propose un correctif qui a toujours fonctionné sans connaitre aucune dimension

ce correctif tu le trouve sur DVP (mes contrib) et exceldownloads dans mes ressources

excuse pour la qualité de l'image je l'ai copié sur ton post et mis la transparence

que ce soit cette version ou celles plus anciennes en direct ou indirect elle ne m'ont jamais fait défaut

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect([A1:H10], Target) Is Nothing And Target.Count = 1 Then
        stepHorizontal = Sgn(Target.Left - Shapes(1).Left) * 1
        StepVertical = Sgn(Target.Top - Shapes(1).Top) * 1
        With activeshet
            If Shapes(1).Left <> Target.Left Then
                For i = Shapes(1).Left To Target.Left Step stepHorizontal: DoEvents: Shapes(1).Left = i: Next
            End If

            If Shapes(1).Top <> Target.Top Then
                For c = Shapes(1).Top To Target.Top Step StepVertical: DoEvents: Shapes(1).Top = c: Next
            End If
        End With
        'apres l'avoir deplacé on applique le correctif (2 versions dispos)
        place_l_image_dansV_2 Target, Shapes(1)  '!!!CORRECTIF version année 2020!!!!!!
    End If
End Sub
'pour corriger 
Sub place_l_image_dansV_2(rng As Range, shap As Shape)
'*****************************************************
'Ressources patricktoulon sur exceldownloads
'https://www.excel-downloads.com/resources/centrer-une-image-dans-un-range-en-toute-circonstances-quel-que-soit-le-ratio-range-image.1173/updates
'*****************************************************
    Dim Ratio#
    Ratio = Application.Min(rng.Cells(1).MergeArea.Width / shap.Width, rng.Cells(1).MergeArea.Height / shap.Height)
    With shap
        .Width = .Width * (Ratio)
        .Height = .Height * (Ratio)
        .Top = rng.Top + ((rng.Cells(1).MergeArea.Height - .Height) / 2)
        .Left = rng.Left + ((rng.Cells(1).MergeArea.Width - .Width) / 2)
    End With
End Sub

demonstration

demo7

voilà

et gare a ton sanglier perso je le voit en daube et peut être une épaule rôti aux patates douces

Et bin c'est plus complexe que ce que je pensais, je vais étudier la chose! merci pour vos réponses:)

Salut,
Sur mon ancienne version d'excel j'ai pas réussi à mettre en place la solution de patricktoulon (du moins pas de changement notable avec le correctif)
Du coup pour ce petit fichier j'ai utiliser la solution de X cellus de mettre l'option "Déplacer sans dimensionner" même si sur ma version cela ne corrige pas trop mais bon si cela fonctionne sur les nouvelles version cela posera pas de souci (je dois être le seul avec une version aussi vieille ^^)

Et de toute façon c'est juste pour tester sur une petite zone genre 10x10 et pas 1000x1000, c'est pas le but du fichier donc je vais pas trop me prendre la tête :)
Surtout que j'ai fais un algo à ma façon (surement des erreurs et personne vraiment ne va le reprendre, c'était juste pour voir si j'y arrivais suite à la discussion avec LourReed)

Je prends en note dans un coin de ma tête en tout cas vos codes, vos conseils et vos explications ! merci les gars

Rechercher des sujets similaires à "decalage positionnement shape zoom"