[Excel 2013] Insertion image récalcitrante

Le
ThierryP
Bonjour le forum,

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

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

Ma macro fait çà :

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

J'ai enregistré le code lors de l'insertion par menu et j'obtiens bien=
la même syntaxe.

Qu'est-ce que je loupe ?

Merci d'avance pour votre aide !

ThierryP
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26427747
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
MichD
Le #26427756
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
ThierryP
Le #26427790
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
MichD
Le #26427788
| 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
ThierryP
Le #26427845
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
News.aioe.org
Le #26428005
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
News.aioe.org
Le #26428074
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
ThierryP
Le #26428008
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
ThierryP
Le #26428073
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
News.aioe.org
Le #26428009
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
Publicité
Poster une réponse
Anonyme