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

Scripts/Batch Discussion :

Anomalie Graphique excel [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 53
    Par défaut Anomalie Graphique excel
    Bonjour,

    j'ai des scripts qui me récupèrent quantité de données et les mettent en forme dans des classeurs excel.

    Ces classeurs se présentent sous la forme suivante:
    Une feuille par classeur
    En général des données dans les plages A1 à L200 avec une ligne de titre.
    En colonne A, des heures:minutes:secondes.
    Les autres colonnes indiquent des chiffres divers (toujours des chiffres)
    la dernière colonne contient la somme des chiffres de colonnes précédentes.

    Je dois faire des graphiques afin de pouvoir présenter ces données.
    Comme c'est un script powershell qui implante les données dans les classeurs, j'ai pensé qu'il serait bien d'automatiser la création des graphiques.
    Le tout en powershell afin de pourvoir rajouter simplement un bout de code dans l'existant.

    Il faut noter que je n'ai pas écrit les scripts de récupération des données et que après 15 ans d'informatique, c'est aujourd'hui mon baptême de powershell.

    Mon problème est que quelle que soit la façon dont je déclare les champs à intégrer dans le graphique, toutes les données y sont systématiquement intégrées.
    D'autre part, je ne parviens pas à positionner mon graphique ou je veux.

    Voici ce que j'ai écrit:

    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
    $excel= new-object -comobject excel.application
    $excel.Visible = $true
    $classeur=$excel.workbooks.open("c:\nombresessions.xls")
    $feuille=$excel.worksheets.item(1)
    
    $Chart = $feuille.Shapes.AddChart().Chart
    $Chart.ChartType = 4
    $Chart.HasLegend = $false
    $Chart.HasTitle = $true
    $Chart.ChartTitle.Text = "Nombre de sessions"
    
    # A partir d'ici, c'est bizarre
    
    #$Chart.SeriesCollection(1).XValues = $feuille.Range($feuille.Cells.Item(2,1),$feuille.Cells.Item(121,1))
    $Chart.SeriesCollection(1).XValues = $feuille.Cells("A2:A121")
    #$Chart.SeriesCollection(1).Values = $feuille.Range($feuille.Cells.Item(2,2),$feuille.Cells.Item(121,2))
    $Chart.SeriesCollection(1).XValues = $feuille.Cells("B2:B121")
    #$RangePositionChart = $feuille.Range($feuille.Cells.Item(1,13),$feuille.Cells.Item(15,28))
    la dernière partie précise le range de données à implanter dans le tableaux, j'ai testé les lignes dé commentées et les autres, le résultat est toujours le même, toutes les données sont affichées dans le graphique.

    Pour finir, je souhaiterais éventuellement ne visualiser que les données de la dernière colonne (les totaux).

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2015
    Messages : 66
    Par défaut
    Hello

    Je n'ai pas compris ou se trouvent les labels des données à mettre dans le chart et les totaux (labels en colonne 1 représentés par le temps ? et données à visualiser en dernière colonne? donc faudra adapter ce qui suit)

    Ce que j'utilise pour mes charts est la méthode SetSourceData, qui prend en paramètre un range de cellules.

    Voici comment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $range1=$feuille.range("A1")
    $range1=$feuille.Range($range1,$range1.End([Microsoft.Office.Interop.Excel.XLDirection]::xlDown))
    $range2=$feuille.range("L1")
    $range2=$feuille.Range($range2,$range2.End([Microsoft.Office.Interop.Excel.XLDirection]::xlDown))
    $selection = $feuille.Range($range1, $range2)
    
    $chart.SetSourceData($selection)
    
    $chart.HasDataTable = 1
    $chart.SetSourceData($selection)
    $chart.SeriesCollection(1).HasDataLabels = "true"
    $chart.SeriesCollection(1).ApplyDataLabels() | out-Null
    Si on veut changer le type de chart:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chart.chartType=[Microsoft.Office.Interop.Excel.XLChartType]::xlBarClustered
    Si on veut modifier la position du chart:
    Pour ça je passe par le nom du chart (je n'ai pas trouvé un meilleur moyen), le premier chart a par défaut le nom "Chart 1", le 2eme "Chart 2" etc.
    Ensuite on trouve la position x,y d'une cellule en format en récupérant la valeur de Left et Top ainsi ce sera aligné avec les cellules.
    On peut aussi changer la taille du chart avec Width et Height.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $feuille.shapes.item("Chart 1").top=$feuille.Range("A6").Top
    $feuille.shapes.item("Chart 1").left=$feuille.Range("A6").Left
    $feuille.shapes.item("Chart 1").height=250

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 53
    Par défaut [PowerShell] Anomalie Graphique excel
    Bonjour et merci

    j'ai un peu adapté le code et celui ci-dessous fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $chart = $feuille.Shapes.AddChart().Chart
    $chart.HasLegend = $false
    $range1=$feuille.range("A1")
    $range1=$feuille.Range($range1,$range1.End([Microsoft.Office.Interop.Excel.XLDirection]::xlDown))
    $range2=$feuille.range("B1")
    $range2=$feuille.Range($range2,$range2.End([Microsoft.Office.Interop.Excel.XLDirection]::xlDown))
    $selection = $feuille.Range($range1, $range2)
    $chart.SetSourceData($selection)
    $chart.chartType= 4
    $chart.HasTitle = $true
    $chart.ChartTitle.Text = "Nombre de sessions "
    Par contre, si je remplace B1 par L1, tout le tableau est pris en compte alors que je ne voudrais que la dernière colonne.

    Pour préciser, ma première colonne contient les données de temps, les suivantes le nombre de sessions ouvertes et la dernière les totaux.
    Le but est d'obtenir un graphique présentant les totaux en coordonnées et le temps en abscisses.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2015
    Messages : 66
    Par défaut
    Oui, en utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $selection = $feuille.Range($range1, $range2)
    $chart.SetSourceData($selection)
    ça prend en compte toutes les cellules entre les deux rangées.

    Normalement il aurait fallu faire une Union des deux rangées, mais ça ne fonctionne pas avec Powershell pour une raison que j'ignore.

    Tu as possibilité de réarranger tes colonnes pour que les totaux soient en colonne B?

    Sinon il faudrait faire des copies des colonnes A et L dans une nouvelle feuille ou une nouvelle rangée pour que SetSourceData fonctionne comme tu le veux.

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 53
    Par défaut [PowerShell] Anomalie Graphique excel
    Bonjour,

    le code qui fonctionne:

    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
    $feuille=$excel.worksheets.item(1)
    $chart = $feuille.Shapes.AddChart().Chart
    $chart.HasLegend = $false
    $range1=$feuille.range("A1")
    $range1=$feuille.Range($range1,$range1.End([Microsoft.Office.Interop.Excel.XLDirection]::xlDown))
    $range2=$feuille.range("L1")
    $range2=$feuille.Range($range2,$range2.End([Microsoft.Office.Interop.Excel.XLDirection]::xlDown))
    $selection = $feuille.Range($range1, $range2)
    $chart.SetSourceData($selection)
    $chart.chartType= 4
    $chart.HasTitle = $true
    $chart.ChartTitle.Text = "Nombre de sessions $cluster"
    $feuille.shapes.item("Chart 1").top=$feuille.Range("M6").Top
    $feuille.shapes.item("Chart 1").left=$feuille.Range("M6").Left
    $feuille.shapes.item("Chart 1").height=250
    #test modif graphique
    $c = $feuille.Columns
    $a = 2
    DO
    {
      $c.Item($a).hidden =$true
      $a
      $a++
        } While ($a -le 11 )

    J'ai conservé le graphique avec les données complètes mais je supprime les colonnes inutiles en les cachant, le graph s'actualise tout seul.

    Nickel!

    Merci Micky

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

Discussions similaires

  1. Forcer le nom d'un graphique excel en vba
    Par NiKoS29 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/01/2006, 17h25
  2. VBA + Graphique Excel
    Par NiKoS29 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/12/2005, 20h51
  3. Peut on inserer une fonction dans un graphique excel ?
    Par Celia1303 dans le forum Excel
    Réponses: 2
    Dernier message: 08/11/2005, 09h09
  4. création graphique excel à partir VB6
    Par getea85 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/10/2005, 14h59
  5. recuperer 1 graphique excel vers VB
    Par tomgrc dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 25/02/2005, 17h27

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