[Excel 2013] Insertion image récalcitrante

13 réponses
Avatar
ThierryP
Bonjour le forum,

J'ai un souci avec l'insertion d'images dans Excel : si j'utilise le menu i=
nsertion pour ins=C3=A9rer un jpg, et que je sauvegarde le classeur, je peu=
x copier celui-ci sur un autre PC, l'image reste int=C3=A9gr=C3=A9e au clas=
seur.

Si je fais la m=C3=AAme chose par macro, j'ai le message d'insulte classiqu=
e d'Excel :
"Impossible d'afficher l'image li=C3=A9e" etc...

Ma macro fait =C3=A7=C3=A0 :

Activesheet.Pictures.Insert(Lecteur & "\Signatures\Images\Signature.jpg").S=
elect
Selection.Name =3D "Signature"
Selection.Left =3D Range("Signature")(1).Left
Selection.Top =3D Range("Signature")(1).Top + 0.5
Rapport.Shapes("Signature").LockAspectRatio =3D msoFalse
Selection.Height =3D Range("Signature").Height - 0.5
Selection.Width =3D Range("Signature").Width

J'ai enregistr=C3=A9 le code lors de l'insertion par menu et j'obtiens bien=
la m=C3=AAme syntaxe.

Qu'est-ce que je loupe ?

Merci d'avance pour votre aide !

ThierryP

10 réponses

1 2
Avatar
MichD
Bonjour,
Suppose que tu veuilles insérer une image sur l'onglet "Feuil2" couvrant la plage de cellules
B5:D6 et que cette image se trouve dans le répertoire "C:WinntPlume.bmp", Plume.bmp étant le
nom de l'image.
'--------------------------------------------------------------
Sub TestMonImage()
InsérerImage "Feuil2", Range("b5:D6"), "C:WinntPlume.bmp"
End Sub
'--------------------------------------------------------------
Sub InsérerImage(Feuille As String, RgImage As Range, NomImage As String)
Dim Rg As Range
Set Rg = Worksheets(Feuille).Range(RgImage.Address)
With Rg
Largeur = .Offset(, 1)(, .Columns.Count).Left - .Left
Hauteur = .Offset(.Rows.Count).Top - .Item(1).Top
Set Image = Worksheets(Feuille).Pictures.Insert(NomImage)
End With
With Image
.ShapeRange.LockAspectRatio = msoFalse 'or Msotrue
.Left = Rg.Left
.Top = Rg.Top
'Largeur de l'image
Image.Width = Largeur
'Hauteur de l'image
Image.Height = Hauteur
'Est-ce que l'image doit se déplacer avec les cellules
'voici les 3 constantes possibles
.Placement = xlFreeFloating 'or xlmove or xlMoveAndSize
'Verrouillé ou pas
.Locked = True 'or False
End With
Set Rg = Nothing
End Sub
'--------------------------------------------------------------
MichD
Avatar
MichD
Dans la procédure "InsérerImage", si tu veux donner un nom à l'image que tu viens d'insérer, tu
ajoutes la ligne de code suivante. Évidemment, tu ne peux pas donner le même nom à plus d'une
image...
.Locked = True 'or False
'Si tu veux donner un nouveau nom à ton image...
.Name = "MichD" 'OU Worksheets(Feuille).range("A1") <<<<=======
MichD
Avatar
ThierryP
Bonsoir Denis,
Merci pour ta réponse.
C'est cette syntaxe que j'utilisais... sauf que pour une raison inconnue, l 'image ne "suivait" pas le fichier si je le transférais sur une autre machine.
Du coup, j'ai repris la syntaxe qu'Isabelle m'a suggéré, et là   je n'ai plus de problème.
Vous êtes vraiment infatigables là-bas de l'autre côté :-)))
ThierryP
Avatar
MichD
| l'image ne "suivait" pas le fichier si je le transférais sur une autre machine
**** Je suis surpris d'entendre cela! Peux-tu publier "ta" procédure que tu utilisais? Celle
que je suggère s'enregistre dans le fichier. Elle n'est pas liée, mais incorporée.
MichD
Avatar
ThierryP
Bonsoir Denis,
La procédure est celle que j'ai donné dans mon premier post à   ce sujet. Le pire est que je suis sûr qu'elle a fonctionné... .. Mais Excel a tellement de mystères pour moi que quelquefois je reno nce à comprendre !
ThierryP
Avatar
News.aioe.org
Bonjour,
Ce code ressemble à celui que tu as publié. Il ne devrait pas te poser
problème. L'image est insérée dans le fichier. Essaie ceci dans un tout
nouveau fichier afin d'éliminer d'autres sources de liens possibles dans ton
fichier.
Je joins un fichier exemple où j'ai inséré une image à partir de la
procédure en module 1 du classeur.
http://www.cjoint.com/c/GCdmF0ViiMi
Éprouves-tu une difficulté quelconque avec ce fichier?
'-------------------------------------------------
Sub test()
Dim Img As Picture
With ActiveSheet
Set Img = .Pictures.Insert _
("C:UsersmichdPicturesSpotBright350198539584221898landscape.jpg")
End With
With Img
.Name = "Signature"
.Left = Range("Signature").Left
.Top = Range("Signature").Top
.ShapeRange("Signature").LockAspectRatio = msoFalse
.Height = Range("Signature").Height - 0.5
.Width = Range("Signature").Width
End With
End Sub
'-------------------------------------------------
MichD
Avatar
News.aioe.org
Bonjour,
Ce code ressemble à celui que tu as publié. Il ne devrait pas te poser
problème. L'image est insérée dans le fichier. Essaie ceci dans un tout
nouveau fichier afin d'éliminer d'autres sources de liens possibles dans ton
fichier.
Je joins un fichier exemple où j'ai inséré une image à partir de la
procédure en module 1 du classeur.
http://www.cjoint.com/c/GCdmF0ViiMi
Éprouves-tu une difficulté quelconque avec ce fichier?
'-------------------------------------------------
Sub test()
Dim Img As Picture
With ActiveSheet
Set Img = .Pictures.Insert _
("C:UsersmichdPicturesSpotBright350198539584221898landscape.jpg")
End With
With Img
.Name = "Signature"
.Left = Range("Signature").Left
.Top = Range("Signature").Top
.ShapeRange("Signature").LockAspectRatio = msoFalse
.Height = Range("Signature").Height - 0.5
.Width = Range("Signature").Width
End With
End Sub
'-------------------------------------------------
MichD
Avatar
ThierryP
Re,
En ouvrant ton fichier, j'ai eu l'insulte "Impossible d'afficher l'image li ée"...
J'ai copié ta procédure dans un nouveau fichier, inséré une image, sauvegardé et transféré le classeur sur un autre PC : même message d'erreur.
Cela peut-il venir d'une option perdue au fond des menus d'Office ?
Avec la méthode ActiveSheet.Shapes.AddPicture, je n'ai pas de souci.
L'essentiel est d'avoir une solution !
Merci pour ton temps !
ThierryP
Avatar
ThierryP
Re,
En ouvrant ton fichier, j'ai eu l'insulte "Impossible d'afficher l'image li ée"...
J'ai copié ta procédure dans un nouveau fichier, inséré une image, sauvegardé et transféré le classeur sur un autre PC : même message d'erreur.
Cela peut-il venir d'une option perdue au fond des menus d'Office ?
Avec la méthode ActiveSheet.Shapes.AddPicture, je n'ai pas de souci.
L'essentiel est d'avoir une solution !
Merci pour ton temps !
ThierryP
Avatar
News.aioe.org
Bonjour Thierry,
Je viens d'apprendre quelque chose ou j'ai oublié....
Bien sûr, il y a ta suggestion qui permet d'utiliser les arguments définis
dans l'aide en ligne :
https://msdn.microsoft.com/fr-fr/library/office/ff198302(v=office.15).aspx
expression.AddPicture(Filename, LinkToFile, SaveWithDocument, Left, Top,
Width, Height)
OU
On peut modifié la macro comme ceci et cela devrait aller :
'-----------------------------------------------------
Sub test()
Dim Img As Picture
With ActiveSheet
Set Img = .Pictures.Insert _
("C:UsersmichdPicturesSpotBright350198539584221898landscape.jpg")
End With
With Img
.Name = "MichD"
.Left = Range("Signature").Left
.Top = Range("Signature").Top
.ShapeRange(.Name).LockAspectRatio = msoFalse
.Height = Range("Signature").Height - 0.5
.Width = Range("Signature").Width
.Copy
.Delete
Worksheets(.Parent.Name).PasteSpecial Format:="Picture (JPEG)", _
Link:úlse, DisplayAsIcon:úlse
End With
End Sub
'-----------------------------------------------------
MichD
1 2