GRAPHIQUE - Relier les points de données par une courbe

Bonjour,

Je débute en VBA et je cherche une fonction qui me permettrais de coder l'opération suivante:

Lorsque je créé mon TCD à partir de mon tableau de données, des cases vides se créent.

Du coup, lorsque je génère mon graphique, les courbes associées aux colonnes avec les cases vident sont discontinue.

Pour remédier à ça, je fais :

- Sélection du graphique - Clic droit - Sélectionner des données…

- Cellules masquées et cellules vides

- Relier les points de données par une courbe

Est ce qu'il y a une façon d'intégrer ça directement dans mon code?

Merci d'avance pour votre temps.

Bonjour et bienvenue sur le forum,

Avez-vous essayé l'enregistreur de macros ? Ca offre souvent une base correcte à partir de laquelle on peut ajuster le code pour le rendre plus robuste/générique.

Si vous pouviez poster le code obtenu, ce serait top. Sinon/aussi, il serait pratique de joindre un fichier d'exemple avec notamment le graph final désiré.

Merci saboh12617,

J'ai essayé l'enregistreur mais ça renvoie "Cette action n’est pas encore enregistrable".

Mon code fait les fonctions suivantes :

- Récupère le contenu d'un fichier CSV et l'insère dans un tableau

- Généré un TCD et orriantes les données sur les axes

-Génère le graphique associé

- Mise en forme du graphique

- Boucle pour 4 feuilles

Sub importCSV()
    Dim dialogBox As FileDialog
    Dim selectedFile As String
    Set dialogBox = Application.FileDialog(msoFileDialogFilePicker)
    Dim sheet As Integer
    sheet = 1

    For sheet = 1 To 4
        Sheets("Ligne " & sheet).Select

        With dialogBox ' Ouvre une dialogue box et recupere le chemin du fichier CSV '
            .Filters.Add "CSV", "*.CSV", 1
            .AllowMultiSelect = False

            If .Show = True Then
                selectedFile = .SelectedItems(1)
            End If

        End With

        If selectedFile <> "" Then
            Open selectedFile For Input As #1 'Selectionne le contenu du fichier N°1'
            Dim rowNumber As Long 'N°de ligne écriture'
            Dim lineFromFile As String 'Ligne de lecture'
            Dim lineItems As Variant ' Tableau de ligne'
            Dim itteration As Integer ' entier nb ligne fichier'

            rowNumber = 1
            itteration = 0
            Do Until EOF(1)
                Line Input #1, lineFromFile
                If lineFromFile <> "ÿþMessage" Then
                    lineItems = Split(lineFromFile, ";")

                    For itteration = 0 To 3

                        Range("ImportRange" & sheet).Cells(rowNumber, itteration + 1) = lineItems(itteration)
                    Next

                    rowNumber = rowNumber + 1
                End If
            Loop

            Close #1

            Dim buffer As PivotCache 'Cache tableau'
            Set buffer = ActiveWorkbook.PivotCaches.Create(xlDatabase, "Tableau" & sheet)
            Dim TCD As PivotTable ' tableau croisé dynamique'
            Set TCD = buffer.CreatePivotTable(Range("Z1"), "TCD" & sheet)

            With ActiveSheet.PivotTables("TCD" & sheet) 'Oriantatiton du TCD'
                .PivotFields("Date").Orientation = xlRowField
                .PivotFields("Date").Position = 1
                .PivotFields("Heure").Orientation = xlRowField
                .PivotFields("Heure").Position = 2
                .PivotFields("Etats").Orientation = xlColumnField
                .AddDataField .PivotFields("Compteurs"), " Suivi Compteur", xlSum
            End With

            'création graphique'
            Dim graph   As Chart
            Dim TailleDonnees As String
            Dim GrapheName As String

            TailleDonnees = "Z1:AD" & rowNumber + 4

            ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select

            With ActiveChart
                .SetSourceData Source:=Range(TailleDonnees) 'Source de donnees'
                .PlotArea.Format.Fill.ForeColor.RGB = RGB(223, 223, 223) ' Arriere plan gris
                .SetElement (msoElementLegendBottom) ' Legende des etats en bas
                With .FullSeriesCollection(1)
                    .ChartType = xlLine 'select which column should be the Line or the Column
                    .AxisGroup = 2 ' Axe Secondaire
                    .Border.Color = RGB(255, 0, 0) ' Couleur courbe'
                    .Points(.Points.Count).ApplyDataLabels ShowValue:=True 'Etiquette sur derniere valeur de la serie'
                    .Points(.Points.Count).DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 0, 0) ' couleur etiquette'
                End With
                With .FullSeriesCollection(2)
                    .ChartType = xlLine
                    .AxisGroup = 1
                    .Border.Color = RGB(13, 129, 38)
                    .Points(.Points.Count).ApplyDataLabels ShowValue:=True
                    .Points(.Points.Count).DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(13, 129, 38)
                End With
                With .FullSeriesCollection(3)
                    .ChartType = xlLine
                    .AxisGroup = 2
                    .Border.Color = RGB(255, 140, 46)
                    .Points(.Points.Count).ApplyDataLabels ShowValue:=True
                    .Points(.Points.Count).DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 140, 46)
                End With

               If .SeriesCollection.Count >= 4 Then
                    With .FullSeriesCollection(4)
                        .ChartType = xlLine 'select which column should be the Line or the Column
                        .AxisGroup = 2 ' Axe Secondaire
                        .Border.Color = RGB(0, 0, 255) ' Couleur courbe'
                        .Points(.Points.Count).ApplyDataLabels ShowValue:=True 'Etiquette sur derniere valeur de la serie'
                        .Points(.Points.Count).DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(0, 0, 255) ' couleur etiquette'
                    End With
               End If

                .SetElement (msoElementDataLabelTop)
                .HasTitle = True 'Titre Objet Graphique'
                .ChartTitle.Select
                .ChartTitle.Text = "Suivi de production"
                .Parent.Name = "Graphique" & sheet
                .SetElement msoElementPrimaryValueAxisShow 'Titre axe primaire '
                .SetElement msoElementPrimaryValueAxisTitleHorizontal
                .Axes(xlValue, xlPrimary).AxisTitle.Text = "Titre1"
                .SetElement msoElementSecondaryValueAxisShow ' Titre axe secondaire'
                .SetElement msoElementSecondaryValueAxisTitleHorizontal
                .Axes(xlValue, xlSecondary).AxisTitle.Text = "Titre2"
                .ShowAllFieldButtons = False ' desactive les boutons de champs de legende'
                GrapheName = .Parent.Name

            End With
        End If

    Next

End Sub

Je débute, j'ai récupérer des bouts de code à droite et à gauche sans tout comprendre. Je me doute que ce n'est pas du tout optimisé

Pour le graph final désiré je souhaite ceci:

image

Mais j'obtient ça à la place :

image

A noté que les étiquettes pour la dernière valeur de chaque séries ne ce créent pas pour les courbes qui ne sont pas tracées. Je ne sais pas si il y a un lien ou si ça vient du code.

Merci

Vous ne pouvez pas partager un classeur représentatif ? Ou à la limite votre csv ? Merci.

Voici le classeur :

10classeur.zip (280.91 Ko)

Et un csv

6ah250429000002.zip (10.92 Ko)

pourquoi ce détour avec un TCD ?

comparer les 2 graph, la 2eme, on peut manipuler l'axe X comme on veut

12classeur-1.zip (583.16 Ko)

Bonjour,

Je vois ce que vous voulez dire, je vais essayer de modifier la façon dont j'importe mes données pour avoir le même tableau que vous et créer mon graph à partir de là

re,

vous voulez le faire vous-même ou je vous propose une solution ?

Bonjour,

J'ai modifier la macro pour insérer les données dans votre tableau et placer "#N/A" dans les cases vides, mais je veux bien un coup de main pour coder la mise en forme du graph pour l'attribution des axes X et Y en fonction des séries.

Merci

Le TCD me permettais d'orienter les séries sur les axes. Avec cette méthode tout est sur l'axe X et je ne sais pas comment déplacer les séries sur l'axe Y

8classeur-v2.zip (584.26 Ko)

re,

une autre possibilitédans la feuille "Ligne 1Bis"

12classeur-v2.zip (1.10 Mo)

Merci BsAlv pour ta solution.

Sinon j'ai trouvé ça de mon coté pour automatiquement relier les points entre les cellules vides:

ActiveChart.DisplayBlanksAs = xlInterpolated

Merci à ceux qui pris le temps de m'aider.

Rechercher des sujets similaires à "graphique relier points donnees courbe"