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 en fonction de son contenu


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut Ajuster la taille d'un graphique en fonction de son contenu
    Bonjour,

    j'ai une macro qui crée sur une feuille des graphiques.

    je peux avoir plusieurs graphique horizontalement et verticalement.

    J'ajuste le graphique avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                Set gGraphique = Worksheets(sNomFeuille).ChartObjects.Add(100, 100, 100, 100)
     
                gGraphique.Chart.ChartType = xlLineMarkers
                gGraphique.Chart.SetSourceData source:=Sheets(sNomFeuille).Range(sDebutRange & ":" & sFinRange), PlotBy:= _
                    xlRows
                gGraphique.Chart.Location Where:=xlLocationAsObject, Name:=sNomFeuille
                'gGraphique.Left = Worksheets(sNomFeuille).Columns(iColFinPlage).Left
                'gGraphique.Top = Worksheets(sNomFeuille).Rows(iLigneDebutPlage).Top
                gGraphique.Left = Worksheets(sNomFeuille).Columns(iColDebutPlage).Left
                gGraphique.Top = Worksheets(sNomFeuille).Rows(iLigneFinPlage + 2).Top
     
                gGraphique.Width = Range(sDebutRange & ":" & sFinRange).Width
                gGraphique.Height = 130
    Pour le moment les graph sont ajustés par rapport au tableau source de donnée.

    Cependant, je viens de me rendre compte que parfois quand j ai beaucoup de données le graphique n'affiche pas tout. il faut le redimmensionner à la main ce qui n'est pas correct.

    Il me faudrait une méthode qui permette d'ajuster automatiquement la taille des graph mais ensuite il faut que par rapport a cette taille je puisse continuer a créer des graph sur la droite de la feuille, je sais pas si je suis très clair.

    Si je donne un exemple je crée un graphique qui est ajusté automatiquement, ce graph va de la colonne A à F. Le tableau source va de la colonne A à C.

    Le deuxième graph doit donc être crée après la colonne F et je ne vois pas comment faire.

    Si quelqu'un pourrait m'aider ça serait cool.

    Merci beaucoup.

  2. #2
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Essaie le bout de code ci-dessous, je me rappelle avoir fait un truc dans le genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Position = Range("A20").End(xlDown).Row -10
     
    With ActiveSheet.ChartObjects(1) 'graph 1 de ta feuille active
    .Top = Cells(Position, 10).Top 'position verticale graphique
    .Left = Cells(Position, 10).Left 'position horizontale graphique
    .Width = 300 ' largeur du graph
    .Height = 250 'hauteur du graph
    '...
    End With
    '----------------------------------------------------------------------
    Si j'ai pu vous aider, merci de me le dire avec 1 pouce

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Bonjour, je ne comprends pas bien ce code, je ne sais si ça correspond à ce que je veux faire.

    A quoi correspond la cellule "A20"?

    Moi ce que je veux faire c'est d'ajuster automatiquement le graphique en fonction des données qu'il contient, pour exemple s'il y aurait une méthode comme Autofit pour ajuster automatiquement les colonnes, tu vois ?

    La je vois que tu donne une dimension en dur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Width = 300 ' largeur du graph
    .Height = 250 'hauteur du graph
    ce n'est pas ce que je veux faire, enfin peu etre que j'ai pas bien compris ton code auquel cas quelques explications serait super cool.

    Merci.

  4. #4
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Bonjour,

    Ce bout de code permet de générer un graphique à un emplacement donné.
    Je m'en sers souvent pour mes rapports financiers.

    Maintenant, "il n'y a plus qu'à" trafiquer ce code pour remplacer les données en dur par un redimensionnement automatique.

    Je n'ai fait que la moitié du travail

    '----------------------------------------------------------------------
    Si j'ai pu vous aider, merci de me le dire avec 1 pouce vert

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    D'accord merci, j'ai déja positionné les graphiques à un emplacement donné, c'est à dire qu'ils sont dimmensionner en fonction de la plage source de donnée.

    Exemple si la plage source de donnée va de la colonne A à F le graphique aura la largeur de la colonne A à F. Mais ce n'est pas bon puisque les graphiques n'affichent pas toutes les données.

    Et c'est exactement ce que tu dis qu'il reste çà faire que je ne sais pas faire c'est à dire dimmensionner automatiquement les graphiques en fonction des données qu'ils contiennent.

    Si tu as un bout de code qui le permet je suis preneur.

    Merci beaucoup

  6. #6
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Essaie d'intégrer ceci et de le bricoler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With ActiveChart
            .HasTitle = True
            .ChartTitle.Characters.Text = "Titre Graphique"
            .Axes(xlCategory, xlPrimary).HasTitle = False
            .Axes(xlValue, xlPrimary).HasTitle = False
            .HasLegend = True
            .Legend.Select
                Selection.Position = xlTop
        End With
    Alors ?

    '----------------------------------------------------------------------
    Si j'ai pu vous aider, merci de me le dire avec 1 pouce

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    je viens d'intégrer le bout de code ci dessus, ca me positionne la légende en haut du graphique et ca cache le graphique en lui meme

  8. #8
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Ok, regarde ces 2 bouts de code, teste les je crois que j'ai une idée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        With ActiveSheet.ChartObjects(1)
            .Left = Range("A10:F40").Left
            .Top = Range("A10:F40").Top
            .Width = Range("A10:F40").Width
            .Height = Range("A10:F40").Height
        End With
    End Sub
    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
    Sub positionGraph()
     
    Private Sub Mise_en_forme_Graphiques()
    Dim ch As ChartObject
    Dim Graphique As String
    Dim Hauteur As Long
    Dim X As Long
    X = 150 ' position bas du graphique
    Y = 10 ' position gauche du graphique
    For Each ch In ActiveSheet.ChartObjects
        Graphique = ch.Name
        ActiveSheet.ChartObjects(Graphique).Activate
        ActiveSheet.Shapes(Graphique).ScaleWidth 0.66, msoFalse, msoScaleFromTopLeft 'finir dimensions
        ActiveSheet.Shapes(Graphique).ScaleHeight 0.75, msoFalse, msoScaleFromTopLeft 'finir dimensions
        Hauteur = ActiveSheet.Shapes(Graphique).Height
        X = X + Hauteur + 10
        ActiveSheet.Shapes(Graphique).Left = Y
        ActiveSheet.Shapes(Graphique).Top = X
    Next ch
    End Sub
    Le seul truc qu'il manque c'est de pouvoir toucher à "l'échelle".
    Tu vois ce que je veux dire ? En mixant ces codes, tu devrais pouvoir t'en sortir...

    '-------------------------------------------------------------------------
    Si j'ai pu vous aider, merci de me le dire avec 1 pouce

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Bonjour, j'ai essayé ce code malheureusement ca ne fonctionne pas.

    En effet j'ai 10 séries dans mon graph et il y en a que 5 qui sont affichées. En gros le height n'est pas dimmensionner correctement. Tu as une idée ?

    Merci beaucoup

  10. #10
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Mince, non...

    En fait d'habitude je ne m'y prends pas comme cela:
    Je crée le graphique, je fais un peu de "tuning" dessus et par macro je ne fais que l'actualiser...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par L'Albatros Voir le message
    Mince, non...

    En fait d'habitude je ne m'y prends pas comme cela:
    Je crée le graphique, je fais un peu de "tuning" dessus et par macro je ne fais que l'actualiser...
    ok merci d'avoir essayé de m'aider *

    Si quelqu'un d'autre a une idée, je suis preneur.

    Merci

  12. #12
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 65
    Points : 94
    Points
    94
    Par défaut
    Salut,

    je suis un peu votre discussion et je penses qu'il serait peu etre simple que tu utilise ta plage de données pour positionner ton graphe.

    C'est un exemple:

    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
     
        Dim rng1 As Range
        Dim rng2 As Range
        Dim DernLigne as Long
        'ici graphews represente la feuille excel surlaquelle le graphe est créé peut etre remplacé par activeworksheet
        'declarer egalement ton graphe au debut
     
        DernLigne = GrapheWs.Range("A65536").End(xlUp).Row    
        'ici tu selectionne ta plage de données de ton tableau
        'a ajuster suivant le nombre de lignes et de colonnes
        Set rng1 = GraphWs.Range(Cells(DernLigne, 4), Cells(DernLigne, 4))
        Set rng2 = GraphWs.Range(Cells(DernLigne, 4), Cells(DernLigne, 16))
     
        With Mon_Graphique
            .Top = rng1.Top
            .Left = rng.Left
            .Height = rng2.Width / 2 'hauteur
            .Width = rng2.Width 'largeur
            .Chart.HasTitle = True
            .Chart.ChartTitle.Font.Size = 10
            .Chart.ChartTitle.Shadow = True
            .Chart.ChartTitle.Top = 2
        End With

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Salut Ozer45, j'utilise déja la plage de données pour positionner le graphe voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            gGraphique.Left = Worksheets(sNomFeuille).Columns(iColDebutPlage).Left
            gGraphique.Top = Worksheets(sNomFeuille).Rows(iLigneFinPlage + 2).Top
     
            gGraphique.Width = Range(sDebutRange & ":" & sFinRange).Width
            gGraphique.Height = 230
    Avec ce code, mon graphe est :
    - aligner a gauche de la plage de donnée (première colone de gauche de la plage
    - positionner 2 ligne en dessous de la dernière ligne de la plage
    - ajuster en largeur en fonction de la plage de donnée (si la plage va de la colonne A à F, le graphe aussi)

    Ce qu'il me manque, c'est de l'ajuster automatiquement en hauteur en fonction du contenu, plus précisemment du nombre de series que contient le graphe.

    Tu vois ce que je veux dire ? or la je l'ajuste en dur avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gGraphique.Height = 230
    ce qui n'est pas correct quand il y a un grand nombre de series.

    Merci

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Bonjour,

    personne n'a d'idée ? n'existe t-il pas une méthode maique qui permet de dimmensionner automatiquement un graphique en fonction qu'ils contiennent beaucoup ou peu d'informations ?

    on peut ajuster automatiquement les colonnes excel en fonction de leur contenu avec la méthode .

    Mais pour les graphiques ça n'existe pas

Discussions similaires

  1. Ajustement de la taille d'un bloc en fonction de son contenu
    Par stefsas dans le forum Mise en page CSS
    Réponses: 0
    Dernier message: 28/05/2010, 10h58
  2. Réponses: 7
    Dernier message: 08/02/2010, 17h25
  3. Réponses: 0
    Dernier message: 23/02/2009, 16h42
  4. Adapter la taille d'un JPanel en fonction de son contenu
    Par SeaShell dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 20/04/2008, 22h49
  5. [HTML/CSS] Taille d'un <div> en fonction de son contenu
    Par hedgehog dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 14/12/2006, 18h57

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