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 :

Plusieurs series sur un même graph ? [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 67
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    J'ai un classeur comportant une liste de noms. En cliquant sur une ligne, j'ajoute à un graphique, une courbe correspondant à la personne sur laquelle j'ai cliqué. Jusque là tout se passe bien. Seulement je souhaiterais pouvoir comparer plusieurs courbes et donc les afficher sur le même graph. Je ne sais pas pourquoi, lorsque je clique sur une deuxième personne la première courbe est supprimée pour laisser place a la seconde... Voilà mon code :
    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
    Dim mongraph As Chart, mafeuille As Worksheet, plagedonnee As Range                       
    Dim plagex As Range, plagey As Range, maserie As Series, maserie2 As Series, compteur As Long, plagegraph As Range
     
            Set plagegraph = Worksheets("graphevo").Range("B3:P28")
            Set mafeuille = ThisWorkbook.Worksheets("tmpgraph")
     
            k = 6
     
                While Worksheets("tmpgraph").Cells(2, k) <> Worksheets("graphevo").Cells(rw, 1)
                k = k + 3
            Wend
     
            With mafeuille
     
                Set plagedonnee = .Range(.Cells(4, k - 1), .Cells(4, k - 1).End(xlDown)).Resize(, 2)
     
            End With
     
            Set mongraph = ThisWorkbook.Worksheets("graphevo").ChartObjects.Add(plagegraph.Left, plagegraph.Top, plagegraph.Width, plagegraph.Height).Chart
            mongraph.ChartType = xlLine
            Set plagey = plagedonnee.Columns(1)
     
            For compteur = 1 To plagedonnee.Columns.Count - 1
                Set plagex = plagey.Offset(, compteur)
                Set maserie = mongraph.SeriesCollection.NewSeries
                With maserie
                    .Values = plagey
                    .XValues = plagex
                End With
                mongraph.HasTitle = True
                With mongraph.ChartTitle
                .Text = "blabla"
                End With
                With mongraph.Axes(xlCategory)
                .HasTitle = True
                .AxisTitle.Text = "Temps"
                End With
                With mongraph.Axes(xlValue)
                   .HasTitle = True
                    .AxisTitle.Text = "Salaire"
                End With
            Next compteur
    Je pense qu'il faut utiliser "Add" quelque part mais je ne sais pas trop où...
    De plus je souhaiterais ensuite pouvoir retirer la courbe de mon choix en cliquant de nouveau sur le nom de la personne. Mais comment faire le lien entre la personne et sa série...?

    En vous remerciant.

    En fait le soucis vient de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set plagedonnee = .Range(.Cells(4, k - 1), .Cells(4, k - 1).End(xlDown)).Resize(, 2)
    En effet je tracais un nouveau graph sur l'ancien a chaque clic. Donc j'ai essayé de placer cette ligne dans une procédure initialize ou activate mais j'ai l'erreur d'exécution 9: l'indice n'appartient pas a la sélection... Et cette erreur apparait chaque fois que je fais référence a pon graph dans une procédure autre que celle dans laquelle je "set" ce graph. J'ai déclaré le graph en "public" mais pas de changements. Idem lorsque je cherche a faire un "clear" à l'ouverture du classeur...
    Merci de votre aide
    EDIT: petite question supplémentaire... Une fois que j'ai tracé 5 courbes par exemple, comment faire référence a la 1ere courbe ou à la 3eme ?
    Sachant que j'ai renommé les courbes en "nom de la personne sélectionnée" est ce que je peux y faire référence par son "name" ? J'ai tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While mon graph.SeriesCollection(i). maserie <> nom
            i = i + 1
    Wend
    Sans succès...

    Merci pour votre aide...

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ton approche est non claire sur le bout de code que tu proposes et l’explication données.

    Ton code crée un nouveau graphique alors que tu parle d'ajouter une série à un graphique (déjà existant)

    Précises donc tes explications clairement et avec le cas échéant un petit classeur exemple.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2014
    Messages : 41
    Points : 42
    Points
    42
    Par défaut
    Hello,

    J'ai pas cherché à comprendre le code, mais voilà le code que j'utilise pour avoir 2 courbes sur le même graph:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim c as ChartObject
     
        ......
     
        With c.Chart 
        .SetSourceData Source:=RanYvalues1
        .SeriesCollection(1).XValues = RanXvalues
        .SeriesCollection.NewSeries
        .SeriesCollection(2).Values = RanYvalues2
        .SeriesCollection(2).ChartType = xlLineMarkersStacked  
         End With
    En espérant que ça te donne au moins une piste.

    Bonne journée,
    YanBos

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Quel est ton besoin?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 67
    Points : 50
    Points
    50
    Par défaut
    Je vais essayer d'être le plus clair possible mais il est vrai que l'histoire est un peu tordue. Donc... J'ai une feuille excel sur laquelle se trouve une liste de nom (une colonne)et a coté de chaque nom une case "ajouter" et une case "retirer".
    Ça ressemble a ça :
    Toto1 ajouter retirer
    Toto2 ajouter retirer
    Toto3 ajouter retirer
    ...

    Je souhaiterais que lorsque je clique sur "ajouter", le programme trace la courbe correspondant à l'évolution de la personne. Les données pour les series se créées au moment ou je clique sur ajouter( je vais chercher les infos dans une feuille et les tris dans une autre de façon a obtenir 2 colonnes par courbes; une pour l'axe des abscisses, l'autre pour l'axe des ordonnées). Je souhaiterais aussi qu'en cliquant sur la case " retirer" la courbe correspondant à la personne disparaisse. L'idée étant de pouvoir comparer autant de personnes que l'on souhaite.
    Mes soucis principaux sont :
    - je n'arrive pas à ajouter une série sans créer un nouveau graph a chaque fois.
    - je ne connais pas a l'avance le nombre de series qu'il va y avoir et donc je ne sais pas comment y faire référence pour ne supprimer que celle que je désire.
    Le graph se trace sur la même feuille que la liste de noms.
    J'espère avoir été un peu plus clair.
    Excusez la qualité de mon code, je suis en pleine phase d'apprentissage.

    Merci de vous intéresser à mon problème

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    C'est faisable, as tu un fichier exemple (sans données confidentielles ou dois-je créer un au hasard)?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 67
    Points : 50
    Points
    50
    Par défaut
    Voilà un doc exemple sur le même modèle que celui sur lequel je bosse. La feuille 2 est peut être un peu dure a lire donc je détaille. Il y a 3 colonnes par agent. Seule les 2 premières colonnes m'intéressent pour tracer les courbes. La première colonne représenterait un salaire et la 2eme la date a laquelle le salaire a évolué. La 3eme colonne représente les augmentations reçues elle me sert a calculer le salaire avant augmentation. Il y a aussi la date d'embauche pour donner un point de départ au graph. Je n'ai mis que 3 agents, il y en a un nombre variable en réalité. La feuille 2 n'existe pas en tant que telle dans mon programme, elle se remplis quand je clique sur ajouter et se vide lorsque je clique sur retirer
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Grande artillerie utilisant entre autre les modules de classe pour une meilleure évolution.

    1. Feuille:
    Sur le feuille des données Feuil1, on ajoute des contrôles ActiveX Bouton Bascule qu'on nomme à l'aide de ses propriétés comme ceci tg_NomX (le nom du bouton doit commencer par tg_ ). Ensuite dans la caption du bouton on inscrit le nom de la personne à qui il se réfère (Exactement les mêmes noms).

    On insère un graphique de type nuage de points vide sur la feuille Feuil1.

    2. Code VBA
    2.1 On insère un module de classe (par défaut nommé Classe1) et on y met le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
     
    Public WithEvents TOG As ToggleButton
     
    Private Sub TOG_Click()
    Dim LeNom As String
     
    LeNom = TOG.Caption
    TOG.ForeColor = IIf(TOG, RGB(0, 0, 255), 255)
    Tracer LeNom, TOG
    End Sub
    2.2 On insère un module standard et on y met le code suivant:
    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
    Option Explicit
     
    Sub Tracer(ByVal Nom As String, ByVal Adding As Boolean)
    Dim PlageX As Range, c As Range
    Dim Ws As Worksheet
    Dim LastLig As Long, Deb As Long, LigNoms As Long
    Dim Sr As Series
    Dim Ch As Chart
     
    LigNoms = 2                                      'Ligne correspondant aux noms de Feuil2
    Deb = 4                                          'Ligne correspondant au début des données à tracer de Feuil2
    Set Ch = Worksheets("Feuil1").ChartObjects(1).Chart
    If Adding Then                                   'Ajout de la série
        Set Ws = Worksheets("Feuil2")
        Set c = Ws.Rows(LigNoms).Find(Nom, LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then
            LastLig = Ws.Cells(Ws.Rows.Count, c.Column).End(xlUp).Row
            Set PlageX = Ws.Cells(Deb, c.Column).Resize(LastLig - Deb + 1)
            With Ch.SeriesCollection.NewSeries
                .Name = Nom
                .XValues = PlageX
                .Values = PlageX.Offset(, -1)
            End With
            Set PlageX = Nothing
            Set Ws = Nothing
        End If
    Else                                             'Suppression de la série
        For Each Sr In Ch.SeriesCollection
            If Sr.Name = Nom Then
                Sr.Delete
                Exit For
            End If
        Next Sr
    End If
    End Sub
    2.3 On ajoute le code suivant au module de la feuille Feuil1
    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
    Option Explicit
     
    Dim TogClas() As Classe1
     
    Private Sub Worksheet_Activate()
    Dim i As Integer
    Dim Ct As Object
     
    For Each Ct In ActiveSheet.OLEObjects
        If Left(Ct.Name, 3) = "tg_" Then
            i = i + 1
            ReDim Preserve TogClas(1 To i)
            Set TogClas(i) = New Classe1
            Set TogClas(i).TOG = Ct.Object
        End If
    Next Ct
    End Sub
    2.4 On ajoute le code suivant au module ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
     
    Private Sub Workbook_Open()
     
    Worksheets("Feuil2").Activate
    End Sub
    PS. Avantage, on peut ajouter comme on veut des boutons bascules, il suffit de les renommer tg_XXX et de reporter le nom de la personne sur leur caption.
    Sans toucher au code, ils seront pris en considération.

    Lien pour ton fichier exemple


    Edit:

    Corrigé après relecture
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 67
    Points : 50
    Points
    50
    Par défaut
    Wow... Merci beaucoup.
    J'ai testé sur le fichier exemple ça me semble parfait... J'essaye de l'adapter a mon programme et je vous dis ce qu'il en est.
    Merci encore.

    Re,
    J'ai encore un petit soucis. Sur le document exemple, la feuille1 ne comporte que 3 noms. Dans mon vrai programme, la liste de nom est créée chaque fois que je clique sur un checkbox. Cette liste de noms vient de ma base de données, base de données qu'il est possible de modifier.
    Par conséquent, je souhaiterais automatiser la création des boutons bascule de façon a ce qu'il se créés en même temps que la liste de noms.
    J'ai donc utilisé le sub suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub bouton()
    Dim ole as OLEObjects
    Thisworkbook.Worksheets ("graphevo").Activate
    Set ole = ActiveWorkbook.ActiveSheet.OLEObjects.Add_
    (ClassType:="Forms.ToggleButton.1", _
    Link:=False, DisplayAsIcon:= False, Left:=400, _
    Top:= 22 * (rangee - 1), Width:=40.5, Height:=21)
    ole.Name = "tg_" & rangee
    ActiveSheet.OLEObjects("tg_" & rangee). Objectif.Caption_
    = ActiveSheet.Cells(rangee, 1)
    J'ai l'erreur d'exécution 13: incompatibilité de type sur la ligne Set ole = …
    Ceci dit, un bouton est créé quand même... A l'endroit souhaité. Mais l'exécution s'arrête la. Ce même code fonctionne sur mon classeur test.
    La worksheets "graphevo" est celle sur laquelle se trouve ma liste de nom.
    rangee est une variable publique, initialisée avant l'appel du sub. Elle vaut 41 la première fois. Ce sub est appelé dans une boucle while et doit se répéter autant de fois qu'il y a de noms.

    Merci de votre aide

    EDIT: Si je ne déclare pas ole j'ai un message "impossible d'entrer en mode arrêt maintenant" et le choix entre "continuer" ou "fin". Si je continue, j'ai l'erreur 438:"propriété ou méthode non gérée par cet objet"

  10. #10
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Avant de partir vers une usine à gaz probable, n'est il pas mieux d'utiliser un contrôle ActiveX Listbox avec choix multiple sur Feuil1.

    L'utilisateur cochera les items à afficher ou nom (comme le filtre de page d'un graphique croisé dynamique)

    Cette ListBox sera alimentée dynamiquement en fonction du nombre de personnes de Feuil1.

    Bon voilà une autre variante sans module de classe et assez simple et surtout adaptable sans rien ajouter excepté la mise à jour de la liste.

    Feuil1:

    Ajouter un bouton pour la mise à jour, appelé MAJ
    Ajouter une Listbox pour le choix des séries à tracer, appelée LST

    Dans le module de Feuil1 mettre les codes suivants:
    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
    87
    88
    Option Explicit
     
    Private Const Deb As Integer = 1                      'N° ligne titres de Feuil2
     
    '=================================================================================================
    'Mise à jour de LST en fonction des noms sur Feuil2
    'Le formatage de LST se fait par code
    'LST est à 2 colonnes. Dans la première le Nom et en seconde le n° de colonne des dates correspondants au nom (2° colonne cachée)
    '=================================================================================================
    Private Sub MAJ_Click()
    Dim LastCol As Integer
    Dim c As Range
     
    Application.ScreenUpdating = False
    SupprSer
    With Feuil1.LST
        .MultiSelect = fmMultiSelectMulti
        .ColumnCount = 2
        .ColumnWidths = .Width - 150 & ";0"
        .ListStyle = fmListStyleOption
        .PrintObject = False
        .Clear
    End With
     
    With Feuil2
        LastCol = .Cells(Deb, .Columns.Count).End(xlToLeft).Column
        For Each c In .Cells(Deb, 1).Resize(, LastCol)
            If c = "Nom" Then
                With Feuil1.LST
                    .AddItem c.Offset(1)
                    .List(.ListCount - 1, 1) = c.Column
                End With
            End If
        Next c
    End With
    End Sub
     
    '=================================================================================================
    'Permet de supprimer toutes les séries du graphique
    '=================================================================================================
     
    Private Sub SupprSer()
    Dim Sr As Series
     
    For Each Sr In Feuil1.ChartObjects(1).Chart.SeriesCollection
        Sr.Delete
    Next Sr
    End Sub
     
    '=================================================================================================
    'A la sélection d'un item de LST, toutes les séries sélectionnées sont tracées
    '=================================================================================================
     
    Private Sub LST_Change()
    Dim i As Integer
     
    Application.ScreenUpdating = False
    SupprSer
    With Feuil1.LST
        For i = 0 To .ListCount - 1
            If .Selected(i) Then Trace .List(i, 1)
        Next i
    End With
    End Sub
     
    '=================================================================================================
    'Permet de tracer la courbe correspondant aux données de la colonne Col (colonne des dates)
    '=================================================================================================
     
    Private Sub Trace(ByVal Col As Integer)
    Dim LastLig As Long
    Dim PlageX As Range
    Dim Nom As String
    Dim Ch As Chart
     
    Set Ch = Feuil1.ChartObjects(1).Chart
    With Feuil2
        LastLig = .Cells(.Rows.Count, Col).End(xlUp).Row
        Nom = .Cells(Deb + 1, Col)
        Set PlageX = .Cells(Deb + 3, Col).Resize(LastLig - Deb - 2)
    End With
    With Ch.SeriesCollection.NewSeries
        .Name = Nom
        .XValues = PlageX
        .Values = PlageX.Offset(, -1)
    End With
    Set PlageX = Nothing
    End Sub
    Il suffit de mettre à jour la listebox et de choisir les séries désirées

    Fichier exemple joint
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 67
    Points : 50
    Points
    50
    Par défaut
    Un grand merci, je suis bluffé par la qualité du code que tu m'as fourni. Ça tourne parfaitement en revanche je bloque sur un tri. Le remplissage de la feuille 2 commence par une copie des AI et dates d'AI. Après ça je souhaite faire un tri de ces 2 colonnes, par date de façon a pouvoir calculer le salaire facilement par simple soustraction de l'AI précédente(AI : Augmentation Individuelle).
    Du coup j'utilise la fonction sort. Ça fonctionne très bien sur mon fichier test mais quand je copie-colle me code dans mon programme ça ne va plus. Il trie bien un seul groupe de colonnes (parce que le tri se fait pour 2 colonnes) sur 3. Et toujours les mêmes colonnes, quelle que soit leur position sur la feuille. Les 2 autres groupes de colonnes sont triés bizarrement... Voilà le code que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    j=5
    m=1
    k=1
    o=1
    While feuil11.Cells(2, o+1) <> ""
       Feuil11.select
       Range(Cells (m+3,o+1), Cells(20, o+2)).Sort _
       Key1:=Range(Cells(5, o + 1), Cells(5, o + 1)), _
       Order1:=xlAscending, Header:=xlNo, MatchCase:=_
       False, Orientation:=xlTopToBottom
       j=j+4
       o=o+3
    Wend
    Merci encore pour votre aide.

    EDIT: Je viens de remarquer que ça ne fonctionne pas sur mon fichier test si je copie colle les colonnes a trier. Ça fonctionne avec des données entrées à la main directement sur le classeur, pas avec celle qui ont été créée par pon programme... Ceci dit je ne comprend toujours pas d'où vient le problème. Peut être un problème de format de date lorsque excel effectue la copie... ?

    J'ai trouvé réponse a mon problème. En fait il suffisait de faire une conversion en date au moment de la copie pour s'assurer que ce soit bien pris en charge. Du coup je ne comprends pas bien pourquoi excel ne conserve pas les formats date lors d'une copie mais au moins le programme fonctionne. Merci encore pour votre aide et plus particulièrement a mercatog pour le temps qu'il m'a consacré et les lignes de code qu'il m'a envoyé. Super forum, je le recommanderait.

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 67
    Points : 50
    Points
    50
    Par défaut
    Dernier soucis... Lorsque j'adapte le code de mercatog a mon programme ( rien ne change a part le nom des feuilles) les graphs ont tous les mêmes données en X. Des l'instant ou j'affiche au moins 2 courbes, les valeurs en X deviennent celles de la colonne des dates la plus a gauche de la feuille 2. Autrement dit, si je decide d'afficher la courbe de "Ali baba" et "Aladin", les valeurs en X seront celles de " Ali baba" pour les 2 courbes. Si je veux afficher "Aladin" et "sinbad" les valeurs en X seront celles de "aladin". Je me suis penché sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set plageX = .Cells(Deb + 3, Col).Resize(lastlig - Deb - 2)
    En faisant l'exécution pas a pas j'ai observé que la valeur de " Col" évoluait comme il faut. C'est a dire que si je veux afficher une seule courbe Col=2, pour 2 courbes, Col = 2 a la première itération et Col =5 a la deuxième, si je trace 3 courbes, col=2 puis col = 5 puis col = 8...
    Du coup je ne comprends pas d'où peut venir le problème si ce n'est pas de cette ligne.
    Merci encore

  13. #13
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ce que tu décris là nécessite de voir le fichier exemple
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 67
    Points : 50
    Points
    50
    Par défaut
    Le fichier joint est identique à celui que j’utilise, j’ai juste retiré tout ce qui pouvait être confidentiel. Bien entendu cette version n’est pas définitive, je travaille dessus actuellement mais toutes les fonctions (ou presque) fonctionnent comme je le souhaite. Pour te rendre dans la partie qui nous intéresse, je te conseille de lancer la macro en partant du UserForm « Accueil ». A partir de cette fenêtre, c’est en cliquant sur le bouton « Graphique Evolution » que l’on tombe sur le graphique qui me pose problème. Je pense que le reste du programme n’est pas intéressant pour ce graphique mais si besoin, tout y est, code et classeur.
    Désolé encore une fois de la pauvre qualité du code et merci encore pour le temps que tu m'accorde.
    Fichiers attachés Fichiers attachés

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 67
    Points : 50
    Points
    50
    Par défaut
    Pour moi c'est parfait, ça remplit la fonction souhaitée comme il se doit. Un grand merci a mercatog
    Sujet resolu

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

Discussions similaires

  1. [Débutant] affichage de plusieurs series sur meme graph
    Par mabidabid dans le forum VB.NET
    Réponses: 2
    Dernier message: 11/05/2015, 18h04
  2. Plusieurs series sur un même graph ?
    Par swiMa dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2014, 18h29
  3. Tracer plusieurs courbes sur le même graphe
    Par T-MAT dans le forum MATLAB
    Réponses: 6
    Dernier message: 31/12/2011, 18h32
  4. Réponses: 1
    Dernier message: 14/07/2007, 14h19
  5. Réponses: 4
    Dernier message: 14/10/2004, 17h36

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