Comment insérer une image dans Excel à une position précise de la cellule avec VBA

je suis en ajoutant ".jpg" des fichiers sur ma feuille Excel avec le code ci-dessous :

'Add picture to excel
xlApp.Cells(i, 20).Select
xlApp.ActiveSheet.Pictures.Insert(picPath).Select
'Calgulate new picture size
With xlApp.Selection.ShapeRange
    .LockAspectRatio = msoTrue
    .Width = 75
    .Height = 100
End With
'Resize and make printable
With xlApp.Selection
    .Placement = 1 'xlMoveAndSize
    '.Placement = 2 'xlMove
    '.Placement = 3 'xlFreeFloating
    .PrintObject = True
End With

Je ne sais pas ce que je fais mal, mais il ne s'insère pas dans la bonne cellule, alors que dois-je faire pour mettre cette image dans une cellule spécifiée dans Excel?

22
demandé sur SWa 2012-10-17 18:29:28

3 réponses

essaye ceci:

With xlApp.ActiveSheet.Pictures.Insert(PicPath)
    With .ShapeRange
        .LockAspectRatio = msoTrue
        .Width = 75
        .Height = 100
    End With
    .Left = xlApp.ActiveSheet.Cells(i, 20).Left
    .Top = xlApp.ActiveSheet.Cells(i, 20).Top
    .Placement = 1
    .PrintObject = True
End With

il vaut mieux ne pas le faire .sélectionnez n'importe quoi dans Excel, il est généralement jamais nécessaire et ralentit votre code.

40
répondu SWa 2012-10-17 14:42:49

j'ai travaillé sur un système qui fonctionnait sur un PC et Mac et luttait pour trouver du code qui fonctionnait pour insérer des images à la fois sur PC et Mac. Cela a fonctionné pour moi donc espérons que quelqu'un d'autre peut s'en servir!

Note: les variables strPictureFilePath et strPictureFileName doivent être définies à des chemins PC et Mac valides Eg

pour PC: strPictureFilePath = "E:\Dropbox\ "and strPictureFileName =" TestImage.jpg "et avec Mac: strPictureFilePath =" Macintosh HD:Dropbox: "and strPictureFileName =" témoignage.jpg"

Code comme suit:

    On Error GoTo ErrorOccured

    shtRecipeBrowser.Cells(intDestinationRecipeRowCount, 1).Select

    ActiveSheet.Pictures.Insert(Trim(strPictureFilePath & strPictureFileName)).Select

    Selection.ShapeRange.Left = shtRecipeBrowser.Cells(intDestinationRecipeRowCount, 1).Left
    Selection.ShapeRange.Top = shtRecipeBrowser.Cells(intDestinationRecipeRowCount, 1).Top + 10
    Selection.ShapeRange.LockAspectRatio = msoTrue
    Selection.ShapeRange.Height = 130
1
répondu Tristan 2016-07-17 11:42:54

S'il s'agit simplement d'insérer et de redimensionner une image, essayez le code ci-dessous.

pour la question spécifique que vous avez posée, la propriété TopLeftCell renvoie l'objet range lié à la cellule où le coin supérieur gauche est stationné. Pour placer une nouvelle image à un endroit précis, je recommande de créer une image à l'endroit "droit" et d'enregistrer ses propriétés supérieures et gauches du mannequin sur des variables doubles.

Insérez votre Pic assigné à une variable pour changer facilement de son nom. L'objet Shape aura le même nom que l'objet Picture.

Sub Insert_Pic_From_File(PicPath as string, wsDestination as worksheet)
    Dim Pic As Picture, Shp as Shape
    Set Pic = wsDestination.Pictures.Insert(FilePath)
    Pic.Name = "myPicture"
    'Strongly recommend using a FileSystemObject.FileExists method to check if the path is good before executing the previous command
    Set Shp = wsDestination.Shapes("myPicture")
    With Shp
        .Height = 100
        .Width = 75
        .LockAspectRatio = msoTrue  'Put this later so that changing height doesn't change width and vice-versa)
        .Placement = 1
        .Top = 100
        .Left = 100
    End with
End Sub

Bonne chance!

1
répondu FCastro 2017-03-14 03:40:47