Word

Tout d'abord, si l'on veut indiquer la position précise de l'image, cela sous-entend image avec habillage. Dans le cas inverse l'image est insérée comme un caractère.

Il faut savoir que la position d'une image avec habillage est toujours relative à quelque chose : à la marge, à la page, au paragraphe... 

Pour Word et par défaut, la position de cette image est relative au paragraphe auquel elle est ancrée. Je rappelle qu'une image avec habillage est toujours ancrée à un paragraphe. Voir ici pour plus d'explications.

Donc, dans le code, soit on ne précise rien et l'image sera ancrée au paragraphe, soit on précise une valeur pour les propriétés RelativeHorizontalPosition et RelativeVerticalPosition. 

NB :  On peut très bien décider d'avoir une position horizontale une verticale par rapport à des éléments différents. Il y a donc lieu d'utiliser les deux propriétés.

Voici les valeurs de ces deux propriétés :

  • Marge : 0
  • Page : 1
  • Colonne : 2
  • Marge de gauche 4
  • Marge de droite : 5

La position est déterminée par défaut en points. Mais, bien entendu il est plus simple de la donner en centimètres (ou en pouces pour l'Outre Atlantique par exemple). Dans ce cas on utilise le paramètre CentimetersToPoints pour les centimètres et le paramètre InchesToPoints pour les pouces.

Concernant la taille de l'image, si l'on souhaite en imposer une, le mieux est d'utiliser la propriété LockAspectRatio afin de conserver l'échelle de l'image et ne pas la déformer. On indiquera donc seulement la largeur (Width) OU la hauteur (Height)

L'exemple suivant insère l'image nommée "mon_image.jpg" qui se trouve sur le lecteur P. Cette image sera positionnée à 7 cm du bord gauche de la page et 3 centimètres de la marge du haut. Elle mesurera 2 cm de hauteur et conservera son échelle.

 

Sub insere_image()
'macro écrite par m@rina
Dim image As Shape
Set image = ActiveDocument.Shapes.AddPicture(FileName:="P:\mon_image.jpg")

With image
.RelativeHorizontalPosition = 1
.RelativeVerticalPosition = 0
.Left = CentimetersToPoints(7)
.Top = CentimetersToPoints(3)
.LockAspectRatio = msoTrue
.Height = CentimetersToPoints(2)
End With
End Sub

PowerPoint

Une image insérée dans PowerPoint est positionnée par rapport aux bords gauche et supérieurs. Il faudra donc donner ces deux indications qui sont d'ailleurs obligatoires. Ces indications sont données dans le code en points et contrairement à Word, il n'existe pas de paramètres permettant de convertir automatiquement les pouces en points. On va donc le programmer dans la macro afin de ne pas avoir à faire manuellement la conversion. Dans l'exemple ci-dessous, l'image sera donc positionnée dans la deuxième diapositive, à 10 cm depuis le bord gauche et 5 cm depuis le bord supérieur.

Les indications LinktoFile et SaveWithDocument sont obligatoires. La première indique si l'image sera liée au fichier d'origine et la seconde indique si l'image sera enregistrée ou non dans la présentation. Si l'on choisit msoFalse pour la première, la seconde devra automatiquement être msoTrue.

N'utilisez pas cette méthode si vous souhaitez imposer une taille car le résultat ne sera pas forcément homothétique. Voyez plutôt cet article.

Sub insere_image()
'macro écrite par m@rina
'pour PPT
Dim pres As Slide, gauche, haut, image As String
gauche = 10 * 28.3
haut = 5 * 28.3
image = "P:\mon_image.jpg"

Set pres = ActivePresentation.Slides(2)
pres.Shapes.AddPicture FileName:=image, LinkToFile:=msoTrue, SaveWithDocument:=msoTrue, Left:=gauche, Top:=haut
End Sub