[Déplacé VB6 --> VBA] adapter la taille d'une image dans une userform

Résolu
Dylanoic Messages postés 13 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 13 octobre 2009 - 13 juil. 2009 à 13:01
Dylanoic Messages postés 13 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 13 octobre 2009 - 16 juil. 2009 à 18:07
Salut à tous,
mon problème est le suivant : je souhaite adapter la taille d'une image qui provient d'une feuille excel dans la picture d'un userform. j'arrive à l'envoyer mais elle ne veut pas se redimenssioner. Pouvez vous m'aider car je ne vois pas ce qui pose problème dans mon code ci dessous (l'erreur intervient sur les 2 dernieres lignes : objet requis).
Merci d'avance

Sub MetLimage()


Dim largeur1_dispo As Long
Dim hauteur1_dispo As Long


largeur1_dispo = interface.Image1.Width
hauteur1_dispo = interface.Image1.Height




'insertion des graphiques dans l'interface
Set LeGraph1 = Sheets("rebut ligne cis")
NomImage1 = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
LeGraph1.Export Filename:=NomImage1, FilterName:="GIF"
interface.Image1.Picture = LoadPicture(NomImage1)
NomImage1.Width = largeur1_dispo
NomImage1.Height = hauteur1_dispo

end sub

10 réponses

Dylanoic Messages postés 13 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 13 octobre 2009 1
16 juil. 2009 à 18:07
promblème résolu... et comme le dit Jack ce que je chercher à faire se trouver dans le fait de mettre la propriétés PictureSizeMode à Stretch.
Merci pour votre aide et pour ta contribution jmf0...
1
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 juil. 2009 à 13:35
Salut
NomImage1 est une chaine de caractère qui défini le chemin de ton image, pas un objet.
L'objet, c'est Image1 ou Image1.Picture
Mais bon, je ne vois pas pourquoi tu redonnes à l'image les dimensions qu'elle connait déjà.

Voir propriété PictureSizeMode de l'objet Image

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Dylanoic Messages postés 13 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 13 octobre 2009 1
13 juil. 2009 à 13:58
euhh non elle ne connais pas les dimensions qu'elle doit avoir. L'image doit apparaitre dans mon userform, ce qui se passe pour le moment c'est qu'elle apparait mais avec des dimensions trop grande pour l'affichage dans le "picture" de l'userform. J'aurais voulu qu'elle s'adapte a la place dont elle dispose dans cette userform (largeur_dispo et hauteur_dispo).
Je vais voir le PictureSizeMode.
Merci.
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
13 juil. 2009 à 15:26
D'où l'intérêt de poser une question avec précision ...
La propriété PictureSizeMode est en effet à utiliser, mais pas uniquement
Il va au préalable falloir que tu fasses un petit calcul arithmétique pour déterminer les dimensions optimales (en fonction de celles de ta UserForm) pour conserver les proportions hauteur/largeur (mais ce n'est là que de l'arithmétique
.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dylanoic Messages postés 13 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 13 octobre 2009 1
14 juil. 2009 à 13:36
Bonjour,
je ne vois pas pourquoi je devrais déterminer les dimensions optimales car la largeur_dispo et la hauteur_dispo sont connu.es.. Il faut juste que l'image que j'envoie dedans prenne ses valeurs (qu'elle se redimenssionne). Pour moi, c'est bien le probleme de trouver quelle objet mettre devant width et height des 2 dernières lignes. Mais j'ai tout essayer sans résultats (LeGraph1, Image1...).
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
14 juil. 2009 à 19:10
Je suis désolé pour toi, mais j'insiste sur ce que je t'ai exposé.
Tout autre procédé d'étirement sans ce calcul arithmétique préalable conduirait inévitablement, si le rapport hauteur/largeur de ta photo n'est pas égal à celui de ton écran, à une distorsion de l'image !
Veux-tu bien réaliser que tu peux avoir :
- un écran plus large que haut - un écran plus haut que large, etc ...
- une image plus haute que large - une image plus large que haute, etc...

Prends une feuille de papier et tu comprendras vite ...
0
Dylanoic Messages postés 13 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 13 octobre 2009 1
14 juil. 2009 à 19:29
wiii, je suis bien conscient que ces variations sont à prendre en compte mais il ne s'agit pas d'envoyer une image sur tout mon userform mais seulement dans l'espace picture qui lui est associé... En effet, j'ai 9 image différentes qui s'afficheront sur des parties différentes de l'userform. Le problème n'a donc rien a voir avec la taille de l'écran mais plutot avec la taille des pictures dans mon userform... Pour eviter le problème d'applatissement ou d'étirement, j'ai tt simplement préétabli les dimensions largeur_dispo et hauteur_dispo de chaque picture de mon userfom...cela leur donnera un format 4/3 environ...
Je vais me renseigner et faire quelques test sur ce que tu me conseil ;)
merci

voici le code pour le moment...

Public LeGraph1
Public LeGraph2
Public LeGraph3
Public LeGraph4
Public LeGraph5
Public LeGraph6
Public LeGraph7
Public LeGraph8
Public LeGraph9

Sub MetLimage()


Dim largeur1_dispo As Long
Dim hauteur1_dispo As Long


largeur1_dispo = interface.Image1.Width
hauteur1_dispo = interface.Image1.Height




'insertion des graphiques dans l'interface
Set LeGraph1 = Sheets("rebut ligne cis")
NomImage1 = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
LeGraph1.Export Filename:=NomImage1, FilterName:="GIF"
interface.Image1.Picture = LoadPicture(NomImage1)
'NomImage1.Width = largeur1_dispo
'NomImage1.Height = hauteur1_dispo




Set LeGraph2 = Sheets("rebut ligne retr")
NomImage2 = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
LeGraph2.Export Filename:=NomImage2, FilterName:="GIF"
interface.Image2.Picture = LoadPicture(NomImage2)


Set LeGraph3 = Sheets("rebut ligne moul")
NomImage3 = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
LeGraph3.Export Filename:=NomImage3, FilterName:="GIF"
interface.Image3.Picture = LoadPicture(NomImage3)


Set LeGraph4 = Sheets("rebut ligne sert")
NomImage4 = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
LeGraph4.Export Filename:=NomImage4, FilterName:="GIF"
interface.Image4.Picture = LoadPicture(NomImage4)


Set LeGraph5 = Sheets("rebut ligne testeur")
NomImage5 = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
LeGraph5.Export Filename:=NomImage5, FilterName:="GIF"
interface.Image5.Picture = LoadPicture(NomImage5)


'Set LeGraph6 = Worksheets("Feuil2").ChartObjects(6).Chart
'NomImage6 = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
'LeGraph6.Export Filename:=NomImage6, FilterName:="GIF"
'interface.Image6.Picture = LoadPicture(NomImage6)


Set LeGraph7 = Sheets("rebut ligne total")
NomImage7 = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
LeGraph7.Export Filename:=NomImage7, FilterName:="GIF"
interface.Image7.Picture = LoadPicture(NomImage7)


'Set LeGraph8 = Worksheets("Feuil2").ChartObjects(8).Chart
'NomImage8 = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
'LeGraph8.Export Filename:=NomImage8, FilterName:="GIF"
'interface.Image8.Picture = LoadPicture(NomImage8)


'Set LeGraph9 = Worksheets("Feuil2").ChartObjects(9).Chart
'NomImage9 = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"
'LeGraph9.Export Filename:=NomImage9, FilterName:="GIF"
'interface.Image9.Picture = LoadPicture(NomImage9)




   
End Sub
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
14 juil. 2009 à 21:51
Qu'il s'agisse de ton Userform ou qu'il s'agisse d'un "espace réservé à cet effet sur ton Userform" , le problème est exactement le même et passe par un calcul arithmétique (et le même) , ami !
Bref...

Bonne chance ...
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
14 juil. 2009 à 21:58
Juste un truc, alors (qui n'a rien à voir avec la connaissance d'un langage informatique, mais tout avec la jugeote) :
Réserve des espaces carrés et utilise-les au maximum en :
occupant la largeur maximum (si ton image est plus large que hauteà ou la hauteur maximum (si ton image est plus haute que large) et en calculant l'autre dimension par application d'un coefficient permettant de conserver les proportions.
Le tout en utilisant la propriété (dont tu as toi-même parléà permettant 'ajustement par étirement.
Si tout cela reste pour toi du chinois, n'en parlons plus ...
0
Dylanoic Messages postés 13 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 13 octobre 2009 1
15 juil. 2009 à 00:55
Je te remercie et je vais pousser un peu plus mon raisonnement dans ton sens...
Je me suis certainement borné à faire ce truc avec des outils qui ne sont pas adaptés (mais a force d'être dessus, on a du mal a prendre du recul ^^).
Bonne soirée a vous tous.
0
Rejoignez-nous