Valeur Top d'une cellule et d'un shape ne correspondent pas (décalage)

Bonjour à tous,

Voici deux jours que je suis bloqué sur un problème de placement d'image dans mon fichier Excel.

A première vue, ça me semble un bug, mais on sait tous que le bug est souvent entre la chaise et le clavier .

Je souhaite faire une action toute simple, à savoir, placer une image dans une case.

Pour la démonstration, j'aimerais que l'image couvre toute la case.

Je rencontre une difficulté de positionnement avec la valeur TOP de la shape et la valeur TOP de la cellule. À valeurs égales, la position n'est pas la même.

Plus je cherche à placer l'image sur des lignes ou colonnes éloignées, plus l'écart s'accroit.

Voici mon exemple pour placer mon image en "AU400"

Sub test()

    Dim img As Shape

    Set img = ActiveSheet.Shapes.AddPicture("IMG_A02043.jpeg", False, True, 0, 0, -1, -1)

    With img
        .LockAspectRatio = msoTrue
        .Height = Range("AU400").Height
        .Width = Range("AU400").Width
        .Top = Range("AU400").Top
        .Left = Range("AU400").Left
        .Placement = xlMoveAndSize
    End With

End Sub

Je vous transmets le fichier d'exemple (Attention c'est un fichier macro), mais je n'arrive pas à joindre l'image. (un simple carré rouge de 400 par 400px).

Voici le résultat : Je souhaiterais que l'image soit pile dans la case AU400.

bug top top

Je suis sur Excel 365.

Merci de votre aide et en attendant, je vous souhaite une bonne journée.

ps : JE viens de forcer la mise à jour d'office et le problème persiste.

Bonjour,

Essayez de mettre à FALSE

LockAspectRatio = msoFalse
Cdlt

Avec :

Sub test()

    Dim img As Shape

    Set img = ActiveSheet.Shapes.AddPicture("c:\temp\IMG_A02043.jpeg", False, True, 0, 0, -1, -1)

    With img
        .LockAspectRatio = msoFalse
        .Height = Range("AU400").Height
        .Width = Range("AU400").Width
        .Top = Range("AU400").Top
        .Left = Range("AU400").Left
        .Placement = xlMoveAndSize
    End With

End Sub

Même problème de positionnement (Par contre c'est clairement mieux pour forcer la taille à celle de la case):

lockaspectratio msofalse

Bonjour à tous,

Une autre solution consisterait à utiliser une forme déjà existante dans laquelle on importe une image.

Option Explicit

Sub LancerImporterUneImage()

Dim Chemin As String

    Chemin = "C:\......\IMG_A02043.jpeg"  ' A adapter
    ImporterUneImage "MonImage", Chemin, Range("AU400")

End Sub

Sub ImporterUneImage(ByVal NomShape As String, ByVal CheminImage As String, ByVal CelluleChoisie As Range)

Dim FormeTrouvee As Boolean
Dim I As Integer
Dim MaForme As Shape
Dim Sh As Worksheet

    Set Sh = CelluleChoisie.Parent

    With Sh

         If .Shapes.Count = 0 Then Exit Sub

         FormeTrouvee = False
         For I = 1 To .Shapes.Count
             If .Shapes(I).Name = NomShape Then
                FormeTrouvee = True
                Exit For
             End If
         Next I

         If FormeTrouvee = False Then
            MsgBox "Aucune forme du nom de " & NomShape & " trouvée !"
            Exit Sub
         End If

        Set MaForme = .Shapes(NomShape)
        With MaForme

             With .Fill
                  .Visible = msoTrue
                  .UserPicture CheminImage
                  .TextureTile = msoFalse
             End With

             .LockAspectRatio = msoFalse
             .Height = CelluleChoisie.Height
             .Width = CelluleChoisie.Width
             .Top = CelluleChoisie.Top
             .Left = CelluleChoisie.Left

        End With
    End With

    Set Sh = Nothing
    Set MaForme = Nothing

End Sub

Bonjour Eric,

Merci pour la proposition. Mais sur mon Excel le résultat n'est pas le même que sur le tien.

pb avec shape

Et comme cela est pour la génération d'un catalogue de plus de 4 000 articles. La solution n'aurait pas été simple à adapter.

Bonjour,

Questions:

- Pourquoi dans le fichier que vous avez déposé la macro est dans le module de la feuille et non dans un module standard?

- Comment est appelée cette macro, par une bouton? par une macro évènementielle?

Cdlt

Bonjour,

OK, j'ai trouvé l'origine du problème, mais pas de solution. Le problème est beaucoup plus profond que le VBA.

C'est lié à la mauvaise gestion du multi écran.

Excel affiché et lancé depuis l'écran 1 (PC portable) :

ecran1

Excel affiché et lancé depuis les écrans 2 et 3 (reliés à la station d'accueil) :

ecran2

J'ai plusieurs bugs d'office (et sur plusieurs PC) lorsque j'utilise plusieurs écrans. (allant jusqu'à la disparition de l'écran des query si je l'ouvre en plein écran sur un 2nd moniteur...)

Merci de votre aide

Rechercher des sujets similaires à "valeur top shape correspondent pas decalage"