OVH Cloud OVH Cloud

redimensionner image en VBA

17 réponses
Avatar
Christophe CAMPAIN
Bonjour à tous,


Y-t-il une possibilité de "retailler" (rééchantillonner) une image par VBA
de manière à adapter son poids à celui de l'affichage dans excel sans
trimbaler tout le poids de l'image d'origine?

Par avance merci pour toute information concernant les manipulations de
fichiers images sous EXCEL, VBA...

@+

Kristof

10 réponses

1 2
Avatar
Misange
Je m'avance peut être (d'autres s'empresseront de me corriger ...) mais
si excel sait faire beaucoup de choses ce n'est pas un logiciel de
traitement d'image. A la limite, il peut piloter une appli qui ferait ce
boulot. Des programmes comme photoshop (rolls mais chère) ou ACDSee
(super) permettent de faire des traitements par lot et me paraissent
autrement plus fiables pour faire ça que les prduits microsoft qui en
matière de traitement d'image ne se sont jamais illustrés !

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 02/04/2004 14:06:
Bonjour à tous,


Y-t-il une possibilité de "retailler" (rééchantillonner) une image par VBA
de manière à adapter son poids à celui de l'affichage dans excel sans
trimbaler tout le poids de l'image d'origine?

Par avance merci pour toute information concernant les manipulations de
fichiers images sous EXCEL, VBA...

@+

Kristof




Avatar
Christophe CAMPAIN
C'est trés vrais ce que tu me dis là...

En fait, c'est un problème que je rencontre de manière plus vaste : J'ai une
application Access qui entre autres chose mes en relation des fiches
d'information avec un certain nombre de "pièces jointes" (un peu à la
manière de "post it" : on va juste désigner le fichier à l'aide d'une boite
de dialogue "Ouvrir" ) dont des photos qui sont exploitées sur des états que
je transmet par mail en les exportant au format SnapShot (je n'ai pas
Acrobat distiler).
Le format SnapShot est trés bien pour ça (copie fidèle), mais ne compresse
en rien les images inclues dans les documents.
Mon problème est que je ne voudrai pas ennuyer mes utilisateurs en leur
imposant un traitement spécifique des images à chaque fois. Je voudrai un
traitement à la volée des ces images juste pour transmettre les états par
mail avec une taille acceptable (12 images d'environ 120 Ko chacune génèrent
actuellement un état de 4 pages pesant au total + de 10 Mo au format
SnapShot --> pas terrible comme résultat...).

Comme on peut faire beaucoup de choses en VBA, j'ai posé cette question sur
le forum Access ainsi que sur celui d'Excel (c'est sur celui-là que j'ai
fais mes 1ères armes en VBA : Merci à tous...) un conseil étant toujours bon
à prendre...

Cela dis, c'est vrais, Excel n'est pas fait pour ça à priori. Mais peut-être
que quelqu'un a des pistes à explorer en VBA... Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image "Light" dans ses
documents (Par n'importe quel moyen)

Toute suggestion est la bienvenue.

Merci

@+

Kristof

"Misange" a écrit dans le message de
news:
Je m'avance peut être (d'autres s'empresseront de me corriger ...) mais
si excel sait faire beaucoup de choses ce n'est pas un logiciel de
traitement d'image. A la limite, il peut piloter une appli qui ferait ce
boulot. Des programmes comme photoshop (rolls mais chère) ou ACDSee
(super) permettent de faire des traitements par lot et me paraissent
autrement plus fiables pour faire ça que les prduits microsoft qui en
matière de traitement d'image ne se sont jamais illustrés !

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 02/04/2004 14:06:
Bonjour à tous,


Y-t-il une possibilité de "retailler" (rééchantillonner) une image par
VBA


de manière à adapter son poids à celui de l'affichage dans excel sans
trimbaler tout le poids de l'image d'origine?

Par avance merci pour toute information concernant les manipulations de
fichiers images sous EXCEL, VBA...

@+

Kristof






Avatar
Clément Marcotte
Bonjour,

Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image "Light"
dans ses

documents (Par n'importe quel moyen)


À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF, je
ne vois pas trop.

Les contrôles Image et PictureBox de MS peuvent lire d'autres formats
d'image que BMP, mais exportent seulement en BMP.

Pour des contrôles ActiveX, tu peux jeter un oeil sur Telecharger.com

Il y avait bien une bibliothèque de manipulation des images JPEG chez
Intel, mais j'ai perdu la référence.

Avatar
j
- si ton image est en bmp, tu dois pouvoir bricoler un truc assez simplement
pour la convertir en jpg ou gif en utilisant export
jette déjà un oeil sur
http://jacxl.free.fr/cours_xl/cours_xl_jac.html#xl_en_gif
- ou plus simplement encore en insérant l'image dans une page excel puis en
copiant la plage correspondante avec copypicture
- si ça ne colle pas, on peut manipuler les bitmap via les API, mais c'est
un peu plus sportif...



"Christophe CAMPAIN" a écrit
dans le message de news: e$
Bonjour à tous,


Y-t-il une possibilité de "retailler" (rééchantillonner) une image par VBA
de manière à adapter son poids à celui de l'affichage dans excel sans
trimbaler tout le poids de l'image d'origine?

Par avance merci pour toute information concernant les manipulations de
fichiers images sous EXCEL, VBA...

@+

Kristof




Avatar
Christophe CAMPAIN
Bonjour à tous,

Clément,

Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX (gratuit)
nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes besoins
(redimensionnement/compression image à la volée).

Cependant, cet ActiveX est développé en VB et les exemples d'utilisation
fournis sur le site (http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA d'office. Je
ne parviens pas à le tester avec VBA.

Il n'est pas précisé où le code doit être recopier (Formulaire, module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.

Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une erreur et ne
me permet pas de tester le code veritablement. Lorsque je met les lignes de
code comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien de
rien...

Si quelqu'un connait un peu le genre de problèmes que l'on rencontre en
essayant d'adapter un code VB pour le VBA, ses conseils sont les bienvenus.

@+
Kristof

'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object

'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------


'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)

objPicture.PaintPicture Me.hDC
End If

'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True

' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)

objPicture.PaintPicture Me.hDC, 130, 0
End If

'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits

' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)

objPicture.PaintPicture Me.hDC, 260, 0
End If

' Editer un Texte
If objPicture.Create(120, 120) Then

' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)

With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")

objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font Verdana")

objPicture.PrintText "Size 10", 20, lngCurrentY

objPicture.PaintPicture Me.hDC, 390, 0
End If

' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing

lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130

Set objSample = Nothing
End If

' Libération des ressources
Set objPicture = Nothing
'------------------------------

"Clément Marcotte" a écrit dans le message
de news:%
Bonjour,

Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image "Light"
dans ses

documents (Par n'importe quel moyen)


À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF, je
ne vois pas trop.

Les contrôles Image et PictureBox de MS peuvent lire d'autres formats
d'image que BMP, mais exportent seulement en BMP.

Pour des contrôles ActiveX, tu peux jeter un oeil sur Telecharger.com

Il y avait bien une bibliothèque de manipulation des images JPEG chez
Intel, mais j'ai perdu la référence.




Avatar
Christophe CAMPAIN
Salut !

Je n'ai pas encore eu le temps de tester tes pistes, mes je m'y attèle dés
que possible...

Merci,

@+
Kristof

"" a écrit dans le message de
news:406d9129$0$12790$
- si ton image est en bmp, tu dois pouvoir bricoler un truc assez
simplement

pour la convertir en jpg ou gif en utilisant export
jette déjà un oeil sur
http://jacxl.free.fr/cours_xl/cours_xl_jac.html#xl_en_gif
- ou plus simplement encore en insérant l'image dans une page excel puis
en

copiant la plage correspondante avec copypicture
- si ça ne colle pas, on peut manipuler les bitmap via les API, mais c'est
un peu plus sportif...



"Christophe CAMPAIN" a écrit
dans le message de news: e$
Bonjour à tous,


Y-t-il une possibilité de "retailler" (rééchantillonner) une image par
VBA


de manière à adapter son poids à celui de l'affichage dans excel sans
trimbaler tout le poids de l'image d'origine?

Par avance merci pour toute information concernant les manipulations de
fichiers images sous EXCEL, VBA...

@+

Kristof








Avatar
Michel Pierron
Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long

Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub

Execute ensuite les procédures de démo souhaitées en supprimant le point dans
Me.hDC
et reviens si tu as besoin de nouvelles infos.
MP

"Christophe CAMPAIN" a écrit dans le
message de news:
Bonjour à tous,

Clément,

Je suis allé voir sur télécharger.com, et y ai trouvé un ActiveX (gratuit)
nommé VirtualPicture.
L'executable Demo de cet ActiveX semble répondre parfaitement à mes besoins
(redimensionnement/compression image à la volée).

Cependant, cet ActiveX est développé en VB et les exemples d'utilisation
fournis sur le site (http://www.alphabeta-net.com/VirtualPicture.html)
concernent l'utilisation dans un environnement VB et non VBA d'office. Je
ne parviens pas à le tester avec VBA.

Il n'est pas précisé où le code doit être recopier (Formulaire, module,
autre...) ,si on doit créer un objet VirtualPicture sur un nouveau
formulaire, comment les nommer etc.

Ce qui fait qu'en essayant de tester le code suivant, je me heurte à
l'instruction "objPicture.PaintPicture Me.hDC" où Me génère une erreur et ne
me permet pas de tester le code veritablement. Lorsque je met les lignes de
code comportant Me en commentaire, tout le reste semble fonctionner
(l'éxécution ne génère pas d'erreur) mais je ne vois absolument rien de
rien...

Si quelqu'un connait un peu le genre de problèmes que l'on rencontre en
essayant d'adapter un code VB pour le VBA, ses conseils sont les bienvenus.

@+
Kristof

'---------------------
Dim objPicture As VirtualPicture.IPicture2
Dim objSample As VirtualPicture.IPicture2
Dim lngNewHeight As Long, lngNewWidth As Long, lngCurrX As Long
Dim lngCurrentY As Long
Dim obj As Object

'-- Création d'un objet IPicture
Set obj = CreateObject("VirtualPicture.Picture")
Set objPicture = obj
Set obj = Nothing
'------------------------------


'-- Rectangles, lignes, Pixels
If objPicture.Create(120, 120) Then
' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)
Call objPicture.LineTo(0, 0, 119, 119, vbRed)
Call objPicture.Rectangle(1, 50, 10, 119, vbGreen)
Call objPicture.Rectangle(10, 25, 20, 119, vbBlue)
Call objPicture.SetPixel(119, 0, vbGreen)

objPicture.PaintPicture Me.hDC
End If

'-- Affichage aléatoire N/B
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits True

' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)

objPicture.PaintPicture Me.hDC, 130, 0
End If

'-- Affichage aléatoire Couleurs
If objPicture.Create(120, 120) Then
objPicture.RandomiseBits

' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)

objPicture.PaintPicture Me.hDC, 260, 0
End If

' Editer un Texte
If objPicture.Create(120, 120) Then

' Cadre
Call objPicture.LineTo(0, 0, 119, 0, vbBlack)
Call objPicture.LineTo(119, 0, 119, 119, vbBlack)
Call objPicture.LineTo(119, 119, 0, 119, vbBlack)
Call objPicture.LineTo(0, 119, 0, 0, vbBlack)

With objPicture.Font
.Name = "Verdana"
.Size = 10
.Color = vbRed
End Withw
objPicture.PrintText "Test", 1, 1
lngCurrentY = objPicture.TextHeight("Test")

objPicture.Font.Color = vbBlack
objPicture.Font.Bold = True
objPicture.PrintText "Font Verdana", 10, lngCurrentY
lngCurrentY = lngCurrentY + objPicture.TextHeight("Font Verdana")

objPicture.PrintText "Size 10", 20, lngCurrentY

objPicture.PaintPicture Me.hDC, 390, 0
End If

' Chargement d'une image JPEG et redimensionnement
If objPicture.LoadJPG(App.Path & "Tyra4.jpg") Then
lngNewHeight = 200
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, 0, 130
Set objSample = Nothing

lngNewHeight = 400
lngCurrX = lngNewWidth
lngNewWidth = lngNewHeight * 0.844
Set objSample = objPicture.Resample(lngNewHeight, lngNewWidth)
objSample.PaintPicture Me.hDC, lngCurrX + 10, 130

Set objSample = Nothing
End If

' Libération des ressources
Set objPicture = Nothing
'------------------------------

"Clément Marcotte" a écrit dans le message
de news:%
Bonjour,

Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image "Light"
dans ses

documents (Par n'importe quel moyen)


À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF, je
ne vois pas trop.

Les contrôles Image et PictureBox de MS peuvent lire d'autres formats
d'image que BMP, mais exportent seulement en BMP.

Pour des contrôles ActiveX, tu peux jeter un oeil sur Telecharger.com

Il y avait bien une bibliothèque de manipulation des images JPEG chez
Intel, mais j'ai perdu la référence.








Avatar
Christophe CAMPAIN
Ca y est, j'ai avancé un peu sur le sujet...

Ta solution n° 2 fonctionne trés bien. Je suis en train de la développée un
peu pour en faire profiter tout le monde.
J'ai cependant un problème de "taille" : Mon fichier excel grossi
anormalement au fur et à mesure de mes tests. Je suppose que les objets
créés images comprises sont toujours présents dans l'appli. malgrés mon
"Delete"

Voir le post " Mon fichier excel à une indigestion.. " plus haut dans le
forum.

Merci,

@+
Kristof



"" a écrit dans le message de
news:406d9129$0$12790$
- si ton image est en bmp, tu dois pouvoir bricoler un truc assez
simplement

pour la convertir en jpg ou gif en utilisant export
jette déjà un oeil sur
http://jacxl.free.fr/cours_xl/cours_xl_jac.html#xl_en_gif
- ou plus simplement encore en insérant l'image dans une page excel puis
en

copiant la plage correspondante avec copypicture
- si ça ne colle pas, on peut manipuler les bitmap via les API, mais c'est
un peu plus sportif...



"Christophe CAMPAIN" a écrit
dans le message de news: e$
Bonjour à tous,


Y-t-il une possibilité de "retailler" (rééchantillonner) une image par
VBA


de manière à adapter son poids à celui de l'affichage dans excel sans
trimbaler tout le poids de l'image d'origine?

Par avance merci pour toute information concernant les manipulations de
fichiers images sous EXCEL, VBA...

@+

Kristof








Avatar
kristof
Clément si tu es là, peux-tu reposter ton dernier message sur la façon de
faire appel à l'ActiveX dans le code VBA ?
J'ai changé de poste et certains message ont disparus ?!

Par avance merci,

Kristof

"Clément Marcotte" a écrit dans le message
news: #
Bonjour,

Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image "Light"
dans ses

documents (Par n'importe quel moyen)


À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF, je
ne vois pas trop.

Les contrôles Image et PictureBox de MS peuvent lire d'autres formats
d'image que BMP, mais exportent seulement en BMP.

Pour des contrôles ActiveX, tu peux jeter un oeil sur Telecharger.com

Il y avait bien une bibliothèque de manipulation des images JPEG chez
Intel, mais j'ai perdu la référence.




Avatar
Clément Marcotte
Bonjour,

J'ai comme l'impression que tu voulais en fait la réponse de Michel.
Voici donc les 2


La mienne:

À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF, je
ne vois pas trop.

Les contrôles Image et PictureBox de MS peuvent lire d'autres formats
d'image que BMP, mais exportent seulement en BMP.

Pour des contrôles ActiveX, tu peux jeter un oeil sur Telecharger.com

Il y avait bien une bibliothèque de manipulation des images JPEG chez
Intel, mais j'ai perdu la référence.

Celle de Michel:

Bonjour Christophe;
Dans ton module UserForm:
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private MehDC As Long

Private Sub UserForm_Activate()
MehDC = GetDC(GetActiveWindow)
End Sub

Execute ensuite les procédures de démo souhaitées en supprimant le
point dans
Me.hDC
et reviens si tu as besoin de nouvelles infos.
MP


"kristof" a écrit dans le message de
news:c4s2me$k1i$
Clément si tu es là, peux-tu reposter ton dernier message sur la
façon de

faire appel à l'ActiveX dans le code VBA ?
J'ai changé de poste et certains message ont disparus ?!

Par avance merci,

Kristof

"Clément Marcotte" a écrit dans le
message

news: #
Bonjour,

Ce que je cherche c'est une
façon transparente pour l'utilisateur d'inclure une image
"Light"



dans ses
documents (Par n'importe quel moyen)


À part que de te trouver un contrôle ActiveX qui permettrait de
redimensionner une image et/ou de la convertir en JPEG ou en GIF,
je


ne vois pas trop.

Les contrôles Image et PictureBox de MS peuvent lire d'autres
formats


d'image que BMP, mais exportent seulement en BMP.

Pour des contrôles ActiveX, tu peux jeter un oeil sur
Telecharger.com



Il y avait bien une bibliothèque de manipulation des images JPEG
chez


Intel, mais j'ai perdu la référence.








1 2