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 :

VBA - intégrer deux séries de données sur un même graphique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2023
    Messages : 2
    Par défaut VBA - intégrer deux séries de données sur un même graphique
    Bonjour,

    Je suis débutante en VBA, je cherche à ploter sur un même graphique une ou plusieurs série de données.
    Voici le code que j'utilise, la première série de données (celle définie avant la condition) se trace bien mais la deuxième non. Peux-être est-ce un problème de dénomination, je n'arrive pas à trouve le problème.
    Le but de cette manipulation est par la suite de tracer une courbe de tendance pour chaque série de données.

    Merci par avance,
    Bérénice.

    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
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    Sub ChangeColorAndSeparateData()
        Dim ws As Worksheet
        Dim lastRow As Long
        Dim valueRange As Range
        Dim previousValue As Variant
        Dim cell As Range
        Dim chartObj As ChartObject
        Dim chartDataRange As Range
        Dim seriesIndex As Integer
        Dim startRow As Long
        Dim endRow As Long
     
        ' Spécifiez la feuille de calcul sur laquelle vous travaillez
        Set ws = ThisWorkbook.Sheets("Iron_evol")
     
        ' Spécifiez la plage de données pour les valeurs
        With ws
            lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
            Set valueRange = .Range("B2:B" & lastRow)
        End With
     
        ' Parcourez les valeurs pour changer la couleur des cellules et séparer les séries de données
        previousValue = valueRange(1).Value
        seriesIndex = 1
        startRow = 2 ' Ligne de départ de la série de données en cours
        For Each cell In valueRange
            If cell.Value < (previousValue - 10) Then
                ' Changez la couleur de la cellule en rouge
                cell.Interior.Color = RGB(255, 0, 0)
     
                ' Définissez la ligne de fin de la série de données en cours
                endRow = cell.Row - 1
     
                ' Vérifiez s'il y a suffisamment de données pour créer un graphique en points
                If endRow >= startRow Then
                    ' Créez un graphique en points avec la série de données
                    Set chartObj = ws.ChartObjects.Add(Left:=10, Width:=400, Top:=10, Height:=300)
                    Set chartDataRange = ws.Range(ws.Cells(startRow, 1), ws.Cells(endRow, 2))
                    With chartObj.Chart
                        .ChartType = xlXYScatter
                        .SetSourceData Source:=chartDataRange
                        .HasTitle = True
                        .ChartTitle.Text = "Graphique série " & seriesIndex
                        .Axes(xlCategory).HasTitle = True
                        .Axes(xlCategory).AxisTitle.Text = "Valeurs x"
                        .Axes(xlValue).HasTitle = True
                        .Axes(xlValue).AxisTitle.Text = "Valeurs y"
                    End With
     
                    seriesIndex = seriesIndex + 1
                End If
     
                ' Définissez la ligne de départ de la prochaine série de données
                startRow1 = cell.Row
            End If
     
            previousValue = cell.Value
        Next cell
     
        ' Vérifiez s'il y a une dernière série de données après la dernière cellule colorée
        If hasSeries Then
            ' Définissez la ligne de fin de la dernière série de données
            endRow1 = lastRow
     
            ' Vérifiez s'il y a suffisamment de données pour créer un graphique en points
            If endRow1 >= startRow1 Then
                ' Créez un graphique en points avec la série de données
                Set chartObj = ws.ChartObjects.Add(Left:=10, Width:=400, Top:=10, Height:=300)
                Set chartDataRange = ws.Range(ws.Cells(startRow1, 1), ws.Cells(endRow1, 2))
                With chartObj.Chart
                    .ChartType = xlXYScatter
                    .SetSourceData Source:=chartDataRange
                    .HasTitle = True
                    .ChartTitle.Text = "Graphique série " & seriesIndex
                    .Axes(xlCategory).HasTitle = True
                    .Axes(xlCategory).AxisTitle.Text = "Valeurs x"
                    .Axes(xlValue).HasTitle = True
                    .Axes(xlValue).AxisTitle.Text = "Valeurs y"
                End With
            End If
        End If
     
     
     
    End Sub

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, je détecte une petite anomalie dans ton code qui peut poser problème, dans la ligne startRow1 = cell.Row, je constate que startRow1 n'est ni déclaré ni initialisé dans ton code.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2023
    Messages : 2
    Par défaut
    Merci, j'ai donc déclaré la variable startRow1 et la variable endRow1;
    startRow 1 est définie comme "= lastRow" j'ai tenté de modifié en mettant "startRow1 = endRow"

    Cependant un problème persiste, j'ai l'impression que le logiciel ne prends pas en compte la seconde partie du code. J'ai donc tenter d'enlever la partie concernant la création d'un graphique en haut du code et je l'ai ajouté la partie du bas.

    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
    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
    69
     
    Sub essaie()
     
     
        Dim ws As Worksheet
        Dim lastRow As Long
        Dim valueRange As Range
        Dim previousValue As Variant
        Dim cell As Range
        Dim chartObj As ChartObject
        Dim chartDataRange As Range
        Dim seriesIndex As Integer
        Dim startRow As Long
        Dim endRow As Long
        Dim startRow1 As Long
        Dim endRow1 As Long
     
        ' Spécifiez la feuille de calcul sur laquelle vous travaillez
        Set ws = ThisWorkbook.Sheets("Iron_evol")
     
        ' Spécifiez la plage de données pour les valeurs
        With ws
            lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
            Set valueRange = .Range("B2:B" & lastRow)
        End With
     
        ' Parcourez les valeurs pour changer la couleur des cellules et séparer les séries de données
        previousValue = valueRange(1).Value
        seriesIndex = 1
        startRow = 2 ' Ligne de départ de la série de données en cours
        For Each cell In valueRange
            If cell.Value < (previousValue - 10) Then
                ' Changez la couleur de la cellule en rouge
                cell.Interior.Color = RGB(255, 0, 0)
     
                ' Définissez la ligne de fin de la série de données en cours
                endRow = cell.Row - 1
     
                ' Définissez la ligne de départ de la prochaine série de données
                startRow1 = endRow
            End If
     
            previousValue = cell.Value
        Next cell
     
        ' Vérifiez s'il y a une dernière série de données après la dernière cellule colorée
        If hasSeries Then
            ' Définissez la ligne de fin de la dernière série de données
            endRow1 = lastRow
     
                    ' Créez un graphique en points avec la série de données
                    Set chartObj = ws.ChartObjects.Add(Left:=10, Width:=400, Top:=10, Height:=300)
                    Set chartDataRange = ws.Range(ws.Cells(startRow, 1), ws.Cells(endRow, 2))
                    Set chartDataRange = ws.Range(ws.Cells(startRow1, 1), ws.Cells(endRow1, 2))
                    With chartObj.Chart
                        .ChartType = xlXYScatter
                        .SetSourceData Source:=chartDataRange
                        .HasTitle = True
                        .ChartTitle.Text = "Iron evolution " & seriesIndex
                        .Axes(xlCategory).HasTitle = True
                        .Axes(xlCategory).AxisTitle.Text = "Valeurs x"
                        .Axes(xlValue).HasTitle = True
                        .Axes(xlValue).AxisTitle.Text = "Valeurs y"
                    End With
     
                    seriesIndex = seriesIndex + 1
                End If
     
    End Sub

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

Discussions similaires

  1. [V8] Odoo deux bases de données sur un même serveur
    Par aminaghedhab dans le forum Odoo (ex-OpenERP)
    Réponses: 4
    Dernier message: 03/12/2016, 00h21
  2. [MySQL-5.5] Comment synchroniser deux bases de données sur le même serveur ?
    Par AssoumaniSaid dans le forum Administration
    Réponses: 1
    Dernier message: 29/08/2014, 17h35
  3. [XL-2007] Deux séries de données sur un même graphique.
    Par Sylvestre1986 dans le forum Excel
    Réponses: 1
    Dernier message: 11/09/2012, 12h22
  4. Réponses: 1
    Dernier message: 04/08/2011, 10h11
  5. [MySQL] Connexion à deux bases de données sur la même page !
    Par Mike91 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/06/2008, 10h27

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