Besoin code macro svp

Résolu/Fermé
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 - Modifié par ButteDuLac le 1/03/2016 à 21:39
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 - 4 mars 2016 à 15:51
J'ai pour but d'insérer une image (logo) et de la redimensionner...

Dans l'enregistreur de macro, je peux insérer, mais les options de redimensionnement et de positionnement sont désactivées, alors je dois éditer le reste de la macro (avec des connaissances très basiques en VBA).

J'ai joint deux macro, la première servant à insérer une image, l'autre à redimensionner une image (j'ai enregistré moi-même la première et la seconde, trouvée ic : https://forums.commentcamarche.net/forum/affich-25360534-creer-macro-pour-redimensionner-images

Sub Logo()
'
' Logo Macro
'
'
Selection.InlineShapes.AddPicture FileName:= _
"***emplacement_de_image.jpg", LinkToFile:=False, _
SaveWithDocument:=True

On Error Resume Next
Selection.InlineShapes(1).ConvertToShape
On Error GoTo erreur
With Selection.ShapeRange
.Height = CentimetersToPoints(6)
.WrapFormat.Type = wdWrapTight
End With

Exit Sub
erreur: MsgBox "la sélection ne contient pas d'image"

End Sub


Il me manquerait une ligne pour dire de sélectionner l'image qui vient d'être insérée, car la macro s'exécute de la façon suivante : la MsgBox m'indique "la sélection ne contient pas d'image", puis l'image s'insère par la suite.

Est-ce que quelqu'un peut m'aider? Soit en m'inscrivant la ligne manquante, soit en modifiant le tout, car dans le fond, si la macro sélectionne l'image précédemment insérée, le message d'erreur n'est probablement plus utile.

Enfin, si je pouvais avoir la ligne de code pour la DistanceTop et DistanceLeft pour que l'image soit à 0,5" (pouces) du haut page et 0,5" (pouces) du côté gauche page.

Oh, en passant, je suis dans Word 2010.

Merci!
A voir également:

2 réponses

m@rina Messages postés 20064 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 23 avril 2024 11 271
Modifié par m@rina le 3/03/2016 à 02:24
Bonsoir,

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

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.
Donc, dans mon code, on doit mettre les valeurs par rapport à ce paragraphe.

Maintenant, si tu préfères donner une position par rapport à autre chose, il faut le mentionner dans le code. Par rapport à la page, la valeur sera 1, par rapport aux marges, la valeur sera 0, etc. A noter qu'il faut le préciser pour les deux positions : verticale et horizontale. On peut décider par exemple une position horizontale par rapport à la marge et une verticale par rapport à la page. Voici le code :

RelativeHorizontalPosition = 1
RelativeVerticalPosition = 1


Concernant la taille de l'image, il vaut mieux ne donner qu'une valeur pour la hauteur (ou pour la largeur) et dire qu'on veut conserver l'échelle. Sinon, ça oblige à mettre des valeurs qui risquent de déformer l'image.

En résumé, voici un exemple de code qui insère l'image avec une position horizontale à 7 cm du bord gauche de la page et 3 cm du haut de la page. L'image fera 2 cm de hauteur et conservera son échelle. Je te laisse mettre tes dimensions en pouces :

Sub logo2()

Dim oLogo As Shape
Set oLogo = ActiveDocument.Shapes.AddPicture(FileName:="P:\monimage.jpg")

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


Est ce que c'est plus clair ?
m@rina

ps : je détaille le tout dans un article ici :
https://faqword.com/index.php/word/faq-word/objets-graphiques/926-comment-en-vba-inserer-une-image-avec-habillage-et-indiquer-sa-taille-et-sa-position

Nous ne sommes pas devins : n'oubliez pas d'indiquer la version du logiciel utilisé, et comment vous avez procédé.
1
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
4 mars 2016 à 15:51
Oui, c'est le .LockAspectRatio qui me manquait.

Pour ce qui est de la position, j'ai compris le principe, mais je ne comprenais pas pourquoi avec alignement sur paragraphe, ça fonctionne pour l'alignement Top mais pas pour Left.
Enfin, peu importe, maintenant, tout fonctionne impec.!

Merci!
0
m@rina Messages postés 20064 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 23 avril 2024 11 271
Modifié par m@rina le 2/03/2016 à 01:26
Bonsoir,

D'une manière générale, ce n'est jamais très bon de recopier des bouts de code et d'essayer de les faire fonctionner avec d'autres cas.

Vu que tu souhaites (si j'ai bien compris) insérer l'image avec habillage, inutile de convertir en Shape, autant l'insérer directement en Shape. Essaie plutôt ceci :

Sub logo2()

Dim oLogo As Shape
Set oLogo = ActiveDocument.Shapes.AddPicture(FileName:="mon_image.jpg", LinkToFile:=False, Left:=30, Top:=30, SaveWithDocument:=True)

End Sub


Remplace les valeurs Left et Top par les tiennes : ce sont les emplacements de l'image par rapport au paragraphe auquel est ancré l'image.


A noter que les valeurs sont en points, et que pour les mettre en pouces, c'est comme ça, par exemple :
- Pour ceux qui aiment les pouces :
Left:=InchesToPoints(5)

- Pour ceux qui aiment les centimètres :
Left:=CentimetersToPoints(5)


m@rina


Nous ne sommes pas devins : n'oubliez pas d'indiquer la version du logiciel utilisé, et comment vous avez procédé.
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
2 mars 2016 à 21:10
Il manque une partie. LA plus importante. Je voulais redimensionner l'image (il y a des dimensions réglementées) pour qu'elle ait :
" largeur minimale de 42 mm (4,2 cm) par une hauteur de 19,74 mm (1,97 cm), ou encore une largeur 1,65 pouce par une hauteur de 0,78 pouce "

J'ai tenté ceci :

Sub logo()

Dim oLogo As Shape
Set oLogo = ActiveDocument.Shapes.AddPicture(FileName:="O:\Direction des soins infirmiers\Directeur DSI\Secretaire\DOCUMENTS RÉFÉRENCES ET MODÈLES\Logo-CISSS_Iles.jpg", _
LinkToFile:=False, Left:=InchesToPoints("0,025"), Top:=5, Height:=65, Width:="138,1", SaveWithDocument:=True)

End Sub


Je ne comprends pas pourquoi je dois inscrire 0,025 pouces à Left pour arriver à 0,5 pouces (après de nombreuses tentatives), en points, je n'arrivais pas à me placer, c'était constamment du essai-erreur point par point... pourtant, en Top, j'arrive directement dessus avec 5 points?????

Je ne comprends pas non plus pourquoi les dimensions, en points sont à 65 x 138,1 et ça s'insère à 138, donc ça déforme l'image et je ne dois pas le faire. J'ai essayé avec WidthRelative, mais je ne comprends pas vraiment comment ça marche... (bon, la déformation est minime, mais je sais qu'il doit y avoir moyen de ne pas le faire...)

Merci de m'aider pour ce dernier petit bout de chemin!
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
2 mars 2016 à 21:15
Je croyais comprendre une partie, mais non... si ce sont les valeurs (Top et Left) par rapport au paragraphe, et non par rapport à la page, comme je le croyais, alors ça m'aurait expliqué le problème avec Left, mais pas avec Top, puisque mon logo est placé à 0,5 pouces du haut de page, soit à la toute première ligne du 1er paragraphe (marges à 0,5 pouces haut et gauche)
Alors ????????
0