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

Excel Discussion :

Graphique et séries automatiques


Sujet :

Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Graphique et séries automatiques
    Bonjour à tous,

    Je souhaiterais que mon graphique Excel se génère tout seul de la façon suivante :

    Colonne 1 = valeur en ordonnée Y du graph
    Colonne 2 = valeur en X

    dans la colonne 3 se trouve un numéro. Toutes les lignes ayant le même numéro dans la colonne 3 doivent générer une Série (une courbe) dans le graphique. Ainsi, il faudrait que les séries se génèrent automatiquement, par regroupement de la valeur contenue dans la 3ème colonne. Voici une capture d'écran de la solution faite manuellement, j'aurai donc voulu l'automatiser : Est-ce possible ?



    Merci d'avance !

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    En D1, tu mets la valeur 1000.

    En D2, tu mets la formule :
    Attention, la place des $ a beaucoup d'importance.

    Tu la recopies vers le bas autant de fois que tu as de données.

    Tu recopies ta colonne D vers la droite autant que tu as de valeurs différentes en colonne C, c'est-à-dire pour autant de courbes que ton graphique aura à montrer.

    Tu changes les valeurs en entête de chaque colonne en fonctions de la valeur représentée par ta courbe.

    Tu utilises comme ordonnées de ton graphique les valeurs des colonnes D et suivantes.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Une autre solution:
    Pour chaque série, tu définis deux noms :

    Serie1X défini par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(Feuil1!$B$1;EQUIV(1;Feuil1!$C:$C;0)-1;;NB.SI(Feuil1!$C:$C;1))
    le "1" de EQUIV et NB.SI correspond au nombre en colonne C
    Serie1Y défini par : Trace ton graphique avec ces deux noms.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos réponses. Le problème c'est qu'il faut quand même manuellement créer un graphique, puis définir les séries une par une à la main... Est-ce possible de rendre la source de donnée du graphique automatique, c'est à dire qu'une série se créé automatiquement lorsqu'on ajoute un nouveau numéro dans la 3ème colonne qui n'y était pas avant?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Alors, il faut faire une macro. Est-ce que tu connais un peu. Autre chose, tu as l'air d'avoir plusieurs séries pour les mêmes abscisses. Comment sont-elles classées ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Oui je connais VBA. Pour chaque série (données de 3e identiques), il y a plusieurs ligne (nombre aléatoire), l'abscisse est une date classée de façon chronologique. Par contre entre 2 séries ce ne sont pas forcément les mêmes dates.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Attache la macro suivante à un bouton :

    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
    Sub Actualiser()
        Dim PlageX As Range, PlageY As Range, C As Range, I As Integer, Nseries As Integer
        Dim Série As Series
        With Sheets("Feuil1")
            Nseries = Application.Max(.[C:C])
            With .ChartObjects(1).Chart
                For I = .SeriesCollection.Count To 1 Step -1
                    .SeriesCollection(I).Delete
                Next I
            End With
            For I = 1 To Nseries
                Set C = .[C:C].Find(I, , , xlWhole)
                If Not C Is Nothing Then
                    Set PlageY = .Cells(C.Row, 1).Resize(Application.CountIf(.[C:C], Nseries))
                    Set PlageX = PlageY.Offset(, 1)
                End If
                With .ChartObjects(1).Chart
                    Set Série = .SeriesCollection.NewSeries
                    Série.XValues = PlageX
                    Série.Values = PlageY
                End With
            Next I
        End With
    End Sub
    Classeur exemple : pitxo.xlsm
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Attache la macro suivante à un bouton :
    Pour que ce soit vraiment automatique, le mieux serait sans doute de mettre ce code dans une macro évènementielle comme Change de Worksheet mais ça risque de beaucoup alourdir l'utilisation de la feuille.
    Le bouton est sans doute un bon compromis.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour Menhir,

    Je ne vois pas ce qui pourrait déclencher une macro événementielle, vu qu'on ne sait pas quand la saisie est terminée (nombre de séries, nombre de points de chaque série...).
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  10. #10
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Je ne vois pas ce qui pourrait déclencher une macro événementielle, vu qu'on ne sait pas quand la saisie est terminée (nombre de séries, nombre de points de chaque série...).
    C'est justement pour ça que je dis que ce serait très lourd : il faudrait que ça se déclenche à chaque saisie avec un évènement Change.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour cet exemple de fichier, dans l'idée c'est vraiment ça !
    Par contre après avoir regardé ton code, je ne comprends pas tout : il semble que seul la dernière série influence l'actualisation du graphique : par exemple si on rajoute des lignes à la série 1, ca n'actualise rien, mais à la série 2 ca influence aussi la série 1... ?

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Exact, le rouge de la honte me monte au front Le code rectifié est :

    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
    Sub Actualiser()
        Dim PlageX As Range, PlageY As Range, C As Range, I As Integer, Nseries As Integer
        Dim Série As Series
        With Sheets("Feuil1")
            Nseries = Application.Max(.[C:C])
            With .ChartObjects(1).Chart
                For I = .SeriesCollection.Count To 1 Step -1
                    .SeriesCollection(I).Delete
                Next I
            End With
            For I = 1 To Nseries
                Set C = .[C:C].Find(I, , , xlWhole)
                If Not C Is Nothing Then
                    Set PlageY = .Cells(C.Row, 1).Resize(Application.CountIf(.[C:C], I))
                    Set PlageX = PlageY.Offset(, 1)
                End If
                With .ChartObjects(1).Chart
                    Set Série = .SeriesCollection.NewSeries
                    Série.XValues = PlageX
                    Série.Values = PlageY
                End With
            Next I
        End With
    End Sub
    S'il y a quelque chose que tu ne comprends pas, dis-le.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ca marche super là par contre je ne comprends pas pourquoi, mais quand je change le nom des séries (par exemple que je met 1000 a la place de 1), ca bug : La méthode 'XValues' de l'objet 'Séries' a échoué. Ca concerne la ligne "Série.XValues = PlageX"...

  14. #14
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Parce que la macro est faite pour commencer à la série 1 et ensuite, elle cherche les incréments de 1 jusqu'à trouver le numéro de la série max. Si tu mets 1000, je m'attends à trouver 1, 2, 3, ...1000. On peut faire autrement si tu dis ce dont tu as besoin.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Ah oui ok !!! Je vois ça. En fait il n'y a pas forcément d'ordre numérique dans le nom des séries... ca peut commencer à 1000, il peut y avoir un saut de valeurs (par exemple 1000, 1021, 1021, 3000)... etc

  16. #16
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Mais s'il y a deux 1021, on ne peut pas s'en servir comme nom de série ? Sinon :

    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
    Sub Actualiser2()
        Dim PlageX As Range, PlageY As Range, C As Range, I As Integer
        Dim Série As Series, Res As Long
        With Sheets("Feuil4")
            With .ChartObjects(1).Chart
                For I = .SeriesCollection.Count To 1 Step -1
                    .SeriesCollection(I).Delete
                Next I
            End With
            For Each C In .Range("C2", .Cells(.Rows.Count, 3).End(xlUp))
                If C <> "" Then
                    If C <> Res Then
                        Res = C.Value
                        .[G1].FormulaArray = "=Match(True," & C.Resize(1000).Address & "= """", 0)-1"
                        Set PlageY = C.Offset(, -2).Resize(.[G1])
                        Set PlageX = PlageY.Offset(, 1)
                        .[G1] = ""
                        With .ChartObjects(1).Chart
                            Set Série = .SeriesCollection.NewSeries
                            Série.XValues = PlageX
                            Série.Values = PlageY
                        End With
                    End If
                Else
                    Res = 0
                End If
            Next C
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Pardon je voulais dire 1022... en gros il n'y a pas d'ordre logique, ca commence n'importe où et il peut y avoir des trous dans les valeurs des séries.


    Ton code marche mieux, mais dès qu'on a des dates commune cela semble se mélanger : la série qui ne devrait prendre que des valeurs 1000 va jusqu'à 1022 :

    Nom : 87125220151006151315MicrosoftExcelpitxo.png
Affichages : 277
Taille : 95,8 Ko

  18. #18
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Oui, j'ai sans doute rêvé qu'il y avait une cellule vide entre les séries. Je rectifie et je t'envoie le code, sans doute ce soir.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  19. #19
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    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
    Sub Actualiser2()
        Dim PlageX As Range, PlageY As Range, C As Range, I As Integer
        Dim Série As Series, Res As Long
        With Sheets("Feuil4")
            With .ChartObjects(1).Chart
                For I = .SeriesCollection.Count To 1 Step -1
                    .SeriesCollection(I).Delete
                Next I
            End With
            For Each C In .Range("C2", .Cells(.Rows.Count, 3).End(xlUp))
                If C <> "" Then
                    If C <> Res Then
                        Res = C.Value
                        Set PlageY = C.Offset(, -2).Resize(Application.CountIf(.[C:C], Res))
                        Set PlageX = PlageY.Offset(, 1)
                        With .ChartObjects(1).Chart
                            Set Série = .SeriesCollection.NewSeries
                            Série.XValues = PlageX
                            Série.Values = PlageY
                            Série.Name = Res
                        End With
                    End If
                Else
                    Res = 0
                End If
            Next C
        End With
    End Sub
    Daniel
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

Discussions similaires

  1. [Débutant] Interface Graphique de Reconnaissance Automatique de la Parole
    Par Moodisme dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 27/04/2015, 18h27
  2. [XL-2013] Graphique par secteur automatique
    Par Invité dans le forum Excel
    Réponses: 5
    Dernier message: 11/06/2014, 10h53
  3. Réponses: 3
    Dernier message: 22/05/2014, 09h03
  4. Série graphique mise à jour automatiquement
    Par blooby dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/05/2007, 10h35
  5. [VBA-E]Graphique mise à jour automatiquement qd suppression
    Par LostIN dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 16/01/2007, 16h42

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