IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ajuster la taille d'un graphique à une zone image Userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Apprenti ingénieur en mécanique aéronautique
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingénieur en mécanique aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Par défaut Ajuster la taille d'un graphique à une zone image Userform
    Bonjour à tous,

    J'ai le même soucis que fowlie dans cette discussion. J'aimerai ajuster la taille d'un graphique à une zone image localisée dans un Userform. Je ne sais pas si une solution a été trouvée depuis que le sujet à été ouvert.
    J'ai également testé la méthode du LoadPicture, mais c'était trop beau pour être vrai, dommage ...
    Existe-t'il une méthode permettant, par exemple, de détecter le Height & Width d'une zone image et de l'appliquer à un graphique ?
    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Il faut d'abord expporter le graphique comme une image (JPG ou autre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.Export "c:\temp\temp.jpg", "JPG"
    Ensuite, il faut charger l'image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UserForm1.Image1.Picture = LoadPicture("c:\temp\temp.jpg")
    UserForm1.Image1.PictureSizeMode = fmPictureSizeModeZoom

  3. #3
    Membre averti
    Homme Profil pro
    Apprenti ingénieur en mécanique aéronautique
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingénieur en mécanique aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Par défaut
    Merci de votre réponse rapide.
    Effectivement la ligne "UserForm1.Image1.PictureSizeMode = fmPictureSizeModeZoom" n'était pas présente dans mon code, et je l'ai insérée.
    Malgré cela, l'image ne s'adapte pas du tout au format du Userform, voir image ci dessous:

    Nom : 25-09-2014 10-12-52.png
Affichages : 2751
Taille : 124,6 Ko

    Existe-t'il une autre solution ?

    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    L'image s'adapte au format du contrôle "Image". Je ne puis rien déduire de ta pièce jointe, ne sachant pas où se situe le contrôle image. Essaie les autres constantes de PictureSizeMode : fmPictureSizeModeClip et fmPictureSizeModeStretch.

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fmPictureSizeModeStretch.
    adapte l'image au control image de l'userform (attention proportions non gardées)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre averti
    Homme Profil pro
    Apprenti ingénieur en mécanique aéronautique
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingénieur en mécanique aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Par défaut
    Voici le bout de code que j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            Set Ch = MonChart(Worksheets("AnalyseEpaisseurs"))
            If Not Ch Is Nothing Then
                NomImage = ThisWorkbook.Path & Application.PathSeparator & "Graph1.gif"
                Ch.Export Filename:=NomImage, FilterName:="GIF"
                Me.Image4.Picture = LoadPicture(NomImage)
                UserForm7.Image4.PictureSizeMode = fmPictureSizeModeZoom
                Set Ch = Nothing
                Kill NomImage
            End If
    Quelque chose ne vas pas ?

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UserForm7.Image4.PictureSizeMode = fmPictureSizeModeStretch
    et supprime :

    c'est de la violence inutile.

  8. #8
    Membre averti
    Homme Profil pro
    Apprenti ingénieur en mécanique aéronautique
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingénieur en mécanique aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Par défaut
    Ok merci pour ces réponses. le fmPictureSizeModeStretch fonctionne, malgré la déformation de l'image d'origine ...
    Il n'existe aucun moyen d'appliquer une taille précise à une image (longueur, largeur) ???
    J'ai trouvé un outil permettant d'augmenter l'échelle de l'image, mais cela ne correspond pas du tout à mon besoin.

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Soit tu déformes ton image pour remplir le contrôle image, soit tu le remplis au mieux sans déformation, soit tu ne fais pas de changement de taille. Quel est ton problème ?

  10. #10
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonjour

    On peut redimensionner l'image qui est enregistrer en c:\temp, ainsi lors de son insertion dans le userform, elle est au dimension voulue.
    Dites moi si cette piste vous interesse et donner moi les dimensions de l'image (hauteur, largeur en pixel)

    Finalement, en gardant votre bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    'Necessite l'activation de la reference microsoft Windows Image File Automation V2.00
    Dim Img As WIA.ImageFile, IP As WIA.Imageprocess
    Dim Ch As Variant
    Dim Largeur As Single, Hauteur As Single
    Dim Nomimage As String
     
    Set Ch = MonChart(Worksheets("AnalyseEpaisseurs"))
            If Not Ch Is Nothing Then
                Nomimage = ThisWorkbook.Path & Application.PathSeparator & "Graph1.gif"
     
    Largeur = UserForm7.Image4.Width
    Hauteur = UserForm7.Image4.Height
    Set Img = CreateObject("WIA.ImageFile")    'Création conteneur pour l'image à manipuler
    Set IP = CreateObject("WIA.ImageProcess") 'Création du gestionnaire de filtre
    Img.LoadFile Nomimage
    IP.Filters.Add IP.FilterInfos("Scale").FilterID 'Ajoute le filtre pour redimensionner l'image (Scale)
    IP.Filters(1).Properties("MaximumWidth") = Largeur 'Définit la largeur
    IP.Filters(1).Properties("MaximumHeight") = Hauteur 'Définit la hauteur
    Set Img = IP.Apply(Img)
     
                Ch.Export Filename:=Nomimage, FilterName:="GIF"
                Me.Image4.Picture = LoadPicture(Nomimage)
                UserForm7.Image4.PictureSizeMode = fmPictureSizeModeZoom
                Set Ch = Nothing
            End If
     
    Set Img = Nothing
    je n'était pas sur que le gif soit traiter

  11. #11
    Membre averti
    Homme Profil pro
    Apprenti ingénieur en mécanique aéronautique
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingénieur en mécanique aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Par défaut
    Daniel.C:

    Le problème est que cette macro est commune à plusieurs dizaines de fichiers Excel répartis à divers endroits sur un serveur.
    Certains de ces fichiers ont plusieurs années, et les graphiques dans ces fichiers n'ont pas forcément les mêmes dimensions,
    de plus, la macro a pas mal évoluée durant tout ce temps.
    Du coup, au lieu de changer manuellement la taille des graphiques pour chaque fichier, il est plus aisé de modifier automatiquement leurs taille par macro.
    Le mode "fmPictureSizeModeStretch" est une solution, mais déforme fortement certains graphiques et peut rendre le post-traitement des résultats des graphiques difficile.

    Keygen08:

    Merci pour cette proposition.
    Vous expliquez qu'il faut activer une référence "Windows Image File Automation V2.00".
    Ce choix est disponible dans "Outil\Références..." je suppose ?
    Si c'est le cas, je ne le trouve pas. Faut-il installer quelque chose de particulier ?

    Merci.

  12. #12
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Si Windows file automation n'est pas dispo, il faut effectivement l'installer.
    Tout depend de la configuration, mais y compris sur Windows serveur 2008, cela fonctionne.
    Je l'avais installé sur mon serveur, mais comment ai-je fait ????
    Windows file automation permet simplement de manipuler les images au travers de Paint.
    je regarde et vous dit quoi.

    peut etre par passant par outils reference, parcourir et rechercher WIAAUT.DLL
    Chez moi (mon serveur), cette dll se trouve dans Windows/system32
    La reference activé elle porte le nom Microsoft Windows image acquisition Library v2.0
    mon code datant de XP, le nom a changé en meme temps que les version de Windows.

    http://silkyroad.developpez.com/VBA/...geAcquisition/

  13. #13
    Membre averti
    Homme Profil pro
    Apprenti ingénieur en mécanique aéronautique
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingénieur en mécanique aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Par défaut
    Merci beaucoup, cela fonctionne !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/04/2014, 20h54
  2. Ajuster la taille d'un graphique en fonction de son contenu
    Par _developpeur_ dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 02/05/2012, 14h45
  3. [AC-2007] ajuster la taille du texte dans une zone de texte
    Par quidoz dans le forum IHM
    Réponses: 1
    Dernier message: 01/12/2009, 14h07
  4. Ajuster la taille colonne calculée d'une table
    Par Deciprog dans le forum SAS Base
    Réponses: 3
    Dernier message: 17/11/2008, 17h18
  5. Taille police maximum dans une zone
    Par charliejo dans le forum IHM
    Réponses: 10
    Dernier message: 10/10/2007, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo