OVH Cloud OVH Cloud

Redimensionner une image par macro

36 réponses
Avatar
LargoWinch
Bonjour,

avec Word 2000, je voudrais écrire une petite macro me permettant de
reformater des copies d'écrans, à une largeur donnée, mais en gardant
une hauteur proportionnelle.

Si j'ai bien réussi a faire en sorte de modifier la largeur, je ne
trouve pas l'équivalent de la case à cocher "Garder les proportions",
conclusion, mon image est complètement déformée et c'est pas bo :-(

Existe-t-il une méthode (au sens objet du terme) que je n'aurai pas vu ?
Auriez-vous un bout de code à me montrer ?

Merci d'avance.

Largo

10 réponses

1 2 3 4
Avatar
LargoWinch


Ca marche bien. Il n'y a qu'une chose qui me dérange, c'est le 300,
qui correspond à la largeur de l'image en *pixel*. J'aimerai passer
par une autre unité (des cm, ça serait idéal), mais je me demande si
c'est possible, le pixel ayant une taille fonction de la résolution si
je ne m'abuse...

Des idées à me suggérer ?

Merci d'avance


et pour finir (désolé les idées viennent en allant)
Y'a pas de mal, les idées viennent quand même vite ;)


La résolution de l'écran n'a rien à voir
Un écran est en 72dpi (enfin je crois) donc pour avoir une largeur de
12cm :
12cm - > 4.73" (1pouce = 2.54 cm)
4.73" x 72dpi = 340px
J'ai testé sur mon pc, ca fonctionne, je ne sais pas si des écrans ne
montent pas parfois en 96dpi, j'ai peur de dire des bétises :)


Magnifique ! J'obtiens effectivement exactement 12cm pour 340 pixels.

Merci beaucoup !!!

A bientôt pour un prochain problème :o)


Avatar
Guillaume MASSART
Bonjour !

'LargoWinch' nous a écrit ...

Ratio = 330 / L_Origine
Ca marche bien. Il n'y a qu'une chose qui me dérange, c'est le 300,
qui correspond à la largeur de l'image en *pixel*.



Non cette mesure est en points.
Vous avez plein de fonctions de conversions dans vba :

L_voulue = CentimetersToPoints(12) ' pour 12 centimètres
Ratio = L_voulue / L_origine

Anacoluthe
« L'homme se découvre quand il se mesure avec l'objet. »
- Antoine de SAINT-EXUPÉRY
effectivement, je me suis embrouillé aussi entre point pixel pouce (trop

de p)


Avatar
LargoWinch
Bonjour !

'LargoWinch' nous a écrit ...
Ratio = 330 / L_Origine
Ca marche bien. Il n'y a qu'une chose qui me dérange, c'est le 300,
qui correspond à la largeur de l'image en *pixel*.


Non cette mesure est en points.
J'appelle ca jouer sur les mots, mais bon, c'est vrai...


Vous avez plein de fonctions de conversions dans vba :

L_voulue = CentimetersToPoints(12) ' pour 12 centimètres
Ratio = L_voulue / L_origine


Nickel aussi, avec en plus une plus grande facilité de lecture.
Adopté aussi.

Plus qu'a trouver comment vérifier que la selection est bien une
image... :-)


Anacoluthe
« L'homme se découvre quand il se mesure avec l'objet. »
- Antoine de SAINT-EXUPÉRY



Avatar
Anacoluthe
Bonjour !

'LargoWinch' nous a écrit ...
qui correspond à la largeur de l'image en *pixel*.


Non cette mesure est en points.
J'appelle ca jouer sur les mots, mais bon, c'est vrai...



Non non non ça n'a rien à voir : un pixel est une unité d'image
sans dimension. Un pixel peut avoir 0,1 mm ou 10 cm c'est
toujours un pixel. Et il n'y a pas de 'virgule' de pixel
le nombre de pixel est toujours entier. Le point au contraire
est une unité de longueur comme le cm ou le pouce.
On passe du pixel à la taille par la résolution de l'image.

Plus qu'a trouver comment vérifier que la selection est bien une
image... :-)


IF Activedocument.InlineShapes(i).Type=wdInlineShapePicture Then
...
End If

Anacoluthe
« L'homme se découvre quand il se mesure avec l'objet. »
- Antoine de SAINT-EXUPÉRY



Avatar
LargoWinch
Bonjour !

'LargoWinch' nous a écrit ...
qui correspond à la largeur de l'image en *pixel*.


Non cette mesure est en points.
J'appelle ca jouer sur les mots, mais bon, c'est vrai...



Non non non ça n'a rien à voir : un pixel est une unité d'image
sans dimension.
Je suis d'accord.


Un pixel peut avoir 0,1 mm ou 10 cm c'est
toujours un pixel. Et il n'y a pas de 'virgule' de pixel
le nombre de pixel est toujours entier.
Je suis d'accord.

Par extension, tu sous-entends donc que le nombre de points d'une image
peut avoir des décimales ???

Le point au contraire
est une unité de longueur comme le cm ou le pouce.
Ah... Mon scanner a une résolution de 600 points par pouce, mon

imprimantes 1200 points par pouce. Les 2 points n'ont pas la même
taille, non ??? Bizarre pour une unité de longueur.
Je dirais plutôt que le pixel est la représentation physique du point.

On passe du pixel à la taille par la résolution de l'image.
Là je suis d'accord. Nombre de pixel * taille du point (ou du pixel) =

taille de l'image.

Mais tout cela reste de la discussion de marchand de tapis, j'en conviens.


Plus qu'a trouver comment vérifier que la selection est bien une
image... :-)


IF Activedocument.InlineShapes(i).Type=wdInlineShapePicture Then
...
End If
Merci beaucoup.


Question subsidiaire (vu qu'il y a l'air d'y avoir des cadors de Word
et/ou vba sur ce groupe que je (re)decouvre) :
Le code que j'ai donné fonctionne pour la dernière image insérée dans le
document. Je j'insère une image en milieu de document, ca ne marche plus
(vu que je travaille toujours sur la dernière image du document).

Y-a-t-il un moyen de coller une image et ensuite indiquer qu'on
travaille sur cette image ?
Ou encore, peut-on retrouver le rang d'une image lorsque celle-ci est
selectionnée (le "i" de InlineShapes(i))

Merci


Anacoluthe
« L'homme se découvre quand il se mesure avec l'objet. »
- Antoine de SAINT-EXUPÉRY





Avatar
Oliv'
*LargoWinch que je salut a écrit *:

Question subsidiaire (vu qu'il y a l'air d'y avoir des cadors de Word
et/ou vba sur ce groupe que je (re)decouvre) :
Le code que j'ai donné fonctionne pour la dernière image insérée dans
le document. Je j'insère une image en milieu de document, ca ne
marche plus (vu que je travaille toujours sur la dernière image du
document).
Y-a-t-il un moyen de coller une image et ensuite indiquer qu'on
travaille sur cette image ?
Ou encore, peut-on retrouver le rang d'une image lorsque celle-ci est
selectionnée (le "i" de InlineShapes(i))



1)la dernière image insérée n'est pas forcément la dernière en emplacement
sur le document.

2)si seule l'image est selectionnée elle devient l'unique item de
selection.inlineshapes

3)Peut-on (et comment) savoir si la selection est une image ou pas ?
...InlineShapes(i).type te donne le type de inlineshape
et si une des propriétés de inlineshapes(i).pictureformat existe c'est bien
une image.


--
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
les sites références:
Excel :http://www.excelabo.net http://xcell05.free.fr/
http://dj.joss.free.fr/
http://frederic.sigonneau.free.fr/ http://www.excel-vba-francais.com/
Word : http://faqword.free.fr/
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
OE6 : http://www.faqoe.com/
Sql : http://sqlpro.developpez.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Avatar
LargoWinch
*LargoWinch que je salut a écrit *:

Question subsidiaire (vu qu'il y a l'air d'y avoir des cadors de Word
et/ou vba sur ce groupe que je (re)decouvre) :
Le code que j'ai donné fonctionne pour la dernière image insérée dans
le document. Je j'insère une image en milieu de document, ca ne
marche plus (vu que je travaille toujours sur la dernière image du
document).
Y-a-t-il un moyen de coller une image et ensuite indiquer qu'on
travaille sur cette image ?
Ou encore, peut-on retrouver le rang d'une image lorsque celle-ci est
selectionnée (le "i" de InlineShapes(i))



1)la dernière image insérée n'est pas forcément la dernière en emplacement
sur le document.


Tout a fait, mais quand je veux récupèrer la dernière, je n'ai rien
trouvé d'autre que Last_Shape = ActiveDocument.InlineShapes.Count, ce
qui me rends la dernière du document.

2)si seule l'image est selectionnée elle devient l'unique item de
selection.inlineshapes

Donc, la syntaxe devient par exemple

selection.inlineshapes.height ?

3)Peut-on (et comment) savoir si la selection est une image ou pas ?
...InlineShapes(i).type te donne le type de inlineshape
et si une des propriétés de inlineshapes(i).pictureformat existe c'est bien
une image.


Mais comment travailler avec ?

if selection.inlineshapes(i).pictureformat then ...
if selection.inlineshapes.pictureformat then ...


Merci en tt cas


Avatar
Oliv'
*LargoWinch que je salut a écrit *:
*LargoWinch que je salut a écrit *:

Question subsidiaire (vu qu'il y a l'air d'y avoir des cadors de
Word et/ou vba sur ce groupe que je (re)decouvre) :
Le code que j'ai donné fonctionne pour la dernière image insérée
dans le document. Je j'insère une image en milieu de document, ca ne
marche plus (vu que je travaille toujours sur la dernière image du
document).
Y-a-t-il un moyen de coller une image et ensuite indiquer qu'on
travaille sur cette image ?
Ou encore, peut-on retrouver le rang d'une image lorsque celle-ci
est selectionnée (le "i" de InlineShapes(i))



1)la dernière image insérée n'est pas forcément la dernière en
emplacement sur le document.


Tout a fait, mais quand je veux récupèrer la dernière, je n'ai rien
trouvé d'autre que Last_Shape = ActiveDocument.InlineShapes.Count, ce
qui me rends la dernière du document.


Après test il semblerait que je confonde la comportement avec celui d'excel.
Word donne un index selon leur position physique dans le document.

mais après ton
Selection.Paste
un
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
te selectionnera ton image



2)si seule l'image est selectionnée elle devient l'unique item de
selection.inlineshapes

Donc, la syntaxe devient par exemple



selection.inlineshapes(1).height

3)Peut-on (et comment) savoir si la selection est une image ou pas ?
...InlineShapes(i).type te donne le type de inlineshape
et si une des propriétés de inlineshapes(i).pictureformat existe
c'est bien une image.


Mais comment travailler avec ?

par exemple à controller bien sûr


Sub toto()

Set titi = Selection
MsgBox titi.InlineShapes(1).Height
On Error GoTo pastraitement
test = titi.InlineShapes(1).PictureFormat.ColorType
'ici mon code si c'est une image
MsgBox "c'est une image"
On Error GoTo 0

pastraitement:
End Sub


--
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
les sites références:
Excel :http://www.excelabo.net http://xcell05.free.fr/
http://dj.joss.free.fr/
http://frederic.sigonneau.free.fr/ http://www.excel-vba-francais.com/
Word : http://faqword.free.fr/
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
OE6 : http://www.faqoe.com/
Sql : http://sqlpro.developpez.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



Avatar
Anacoluthe
Bonjour !

'LargoWinch' nous a écrit ...
Le point au contraire
est une unité de longueur comme le cm ou le pouce.
Ah... Mon scanner a une résolution de 600 points par pouce, mon

imprimantes 1200 points par pouce. Les 2 points n'ont pas la même
taille, non ??? Bizarre pour une unité de longueur.
Mais tout cela reste de la discussion de marchand de tapis, j'en conviens.


Vous confondez le point typographique qui est /réellement/ une unité
de longueur et le point comme compte d'unités du scanner ou de
l'imprimante. Pas tant marchand de tapis que ça : ce contresens est
fréquent et cause de fréquentes incompréhensions ici.

Question subsidiaire (vu qu'il y a l'air d'y avoir des cadors de Word
et/ou vba sur ce groupe que je (re)decouvre) :
Le code que j'ai donné fonctionne pour la dernière image insérée dans le
document. Je j'insère une image en milieu de document, ca ne marche plus
(vu que je travaille toujours sur la dernière image du document).


Vous cassez pas la tête avec Selection, à savoir si elle contient
une collection d'inlineshapes ou non : faites une macro
qui met toutes vos images à la dimension voulue et puis voilà.

Anacoluthe
« L'homme se découvre quand il se mesure avec l'objet. »
- Antoine de SAINT-EXUPÉRY


Avatar
LargoWinch
Bonjour !

'LargoWinch' nous a écrit ...
Le point au contraire
est une unité de longueur comme le cm ou le pouce.
Ah... Mon scanner a une résolution de 600 points par pouce, mon

imprimantes 1200 points par pouce. Les 2 points n'ont pas la même
taille, non ??? Bizarre pour une unité de longueur.
Mais tout cela reste de la discussion de marchand de tapis, j'en
conviens.


Vous confondez le point typographique qui est /réellement/ une unité
de longueur et le point comme compte d'unités du scanner ou de
l'imprimante.


j'aurai donc appris quelque chose aujourd'hui aussi :o)

Pas tant marchand de tapis que ça : ce contresens est
fréquent et cause de fréquentes incompréhensions ici.

Question subsidiaire (vu qu'il y a l'air d'y avoir des cadors de Word
et/ou vba sur ce groupe que je (re)decouvre) :
Le code que j'ai donné fonctionne pour la dernière image insérée dans
le document. Je j'insère une image en milieu de document, ca ne marche
plus (vu que je travaille toujours sur la dernière image du document).


Vous cassez pas la tête avec Selection, à savoir si elle contient
une collection d'inlineshapes ou non : faites une macro
qui met toutes vos images à la dimension voulue et puis voilà.


Je préfère la solution d'Oliv' ;)

Anacoluthe
« L'homme se découvre quand il se mesure avec l'objet. »
- Antoine de SAINT-EXUPÉRY

Afin d'éviter de polluer les posts, il est d'usage d'ajouter 2 tirets et

une espace avant sa signature, de sorte que les *bons* lecteurs de news
les supprime lorsqu'on répond.



1 2 3 4