none
insertion chart dans excel RRS feed

  • Question

  • Bonjour je suis novice en programmation, je développe sous VB studio express 2010.

    J'ai trouvé les lignes suivantes pour inséré un chart dans un classeur excel:

                            Dim graphe1 As Microsoft.Office.Interop.Excel.Chart = WbExcel.Sheets.Add(WbExcel.Sheets(1), , 1, Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATChart)
                            graphe1.ChartWizard(feuille.Cells(17, 4).resize(30, 4), XlChartType.xlColumnClustered, PlotBy:=Microsoft.Office.Interop.Excel.XlRowCol.xlColumns, Title:="Open Vcc")
                            graphe1.ChartTitle.Font.Color = ColorTranslator.ToOle(Color.Green)

    Comment faire pour insérer le chart dans une feuille excel standard ?

    Comment faire pour modifier les valeurs de l'axe des X de ce chart ?

    Est il possible d'ajouter plusieurs series dans ce chart ?

    Merci.

    Cordialement.

    dimanche 30 septembre 2012 17:45

Réponses

  • Bonjour

    Pour transformer le code de C# en VB vous pouvez utiliser :

     http://converter.telerik.com/ ou

    http://www.carlosag.net/Tools/CodeTranslator/

    Pour ajouter le XAxis, j’ai change un peu le code. 

          Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
              //5  xlApp.WindowState = XlWindowState.xlNormal;
                if (xlApp == null)
                {
                    Console.WriteLine("EXCEL could not be started. Check that your office installation and project references are correct.");
                    return;
                }
                xlApp.Visible = true;
                Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
                Worksheet ws = (Worksheet)wb.Worksheets[1];
                if (ws == null)
                {
                    Console.WriteLine("Worksheet could not be created. Check that your office installation and project references are correct.");
                }
                // Select the Excel cells, in the range c1 to c7 in the worksheet.
                Range aRange = ws.get_Range("C1", "C7");
                if (aRange == null)
                {
                    Console.WriteLine("Could not get a range. Check to be sure you have the correct versions of the office DLLs.");
                }
                // Fill the cells in the C1 to C7 range of the worksheet with the number 6.
                Object[] args = new Object[1];
                args[0] = 6;
                aRange.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, aRange, args);
                // Change the cells in the C1 to C7 range of the worksheet to the number 8.
                aRange.Value2 = 8;
                Range aRange2 = ws.get_Range("B1", "B7");
                Object[] args2 = new Object[1];
                args2[0] = 6;
                aRange2.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, aRange2, args2);
                ChartObjects charts = ws.ChartObjects() as
                        Microsoft.Office.Interop.Excel.ChartObjects;
                ChartObject chartObject = charts.Add(60, 10, 300, 300) as
                    Microsoft.Office.Interop.Excel.ChartObject;
                Chart chart = chartObject.Chart;
                // Set chart range.
                Range  range = ws.get_Range("C1", "C7");
                //chart.SetSourceData(range);
                SeriesCollection sc = (SeriesCollection)chart.SeriesCollection();
                Series s = sc.NewSeries();
                s.XValues = ws.get_Range("B1", "B7");
                s.Values = range;
              chart.Refresh();
                // Set chart properties.
                chart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlLine;

    Cordialemnt,

    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    • Marqué comme réponse Miche13 mercredi 3 octobre 2012 15:42
    mercredi 3 octobre 2012 13:32

Toutes les réponses

  • Bonjour,

    Je n'ai encore jamais fais de genre de chose, mais je veux bien vous aidez a réaliser ce genre de chose.

    Me concernant je faisais une macro automatique et je copiais le code dans VisualStudio en changeant les valeurs pour réaliser ce que je voulais !

    Cela vous donnera une petite approche sur le comment faire.

    si vous n'arrivez pas a le faire je vous ferais un projet avec un exemple !

    a bientot


    Cordialement,

    lundi 1 octobre 2012 17:56
    Auteur de réponse
  • Bonjour,

    Personnellement je ferais un fichier XLS (XLSX) contenant un Chart basé sur un classeur de donnée et depuis VB j'ouvrirais le fichier et j'alimenterais ce classeur. Je pense que c'est le plus simple à faire. après tout dépend de votre Chart.

     

    Cordialement


    Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !

    lundi 1 octobre 2012 21:43
  • Bonjour et merci pour votre réponse,

    J'ai généré une macro sous excel et voici le code :

    Sub Macro1()
    '
    ' Macro1 Macro
    ' insertion graphe
    '
        Range("H5").Select
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(1).Name = "='Feuil1'!$C$5"
        ActiveChart.SeriesCollection(1).Values = "='Feuil1'!$E$7:$E$36"
        ActiveChart.SeriesCollection(1).XValues = "='Feuil1'!$C$6:$C$36"
    End Sub

    J'ai remplacé les activesheet et activechart par le nom de ma feuille et le nom du chart mais j'ai une erreur au niveau de la sélection du type de chart.

                            Dim graphe1 As New Microsoft.Office.Interop.Excel.Chart
                            feuille.Range("F22").Select()
                            feuille.Shapes.AddChart.Select()
                            With graphe1
                                .ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlColumnClustered
                                .SeriesCollection.NewSeries()
                                .SeriesCollection(1).Name = "='feuille'!$B$15"
                                .SeriesCollection(1).Values = "='feuille'!$D$17:$D$46"
                                .SeriesCollection(1).XValues = "='feuille'!$C$B16:$B$46"
                            End With

    Cordialement.


    Miche13

    mardi 2 octobre 2012 09:50
  • Bonjour et merci pour votre réponse,

    J'ai généré une macro sous excel et voici le code :

    Sub Macro1()
    '
    ' Macro1 Macro
    ' insertion graphe
    '
        Range("H5").Select
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(1).Name = "='Feuil1'!$C$5"
        ActiveChart.SeriesCollection(1).Values = "='Feuil1'!$E$7:$E$36"
        ActiveChart.SeriesCollection(1).XValues = "='Feuil1'!$C$6:$C$36"
    End Sub

    J'ai remplacé les activesheet et activechart par le nom de ma feuille et le nom du chart mais j'ai une erreur au niveau de la sélection du type de chart.

                            Dim graphe1 As New Microsoft.Office.Interop.Excel.Chart
                            feuille.Range("F22").Select()
                            feuille.Shapes.AddChart.Select()
                            With graphe1
                                .ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlColumnClustered
                                .SeriesCollection.NewSeries()
                                .SeriesCollection(1).Name = "='feuille'!$B$15"
                                .SeriesCollection(1).Values = "='feuille'!$D$17:$D$46"
                                .SeriesCollection(1).XValues = "='feuille'!$C$B16:$B$46"
                            End With

    Cordialement.


    Miche13

    Attention ActiveSheet et ActiveChart sont deux éléments existant dans la feuille qui exécute la macro. Si vous souhaitez modifier le chart, il faut d’abord récupérer la feuille sur lequel ce trouve le Chart puis récupérer le Chart souhaité.


    Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !

    mardi 2 octobre 2012 10:15
  • Merci pour votre réponse,

    Mais ce que je veux faire a la base c'est de créer une feuille excel sous visual studio et y insérer un chart et de modifier les valeurs de l'axe des X.

    Le but de mon programme étant de traiter, de mettre en forme et de visualiser des données.J'ai déjà la partie traitement et mise en forme développé en VB.net il ne me manque plus que la partie visualisation sous excel.  

    Cordialement


    Miche13

    mardi 2 octobre 2012 12:03
  • Merci pour votre réponse,

    Mais ce que je veux faire a la base c'est de créer une feuille excel sous visual studio et y insérer un chart et de modifier les valeurs de l'axe des X.

    Le but de mon programme étant de traiter, de mettre en forme et de visualiser des données.J'ai déjà la partie traitement et mise en forme développé en VB.net il ne me manque plus que la partie visualisation sous excel.  

    Cordialement


    Miche13


    Donc si je comprend bien tout est fait sauf l'affichage sous Excel ? En somme vous souhaitez ouvrir Excel et afficher le résultat ?

    Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !

    mardi 2 octobre 2012 12:43
  • Oui c'est cela,  je veux afficher les données traitées sous forme d'un chart dans un fichier excel.

    Miche13

    mardi 2 octobre 2012 13:23
  • Est bien il suffit d'enregistrer votre document XLS et l'ouvrir soit en lançant Excel suivit du nom de fichier soit par .Net avec la méthode Open en faisant un new Document si mes souvenir sont bons.

    Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !

    mardi 2 octobre 2012 13:52
  • Bonjour,

    Merci, mais mon premier est l'insertion et la modification a partir de visual studio d'un chart dans une feuille excel standard. Le classeur et la feuille excel étant créé sous visual studio par l'intermédiaire de la librairie microsoft.office.interop.excel. Mon deuxième problème étant la modification des valeurs de l'axe des X.

    Cordialement


    Miche13

    mercredi 3 octobre 2012 08:33
  • Bonjour

     

    J'espère bien que ça vas vous aider:

                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
              //5  xlApp.WindowState = XlWindowState.xlNormal;
                if (xlApp == null)
                {
                    Console.WriteLine("EXCEL could not be started. Check that your office installation and project references are correct.");
                    return;
                }
                xlApp.Visible = true;
                Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
                Worksheet ws = (Worksheet)wb.Worksheets[1];
                if (ws == null)
                {
                    Console.WriteLine("Worksheet could not be created. Check that your office installation and project references are correct.");
                }
                // Select the Excel cells, in the range c1 to c7 in the worksheet.
                Range aRange = ws.get_Range("C1", "C7");
                if (aRange == null)
                {
                    Console.WriteLine("Could not get a range. Check to be sure you have the correct versions of the office DLLs.");
                }
                // Fill the cells in the C1 to C7 range of the worksheet with the number 6.
                Object[] args = new Object[1];
                args[0] = 6;
                aRange.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, aRange, args);
                // Change the cells in the C1 to C7 range of the worksheet to the number 8.
                aRange.Value2 = 8;
                ChartObjects charts = ws.ChartObjects() as
                        Microsoft.Office.Interop.Excel.ChartObjects;
                ChartObject chartObject = charts.Add(60, 10, 300, 300) as
                    Microsoft.Office.Interop.Excel.ChartObject;
                Chart chart = chartObject.Chart;
                // Set chart range.
                Range  range = ws.get_Range("C1", "C7");
                chart.SetSourceData(range);
                // Set chart properties.
                chart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlLine;
                chart.ChartWizard(Source: range,
                    Title: "Title",
                    CategoryTitle: "XAxis",
                    ValueTitle: "YAxis");
                // Save.
                wb.SaveAs(@"c:\Temp\outxls.xls");
     

    Je l'ai teste avec Excel 2013 et ça fonctionne bien.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mercredi 3 octobre 2012 09:49
  • Merci, j'ai oublié de dire que j'utilise VB.NET mais je vais essayer de me débrouiller avec le code ci-dessus.

    Encore une petite question : Je voudrais changer les valeurs affichées sur l'axe des axes de ce chart, comment dois je faire ?

    Encore merci pour votre aide

    Cordialement


    Miche13

    mercredi 3 octobre 2012 12:00
  • Bonjour

    Pour transformer le code de C# en VB vous pouvez utiliser :

     http://converter.telerik.com/ ou

    http://www.carlosag.net/Tools/CodeTranslator/

    Pour ajouter le XAxis, j’ai change un peu le code. 

          Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
              //5  xlApp.WindowState = XlWindowState.xlNormal;
                if (xlApp == null)
                {
                    Console.WriteLine("EXCEL could not be started. Check that your office installation and project references are correct.");
                    return;
                }
                xlApp.Visible = true;
                Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
                Worksheet ws = (Worksheet)wb.Worksheets[1];
                if (ws == null)
                {
                    Console.WriteLine("Worksheet could not be created. Check that your office installation and project references are correct.");
                }
                // Select the Excel cells, in the range c1 to c7 in the worksheet.
                Range aRange = ws.get_Range("C1", "C7");
                if (aRange == null)
                {
                    Console.WriteLine("Could not get a range. Check to be sure you have the correct versions of the office DLLs.");
                }
                // Fill the cells in the C1 to C7 range of the worksheet with the number 6.
                Object[] args = new Object[1];
                args[0] = 6;
                aRange.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, aRange, args);
                // Change the cells in the C1 to C7 range of the worksheet to the number 8.
                aRange.Value2 = 8;
                Range aRange2 = ws.get_Range("B1", "B7");
                Object[] args2 = new Object[1];
                args2[0] = 6;
                aRange2.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, aRange2, args2);
                ChartObjects charts = ws.ChartObjects() as
                        Microsoft.Office.Interop.Excel.ChartObjects;
                ChartObject chartObject = charts.Add(60, 10, 300, 300) as
                    Microsoft.Office.Interop.Excel.ChartObject;
                Chart chart = chartObject.Chart;
                // Set chart range.
                Range  range = ws.get_Range("C1", "C7");
                //chart.SetSourceData(range);
                SeriesCollection sc = (SeriesCollection)chart.SeriesCollection();
                Series s = sc.NewSeries();
                s.XValues = ws.get_Range("B1", "B7");
                s.Values = range;
              chart.Refresh();
                // Set chart properties.
                chart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlLine;

    Cordialemnt,

    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    • Marqué comme réponse Miche13 mercredi 3 octobre 2012 15:42
    mercredi 3 octobre 2012 13:32
  • Merci pour votre aide, c'est exactement ce que je voulais faire

    Miche13

    mercredi 3 octobre 2012 15:43