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 :

Dimensionnement d'un UserForm


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut Dimensionnement d'un UserForm
    Bonjour à tous,
    J'ai créé une macro qui me calcule l'avancement d'un projet et qui génère une courbe que j'affiche dans un Userform.
    Je génère ma courbe sur un onglet, je l'enregistre au format au format JPG et l'affiche dans mon UserForm nommé Graph1.
    Voici les codes:
    Le code qui génère la courbe et la dimensionne sur ma feuille Excel
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Sub Curve_Actual()
    
                Dim Curve As Worksheet
                Set Curve = ThisWorkbook.Sheets("Curve")
                Dim Grph As ChartObjects
                Dim Emplacement As Range
                Dim G As Integer
                Set Grph = Curve.ChartObjects()
                Set Emplacement = Range("B2:P38")
                Curve.Select
                G = ActiveSheet.ChartObjects.Count
                If G > 0 Then
                ActiveSheet.ChartObjects(G).Delete
                End If
                ActiveSheet.Shapes.AddChart.Select
                ActiveChart.ChartType = xlLine
                ActiveChart.SeriesCollection.NewSeries
                ActiveChart.SeriesCollection(1).Name = "=""Cum. Planned"""
                ActiveChart.SeriesCollection(1).Values = "=Data!$J$8:$BZ$8"
                ActiveChart.SeriesCollection(1).XValues = "=Data!$J$6:$BZ$6"
                ActiveChart.SeriesCollection.NewSeries
                ActiveChart.SeriesCollection(2).Name = "=""Cum. Actual"""
                ActiveChart.SeriesCollection(2).Values = "=Data!$J$14:$BZ$14"
                ActiveChart.SeriesCollection.NewSeries
                ActiveChart.SeriesCollection(3).Name = "=""Cum. Forecast"""
                ActiveChart.SeriesCollection(3).Values = "=Data!$J$20:$BZ$20"
                ActiveChart.SeriesCollection.NewSeries
                ActiveChart.SeriesCollection(4).Name = "=""Planned"""
                ActiveChart.SeriesCollection(4).Values = "=Data!$J$7:$BZ$7"
                ActiveChart.SeriesCollection(4).AxisGroup = 2
                ActiveChart.SeriesCollection.NewSeries
                ActiveChart.SeriesCollection(5).Name = "=""Actual"""
                ActiveChart.SeriesCollection(5).Values = "=Data!$J$13:$BZ$13"
                ActiveChart.SeriesCollection(5).AxisGroup = 2
                ActiveChart.SeriesCollection.NewSeries
                ActiveChart.SeriesCollection(6).Name = "=""Forecast"""
                ActiveChart.SeriesCollection(6).Values = "=Data!$J$19:$BZ$19"
                ActiveChart.SeriesCollection(6).AxisGroup = 2
                ActiveChart.Axes(xlValue).Select
                ActiveChart.Axes(xlValue).MaximumScale = 1
                ActiveChart.ChartGroups(2).GapWidth = 0
                ActiveChart.SeriesCollection(4).ChartType = xlColumnClustered
                ActiveChart.SeriesCollection(5).ChartType = xlColumnClustered
                ActiveChart.SeriesCollection(6).ChartType = xlColumnClustered
                ActiveChart.Axes(xlCategory).TickLabels.NumberFormat = "[$-409]mmm-yy;@"
             
                With Grph
                .Left = Emplacement.Left
                .Top = Emplacement.Top
                .Height = Emplacement.Height
                .Width = Emplacement.Width
                End With
             
               
                data_to_export 'launch the next step
    End Sub
    Le code qui enregistre la courbe:
    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
    Sub Record_Graph()
    Dim Grph As Chart
    Dim Curve As Worksheet
    Set Curve = ThisWorkbook.Sheets("Curve")
    Dim Analys As Worksheet
    Dim Anls As Range
    Dim Directory As String
    Directory = ThisWorkbook.Path
    Set Analys = ThisWorkbook.Sheets("Analysis")
    Set Anls = Analys.Range("J3")
    Anls = Anls.Offset(0)
           Graph1.Label1.Caption = "Contract Amount : " & Format(Anls.Offset(0, 0).Value, "$ #,##0")
           Graph1.Label2.Caption = "% Planned : " & Format(Anls.Offset(1, 0).Value, "0.00%")
           Graph1.Label3.Caption = "% Actual : " & Format(Anls.Offset(2, 0).Value, "0.00%")
           Graph1.Label4.Caption = "% Cum. Planned : " & Format(Anls.Offset(3, 0).Value, "0.00%")
           Graph1.Label5.Caption = "% Cum. Actual : " & Format(Anls.Offset(4, 0).Value, "0.00%")
           Graph1.Label6.Caption = "Planned Cum. Cost : " & Format(Anls.Offset(5, 0).Value, "$ #,##0")
           Graph1.Label7.Caption = "Actual Cum. Cost : " & Format(Anls.Offset(6, 0).Value, "$ #,##0")
    Set Grph = Curve.ChartObjects(1).Chart
    Grph.Export Filename:=Directory & "\" & "Graph_Curve.jpg", filtername:="JPG"
    Show_Picture
    End Sub
    Enfin le code pour l'afficher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Show_Picture()
    Dim Directory As String
    Directory = ThisWorkbook.Path
    Dim Fichier As String
    Dim Picture As StdPicture
    Fichier = Directory & "\" & "Graph_Curve.jpg"
    Graph1.Image1.Picture = LoadPicture(Fichier)
    Graph1.Show
     
    End Sub
    J'ai adapté le code pour un projet différent, l'échelle de temps de ma courbe est à présent plus importante.
    Lorsque que je fais apparaitre mon UserForm voici le résultat:

    Nom : Résultat Affichage.jpg
Affichages : 369
Taille : 63,8 Ko

    La courbe qui est générée sur l'onglet Excel est elle même plus grande que la taille que j'ai défini dans le code.

    Si l'on regarde la mise en forme de l'UserForm dans l'éditeur de Macros, on peut voir que j'ai mis une marge suffisante à droite de l'image.

    Nom : Dimension User Form.jpg
Affichages : 326
Taille : 63,9 Ko

    Voici les dimension de mon UserForm :
    hauteur : 794,25
    largeur : 1111.5

    Voici ma question:
    Comment faire pour la dimension de ma courbe soit respectée?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set Emplacement = Range("B2:P38")
    Comment faire pour que la taille de mon UserForm soit également respectée?

    Merci pour vos conseils et votre collaboration

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    définis ton image comme "autodimentionable"!
    quand tu charge une image elle ce dimensionner automatiquement tu peux donc adapter ta USF à cette nouvelle taille!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Fichier = Directory & "\" & "Graph_Curve.jpg"
    Graph1.Image1.Picture = LoadPicture(Fichier)
     
    Graph1.Height =Graph1.Image1.Height
    Graph1.Width = Graph1.Image1.Width
    Images attachées Images attachées   

  3. #3
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour Robert,
    Merci pour ta proposition, cela résout mon problème, j'ai simplement du ajouter un coefficient multiplicateur pour que cela colle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Graph1.Height = (Graph1.Image1.Height) * 1.35
    Graph1.Width = (Graph1.Image1.Width) * 1.025
    Nom : Résultat Affichage après forçage dimension.jpg
Affichages : 317
Taille : 35,0 Ko
    Encore merci
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  4. #4
    Invité
    Invité(e)
    Par défaut
    ceci dit, ça t'oblige à redisposer le contrôles si il en a avec l’événement UserForm_Resize

    tu peux opter pour l'option qui dit que l'image prend tout la place qu'on lui donne pas plus pas moins!
    Images attachées Images attachées    

  5. #5
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Rebonjour,
    J'ai effectivement du repositionner les autres éléments de l'Userform mais cela n'a pas été long.
    J'ai essayé l'option PictureSizeMode, mais cela n'a rien changé, peut-être lorsque ma courbe changera encore sur un autre projet ?
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  6. #6
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Salut

    Avec quelle valeur du PictureSizeMode ? fmPictureSizeModeZoom ?
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  7. #7
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour,
    J'ai utilisé l'option 1 : fmPictureSizeModeStrectch comme le recommandais Robert, je vais essayer avec l'option 3 : fmPictureSizeModeZoom
    Eric

    NVCfrm,
    Je n'ai pas observé de changements notables, quels devraient-ils être ?
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  8. #8
    Invité
    Invité(e)
    Par défaut
    réduit la taille du contrôle image de façon significative pour voir le différence!

    poste #4 y a pas photo! ou si au contraire!

  9. #9
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par eric4459 Voir le message
    NVCfrm,
    Je n'ai pas observé de changements notables, quels devraient-ils être ?
    Eric
    Comme on peut deviner fmPictureSizeModeZoom fait un zoom correspondant aux proportions du conteneur. En d'autres termes une résolution qui reduit en long et en large de manière égale pour tenir dans ton cadre.

    Suppose une image de 500 X 1000
    Un cadre de 500 X 500. L'image est réduite à 250 X 500.
    Inversement pour un cadre de 1000 X 1500. L'image est agrandi a 1000 X 1500.

    La difference avec fmPictureSizeModeStrectch est que l'image n'est pas déformée (étirement) vers un côté pour tenir.
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

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

Discussions similaires

  1. [XL-2010] Dimensionnement de variables avec un userform récurrent
    Par jmh51 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/08/2014, 17h02
  2. [XL-2007] Dimensionner un Userform
    Par eliot.raymond dans le forum Macros et VBA Excel
    Réponses: 52
    Dernier message: 15/01/2014, 18h08
  3. Dimensionnement de la fenetre excel derrière un userform
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/09/2008, 12h54
  4. Dimensionnement du serveur ?
    Par foste dans le forum Access
    Réponses: 5
    Dernier message: 21/05/2003, 13h22
  5. Re-dimensionnement automatique de composants
    Par ludo_7 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/05/2002, 16h35

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