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

VB.NET Discussion :

Insérer un chart dans word via vb.net


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut Insérer un chart dans word via vb.net
    Bonjour, dans le cadre de mon travail, je dois insérer un graphique dans un fichier Word via mon application VB.net.
    Pour le moment, j'arrive à créer le graphique, l'implémenter, ajouter les titres et la légende, mais je n'arrive pas à modifier la couleur des lignes de mon graphique.

    Code VB.NET : 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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    'Ouvre le document word
    Dim oWord As New Word.Application
    oWord.Documents.Open(My.Application.Info.DirectoryPath & "\Rapports\Rapport Test.docx")
    oWord.Visible = True
     
            Dim oDoc As Word.Document
            oDoc = oWord.ActiveDocument
            oDoc.Bookmarks.Item("GraphAnalyseTendance").Range.Select()
     
            Dim oChart As Word.Chart
            oChart = oDoc.Shapes.AddChart(Microsoft.Office.Core.XlChartType.xlLine).Chart
     
            Dim chartdata As Word.ChartData = oChart.ChartData
            Dim dataWorkbook As Excel.Workbook = CType(chartdata.Workbook, Workbook)
            Dim datasheet As Excel.Worksheet = CType(dataWorkbook.Worksheets(1), Worksheet)
            Dim tRange As Excel.Range = datasheet.Cells.Range("A1", "G" & Nb_Mesures_Optifive)
            Dim tbl1 As Excel.ListObject = datasheet.ListObjects("Tableau1")
     
            tbl1.Resize(tRange)
     
            datasheet.Cells.Range("B1").FormulaR1C1 = "Axe XCF"
            datasheet.Cells.Range("C1").FormulaR1C1 = "Axe YCF"
            datasheet.Cells.Range("D1").FormulaR1C1 = "Axe ZCF"
            datasheet.Cells.Range("E1").FormulaR1C1 = "Axe XAC"
            datasheet.Cells.Range("F1").FormulaR1C1 = "Axe YAC"
            datasheet.Cells.Range("G1").FormulaR1C1 = "Axe ZAC"
     
            For i = 4 To Nb_Mesures_Optifive + 3
                datasheet.Cells.Range("A" & i - 2).FormulaR1C1 = i - 3
                datasheet.Cells.Range("B" & i - 2).FormulaR1C1 = Math.Round(Val(Data_Optifive_Seconde(i, 0)), 3, MidpointRounding.AwayFromZero) 'XCF
                datasheet.Cells.Range("C" & i - 2).FormulaR1C1 = Math.Round(Val(Data_Optifive_Seconde(i, 1)), 3, MidpointRounding.AwayFromZero) 'YCF
                datasheet.Cells.Range("D" & i - 2).FormulaR1C1 = Math.Round(Val(Data_Optifive_Seconde(i, 2)), 3, MidpointRounding.AwayFromZero) 'ZCF
                datasheet.Cells.Range("E" & i - 2).FormulaR1C1 = Math.Round(Val(Data_Optifive_Premiere(i, 0)), 3, MidpointRounding.AwayFromZero) 'XAC
                datasheet.Cells.Range("F" & i - 2).FormulaR1C1 = Math.Round(Val(Data_Optifive_Premiere(i, 1)), 3, MidpointRounding.AwayFromZero) 'YAC
                datasheet.Cells.Range("G" & i - 2).FormulaR1C1 = Math.Round(Val(Data_Optifive_Premiere(i, 2)), 3, MidpointRounding.AwayFromZero) 'ZAC
            Next
     
            oChart.SetElement(Microsoft.Office.Core.MsoChartElementType.msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
            oChart.SetElement(Microsoft.Office.Core.MsoChartElementType.msoElementPrimaryValueAxisTitleRotated)
     
            Dim AxisY As Word.Axis = CType(oChart.Axes(Word.XlAxisType.xlValue, Word.XlAxisGroup.xlPrimary), Word.Axis)
            AxisY.HasTitle = True
            AxisY.AxisTitle.Text = "Erreurs en µm"
     
            Dim AxisX As Word.Axis = CType(oChart.Axes(Word.XlAxisType.xlCategory, Word.XlAxisGroup.xlPrimary), Word.Axis)
            AxisX.HasTitle = True
            AxisX.AxisTitle.Text = "Numéro de mesure"
     
            oChart.HasTitle = True
            oChart.ChartTitle.Font.Size = 18
            oChart.ChartTitle.Font.Color = Color.Black.ToArgb()
            oChart.ChartTitle.Text = "Analyse de tendance"
            oChart.ChartTitle.Format.Line.Visible = Microsoft.Office.Core.MsoTriState.msoTrue
            oChart.ChartTitle.Format.Line.ForeColor.RGB = Color.Black.ToArgb()
     
            Dim obj = oChart.SeriesCollection(1)
            Dim ser As Word.Series = TryCast(obj, Word.Series)
     
            'ser.MarkerStyle = Word.XlMarkerStyle.xlMarkerStyleSquare
            'ser.MarkerSize = 4
     
            'Mise à jour table des matières
            oWord.ActiveDocument.TablesOfContents(1).Update()
     
            'Enregistre le doucment et ferme word
            oWord.ActiveDocument.SaveAs(PathTemporaire & "\Mesures\Fichiers PDF\Rapport " & NomUtilisateur & ".docx")
            oWord.ActiveDocument.Close()
            oWord.Quit()


    Donc tout ce code fonctionne, j'arrive également à mettre des balises et changer leur couleurs (code ci-dessous), mais pas à changer la couleur des 6 lignes du graphique.

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim obj = oChart.SeriesCollection(1)
    Dim ser As Word.Series = TryCast(obj, Word.Series)
     
    ser.MarkerStyle = Word.XlMarkerStyle.xlMarkerStyleSquare
    ser.MarkerSize = 4

    Merci de votre aide.

  2. #2
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    bonsoir,

    Si c'est des lignes, vous pouvez essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chart.SeriesCollection(n).Format.Line.Forecolor.RGB = RGB(X, Y, Z)
    n : numéro de la série

    Sincèrement

  3. #3
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut
    Bonjour Elthorn, et merci de ton aide.
    J'avais déjà essayé ta solution, mais après "SerieCollection(n)" je n'ai que les solutions de "Equals", "GetHashCode", "GetType" et "ToString" (voir photo ci-dessous)


    Nom : ChangeCouleur.jpg
Affichages : 413
Taille : 45,8 Ko

  4. #4
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    Bonjour,

    As tu ajouté Imports Microsoft.Office.Interop et bien mis en référence les "Microsoft Word object Library" et "Microsoft Excel object Library" (soit en COM soit en .net)?

    pour moi non plus, il ne me le propose pas mais avec les références et les imports, VS accepte la fonction.

    Sincèrement

  5. #5
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut
    Après vérification, Imports Microsoft.Office.Interop est bien déclaré dans mon application, par contre pas les références "Microsoft Word object Library" et "Microsoft Excel object Library" (en COM).
    Nouveau problème, une fois que je valide "Microsoft Word object Library", je me retrouve avec des erreurs dès la déclaration de mon fichier Word: (voir photo ci dessous)
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim oWord As New Word.Application


    Nom : Word.jpg
Affichages : 446
Taille : 21,0 Ko


  6. #6
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut
    En validant les références "Microsoft Word object Library" et "Microsoft Excel object Library" dans COM et en retirant les "Imports Microsoft.Office.Interop.Excel" et "Imports Microsoft.Office.Interop.Word" que j'avais mis dans mon projet, je peux maintenant déclarer mon fichier Word Dim oWord as New Word.Application , mais j'ai une nouvelle erreur lors de la création de mon graphique:

    Nom : Graph.jpg
Affichages : 419
Taille : 34,1 Ko

    Alors que c'est Visual Studio qui me propose de mettre ce code...
    J'ai également essayer de revenir en arrière (en remettant mes références), mais j'ai toujours l'erreur.

  7. #7
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut
    Pour résumer, voici les références (Assemblys) qui sont actives dans mon application:
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Imports Microsoft.Office.Interop
    Imports Microsoft.Office.Interop.Word
    Imports Microsoft.Office.Interop.Excel

    Et je ne peux toujours pas écrire cette ligne de code:
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Chart.SeriesCollection(n).Format.Line.Forecolor.RGB = RGB(X, Y, Z)

  8. #8
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    C'est bizarre car chez moi je dois mettre les deux pour ne pas avoir d'erreur : les références "Microsoft Word object Library" et "Microsoft Excel object Library" et les imports.

  9. #9
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut
    Citation Envoyé par Elthorn Voir le message
    C'est bizarre car chez moi je dois mettre les deux pour ne pas avoir d'erreur : les références "Microsoft Word object Library" et "Microsoft Excel object Library" et les imports.
    J'ai essayé avec les deux activées, et là c'est le chantier...
    Ensuite je suis revenu en arrière, et j'ai toujours des erreurs. Heureusement que j'avais une sauvegarde d'hier soir.

  10. #10
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    Bonsoir,

    voici mon code test. Il ne soulève aucune erreur donc le référencement est correct.

    test4.zip

    Sincèrement

  11. #11
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut
    Bonjour, j'ai testé cette partie de code que tu m'as envoyé hier soir:

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            Dim obj = oChart.SeriesCollection(1)
            Dim ser As Word.Series = TryCast(obj, Word.Series)
            ser.Format.Line.ForeColor.RGB = RGB(247, 247, 12)

    Je n'ai pas d'erreur, mais cela n'a aucun effet...

  12. #12
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut
    Voici les différentes références qui sont validées dans mon projet:


    Assemblys ---> Framework
    Nom : Framework.jpg
Affichages : 438
Taille : 80,8 Ko

    Assemblys ---> Extensions
    Nom : Extensions.jpg
Affichages : 417
Taille : 78,2 Ko

    Et rien en COM

    Pour les imports:
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Option Strict On
    Option Explicit On
    Imports Microsoft.Office.Interop
    Imports Microsoft.Office.Interop.Word
    Imports Microsoft.Office.Interop.Excel
    Imports System.IO

  13. #13
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    Bonjour

    Citation Envoyé par petit rabot Voir le message
    Bonjour, j'ai testé cette partie de code que tu m'as envoyé hier soir:

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            Dim obj = oChart.SeriesCollection(1)
            Dim ser As Word.Series = TryCast(obj, Word.Series)
            ser.Format.Line.ForeColor.RGB = RGB(247, 247, 12)

    Je n'ai pas d'erreur, mais cela n'a aucun effet...

    Quand tu dis que cela n'a pas d'effet, c.a.d cela ne change pas la couleur des lignes ?


    Pour les références, pourquoi mets-tu microsoft.office.interop.graph en référence ? normalement, interop.excel et word suffisent
    Pour les options strict et explicit, je ne suis pas assez calé pour te dire si c'est OK

    As tu toujours ton erreur d'ambiguité ?

    ici , (bien que cela soit un post en VBA), ils préconisent d'utiliser border.color plutôt que line.color.

    Il faut que je teste cela sur un fichier excel...

    Sincèrement

  14. #14
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    rebonjour,

    J'ai fait un test en mettant un graphe excel dans un fichier word (simple copier/coller) et j'ai appelé le fichier word et j'arrive à changer la couleur de la courbe. c'est bien Format.Line.ForeColor.RGB qu'il faut utiliser
    test_word.zip

    Par ailleurs j'ai testé microsoft.office.interop.graph avec les deux autres interop (excel et word) et il me provoque une erreur d’ambiguïté.

    Sincèrement

  15. #15
    Membre éclairé Avatar de petit rabot
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2010
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 236
    Par défaut
    ReBonjour Elthorn, et surtout MERCI!!!
    Suite à ton dernier message, j'ai enfin la réponse:

    Code VB.NET : 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
     
            Dim obj1 = oChart.SeriesCollection(1)
            Dim ser1 As Word.Series = TryCast(obj1, Word.Series)
            ser1.Border.Color = RGB(249, 12, 37) 'rouge
     
     
            Dim obj2 = oChart.SeriesCollection(2)
            Dim ser2 As Word.Series = TryCast(obj2, Word.Series)
            ser2.Border.Color = RGB(80, 249, 12) 'vert
     
     
            Dim obj3 = oChart.SeriesCollection(3)
            Dim ser3 As Word.Series = TryCast(obj3, Word.Series)
            ser3.Border.Color = RGB(12, 19, 249) 'bleu
     
     
            Dim obj4 = oChart.SeriesCollection(4)
            Dim ser4 As Word.Series = TryCast(obj4, Word.Series)
            ser4.Border.Color = RGB(134, 12, 249) 'violet
     
     
            Dim obj5 = oChart.SeriesCollection(5)
            Dim ser5 As Word.Series = TryCast(obj5, Word.Series)
            ser5.Border.Color = RGB(12, 249, 245) 'turquoise
     
     
            Dim obj6 = oChart.SeriesCollection(6)
            Dim ser6 As Word.Series = TryCast(obj6, Word.Series)
            ser6.Border.Color = RGB(249, 120, 12) 'orange

    Avec cela, j'ai pu changer la couleur de mes 6 courbes...
    Encore MERCI

    J'ai également supprimer la référence microsoft.office.interop.graph qui ne servait à rien, juste un test...

  16. #16
    Membre expérimenté Avatar de Delaney
    Homme Profil pro
    Developpeur VB amateur
    Inscrit en
    Mars 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Developpeur VB amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 148
    Par défaut
    Ah trop cool !

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

Discussions similaires

  1. Insérer un chart dans word via vb.net
    Par petit rabot dans le forum Visual Studio
    Réponses: 0
    Dernier message: 12/12/2019, 15h16
  2. Insérer un Tableau excel dans Word via VBA depuis Excel
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/05/2008, 08h52
  3. impression dans word via access
    Par fa310428 dans le forum Access
    Réponses: 4
    Dernier message: 16/02/2007, 23h02
  4. insertion de texte dans word via vb
    Par godik dans le forum VBA Word
    Réponses: 1
    Dernier message: 15/05/2006, 13h07
  5. [VBA-E]Insérer des autotext dans Word à partir d'excel
    Par noordman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2006, 15h34

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