Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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
Guillaume MASSART
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
avant de redimensionner, tu peux toujours sauvegarder le ratio. Sauf si

tu as un écran 16/9e le rapport est toujours 4/3.

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
avant de redimensionner, tu peux toujours sauvegarder le ratio. Sauf si

tu as un écran 16/9e le rapport est toujours 4/3.


Oui mais non, car je ne prends que des parties d'écran (je qualifie une
appli web et ne prends que les parties de l'écran m'intéressant pour
constituer le dossier de qualification). Donc j'aurais une fois une
copie (par exemple) d'une zone de 20x15 cm, la fois suivante de 20x5, la
suivante de 15x10, que je veux ramener en 15x(15/?), 20x(5/??) et
15x(10/???).

Je voulais évidemment éviter d'avoir a faire ce calcul...


Avatar
Guillaume MASSART


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


avant de redimensionner, tu peux toujours sauvegarder le ratio. Sauf
si tu as un écran 16/9e le rapport est toujours 4/3.



Oui mais non, car je ne prends que des parties d'écran (je qualifie une
appli web et ne prends que les parties de l'écran m'intéressant pour
constituer le dossier de qualification). Donc j'aurais une fois une
copie (par exemple) d'une zone de 20x15 cm, la fois suivante de 20x5, la
suivante de 15x10, que je veux ramener en 15x(15/?), 20x(5/??) et
15x(10/???).

Je voulais évidemment éviter d'avoir a faire ce calcul...
il y a une propriété "LockAspectRatio" pour les inlineshape shape et

shaperange
Je pense que inlineshape doit fonctionner pour les images collées
(insérer en tant que texte)



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


avant de redimensionner, tu peux toujours sauvegarder le ratio. Sauf
si tu as un écran 16/9e le rapport est toujours 4/3.



Oui mais non, car je ne prends que des parties d'écran (je qualifie
une appli web et ne prends que les parties de l'écran m'intéressant
pour constituer le dossier de qualification). Donc j'aurais une fois
une copie (par exemple) d'une zone de 20x15 cm, la fois suivante de
20x5, la suivante de 15x10, que je veux ramener en 15x(15/?),
20x(5/??) et 15x(10/???).

Je voulais évidemment éviter d'avoir a faire ce calcul...
il y a une propriété "LockAspectRatio" pour les inlineshape shape et

shaperange
Je pense que inlineshape doit fonctionner pour les images collées
(insérer en tant que texte)


Je n'y arrive pas pas là, j'ai donc essayé autrement.

Voilà ce que j'ai codé :

Sub Reduction_Image()
Dim H_Origine, L_Origine, Last_Shape, Ratio

Selection.Paste
Last_Shape = ActiveDocument.InlineShapes.Count
H_Origine = ActiveDocument.InlineShapes(Last_Shape).Height
L_Origine = ActiveDocument.InlineShapes(Last_Shape).Width

Ratio = 330 / L_Origine
With ActiveDocument.InlineShapes(Last_Shape)
.Height = H_Origine * Ratio
.Width = L_Origine * Ratio
End With
ActiveDocument.InlineShapes(Last_Shape).Select
End Sub

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




Avatar
Guillaume MASSART
Je n'y arrive pas pas là, j'ai donc essayé autrement.

Voilà ce que j'ai codé :

Sub Reduction_Image()
Dim H_Origine, L_Origine, Last_Shape, Ratio

Selection.Paste
Last_Shape = ActiveDocument.InlineShapes.Count
H_Origine = ActiveDocument.InlineShapes(Last_Shape).Height
L_Origine = ActiveDocument.InlineShapes(Last_Shape).Width

Ratio = 330 / L_Origine
With ActiveDocument.InlineShapes(Last_Shape)
.Height = H_Origine * Ratio
.Width = L_Origine * Ratio
End With
ActiveDocument.InlineShapes(Last_Shape).Select
End Sub

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
Tu ne peux pas faire un

With ActiveDocument.InlineShapes(Last_Shape)
.LockAspectRatio=true (ou msoCTrue si j'en crois l'explorateur
object)
.Width = 330
End With
J'avoue ne pas avoir essayé

Avatar
Guillaume MASSART




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



avant de redimensionner, tu peux toujours sauvegarder le ratio. Sauf
si tu as un écran 16/9e le rapport est toujours 4/3.




Oui mais non, car je ne prends que des parties d'écran (je qualifie
une appli web et ne prends que les parties de l'écran m'intéressant
pour constituer le dossier de qualification). Donc j'aurais une fois
une copie (par exemple) d'une zone de 20x15 cm, la fois suivante de
20x5, la suivante de 15x10, que je veux ramener en 15x(15/?),
20x(5/??) et 15x(10/???).

Je voulais évidemment éviter d'avoir a faire ce calcul...


il y a une propriété "LockAspectRatio" pour les inlineshape shape et
shaperange
Je pense que inlineshape doit fonctionner pour les images collées
(insérer en tant que texte)



Je n'y arrive pas pas là, j'ai donc essayé autrement.

Voilà ce que j'ai codé :

Sub Reduction_Image()
Dim H_Origine, L_Origine, Last_Shape, Ratio

Selection.Paste
Last_Shape = ActiveDocument.InlineShapes.Count
H_Origine = ActiveDocument.InlineShapes(Last_Shape).Height
L_Origine = ActiveDocument.InlineShapes(Last_Shape).Width

Ratio = 330 / L_Origine
With ActiveDocument.InlineShapes(Last_Shape)
.Height = H_Origine * Ratio
.Width = L_Origine * Ratio
End With
ActiveDocument.InlineShapes(Last_Shape).Select
End Sub

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
sinon il y a cette solution :

Sub Reduction_Image()
Dim H_Origine, L_Origine, Last_Shape, Ratio
Selection.Paste
Last_Shape = ActiveDocument.InlineShapes.Count
' H_Origine = ActiveDocument.InlineShapes(Last_Shape).Height
' L_Origine = ActiveDocument.InlineShapes(Last_Shape).Width
'
' Ratio = 330 / L_Origine
With ActiveDocument.InlineShapes(Last_Shape)
.Width = 330
.ScaleHeight = .ScaleWidth
End With
ActiveDocument.InlineShapes(Last_Shape).Select
End Sub





Avatar
Guillaume MASSART

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)
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 :)

Avatar
LargoWinch

Je n'y arrive pas pas là, j'ai donc essayé autrement.

Voilà ce que j'ai codé :

Sub Reduction_Image()
Dim H_Origine, L_Origine, Last_Shape, Ratio

Selection.Paste
Last_Shape = ActiveDocument.InlineShapes.Count
H_Origine = ActiveDocument.InlineShapes(Last_Shape).Height
L_Origine = ActiveDocument.InlineShapes(Last_Shape).Width

Ratio = 330 / L_Origine
With ActiveDocument.InlineShapes(Last_Shape)
.Height = H_Origine * Ratio
.Width = L_Origine * Ratio
End With
ActiveDocument.InlineShapes(Last_Shape).Select
End Sub

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
Tu ne peux pas faire un

With ActiveDocument.InlineShapes(Last_Shape)
.LockAspectRatio=true (ou msoCTrue si j'en crois l'explorateur
object)
.Width = 330
End With
J'avoue ne pas avoir essayé


Effectivement, ca a l'air très simple, mais ca ne marche pas :

- avec True, la hauteur ne bouge pas
- avec msoCTrue, ca plante


Mais cela ne répond pas à mon souhait de ficer la taille en cm ;)

Pas possible ?

De même, si je lance la macro alors que le contenu du presse-papier
n'est pas une image, j'ai une erreur de la macro.
Peut-on (et comment) savoir si la selection est une image ou pas ? Les
méthodes genre Type ou Information ne semble pas répondre à la question...

Merci.


Avatar
Anacoluthe
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

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



avant de redimensionner, tu peux toujours sauvegarder le ratio.
Sauf si tu as un écran 16/9e le rapport est toujours 4/3.




Oui mais non, car je ne prends que des parties d'écran (je qualifie
une appli web et ne prends que les parties de l'écran m'intéressant
pour constituer le dossier de qualification). Donc j'aurais une fois
une copie (par exemple) d'une zone de 20x15 cm, la fois suivante de
20x5, la suivante de 15x10, que je veux ramener en 15x(15/?),
20x(5/??) et 15x(10/???).

Je voulais évidemment éviter d'avoir a faire ce calcul...


il y a une propriété "LockAspectRatio" pour les inlineshape shape et
shaperange
Je pense que inlineshape doit fonctionner pour les images collées
(insérer en tant que texte)



Je n'y arrive pas pas là, j'ai donc essayé autrement.

Voilà ce que j'ai codé :

Sub Reduction_Image()
Dim H_Origine, L_Origine, Last_Shape, Ratio

Selection.Paste
Last_Shape = ActiveDocument.InlineShapes.Count
H_Origine = ActiveDocument.InlineShapes(Last_Shape).Height
L_Origine = ActiveDocument.InlineShapes(Last_Shape).Width

Ratio = 330 / L_Origine
With ActiveDocument.InlineShapes(Last_Shape)
.Height = H_Origine * Ratio
.Width = L_Origine * Ratio
End With
ActiveDocument.InlineShapes(Last_Shape).Select
End Sub

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
sinon il y a cette solution :

Sub Reduction_Image()
Dim H_Origine, L_Origine, Last_Shape, Ratio
Selection.Paste
Last_Shape = ActiveDocument.InlineShapes.Count
' H_Origine = ActiveDocument.InlineShapes(Last_Shape).Height
' L_Origine = ActiveDocument.InlineShapes(Last_Shape).Width
'
' Ratio = 330 / L_Origine
With ActiveDocument.InlineShapes(Last_Shape)
.Width = 330
.ScaleHeight = .ScaleWidth
End With
ActiveDocument.InlineShapes(Last_Shape).Select
End Sub


Ca, effectivement, ca marche. Adopté :-)






1 2 3 4