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 :

Problème avec les seriescollection (VBA) [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Par défaut Problème avec les seriescollection (VBA)
    Bonjour,

    J'ai un léger problème avec l'utilisation des seriescollection, je n'ai pas le code ici, je regarderais mardi au besoin pour l'ajouter, mais je veux déjà voir si quelqu'un aurait une idée.
    Donc j'ai deux feuilles, une contenant des numéros de référence avec une date de début et date de fin, une autre avec le nom de différentes personnes comme nom de colonne, j'attribue ensuite les numéros de référence à ces personnes.
    Avec ça je dois générer un graphique, dans lequel pour chaque personne sur l'axe des Y il y aura leurs noms, et la durée de chaque numéro de référence calculé à partir de la date de début et de fin. La durée étant mis sur l'axe des X du coup.

    J'utilise donc un chart et j'ajoute des seriescollection au chart. Pour chaque seriescollection, je déclare donc que c'est une newseries, ensuite dans la values je met le temps en heure calculé grace à une méthode qui va me rechercher les dates de début et de fin et calculer le temps.
    Pour le XValues je récupère le nom de la personne à qui ça doit être attribué. Et le name je met le numéro de référence.

    Hors, toutes mes seriescollection vont se mettre tous à la même personne, à la place de s'attribuer au bonne personne.

    Est-ce que quelqu'un aurait une idée ?

    Si sans le code personne ne voit, je le rajouterais mardi.

  2. #2
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour,
    Je crois deviner le problème, malgré le manque de clarté de vos explications. J'attendrais la lecture de votre code ou des détails supplémentaires pour être sur d'éviter de vous dire des bétises.
    Toutefois, réflechissez bien au nombre de variables possibles dans un graphique. Je suis sur que vous allez trouver par vous même.
    Cordialement

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Par défaut
    Bonjour,

    J'ai bien des idées pour les variables, mais bon malgré un certains nombres de test, ça ne donnait pas de résultat, voici le code en entier :

    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    ' Charge le graph
    Private Sub LoadHisto()
        Dim MyChart As Chart
        Dim ChartData As Range
        Dim chartIndex As Integer
        'Dim ChartName As String
     
        chartIndex = 0
     
        Application.ScreenUpdating = False
        Set MyChart = Worksheets("Feuil2").Shapes.AddChart(xlBarStacked).Chart
     
     
        With MyChart
     
            .HasTitle = True
            .Parent.Name = "Planning"
            .ChartTitle.Text = "Planning Cab"
     
            .Axes(xlCategory, xlPrimary).HasTitle = True
            .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Cab"
            .Axes(xlCategory).CategoryNames = Worksheets("Feuil2").Range("A1:F1")
            .HasLegend = False
     
            .Axes(xlValue, xlPrimary).HasTitle = True
            .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Heures"
            ' Met la valeur de 0 de base et 160 heures max mois, ainsi qu un decoupage par 24h
            .Axes(xlValue).MinimumScale = 0
            .Axes(xlValue).MaximumScale = 250
            .Axes(xlValue).MajorUnit = 24
     
     
            ' PART CALCUL ROW FOR EACH COLUMN
            Dim lngLastRowA As Long
            Dim lngLastRowB As Long
            Dim lngLastRowC As Long
            Dim lngLastRowD As Long
            Dim lngLastRowE As Long
            Dim lngLastRowF As Long
     
            lngLastRowA = Worksheets("Feuil2").Cells(Rows.Count, "A").End(xlUp).Row
            lngLastRowB = Worksheets("Feuil2").Cells(Rows.Count, "B").End(xlUp).Row
            lngLastRowC = Worksheets("Feuil2").Cells(Rows.Count, "C").End(xlUp).Row
            lngLastRowD = Worksheets("Feuil2").Cells(Rows.Count, "D").End(xlUp).Row
            lngLastRowE = Worksheets("Feuil2").Cells(Rows.Count, "E").End(xlUp).Row
            lngLastRowF = Worksheets("Feuil2").Cells(Rows.Count, "F").End(xlUp).Row
     
            Dim incr As Integer
            incr = 1
            incr = AddSeriesToChart(MyChart, 2, lngLastRowB, "B", incr)
            incr = AddSeriesToChart(MyChart, 2, lngLastRowC, "C", incr)
     
        End With
     
        ' MsgBox "The default file path is " & Application.DefaultFilePath
     
        Dim imageName As String
        imageName = Application.DefaultFilePath & Application.PathSeparator & "TempChart.gif"
     
        MyChart.Export Filename:=imageName
     
        Worksheets("Feuil2").ChartObjects(1).Delete
     
        Application.ScreenUpdating = True
     
        UserForm1.Image1.Picture = LoadPicture(imageName)
     
        LoadPicture (imageName)
    End Sub
     
    ' Ajoute une series collection au chart
    Private Function AddSeriesToChart(MyChart As Chart, ColDebut As Integer, ColFin As Long, RangeName As String, j As Integer) As Integer
        Dim i As Integer
        Dim ser As Series
     
        With MyChart
            i = j
            For Each cell In Worksheets("Feuil2").Range(RangeName & ColDebut & ":" & RangeName & "" & ColFin)
                'MsgBox (cell.value)
                If Not IsEmpty(cell.value) And IsNumeric(cell.value) Then
                    .SeriesCollection.NewSeries
                    .SeriesCollection(i).XValues = Worksheets("Feuil2").Range(RangeName & "1:" & RangeName & "1")
                    .SeriesCollection(i).Values = CalculTimeOF(cell.value)
                    .SeriesCollection(i).Name = cell.value
                    'MsgBox (.SeriesCollection(inc).Formula)
                    .SeriesCollection(i).HasDataLabels = True
                    .SeriesCollection(i).Points(1).DataLabel.Text = cell.value
                    .SeriesCollection(i).Points(1).DataLabel.Font.Bold = True
                    .SeriesCollection(i).Points(1).DataLabel.Font.Color = "White"
                    i = i + 1
                End If
            Next cell
        End With
        AddSeriesToChart = i
    End Function
     
    ' Renvoi le temps calculer pour chaque OF
    Private Function CalculTimeOF(numberOF As String) As Integer
        Dim StartDate As Date
        Dim EndDate As Date
        Dim numberRow As String
        Dim DayStart As Integer
        Dim DayEnd As Integer
        Dim DiffDay As Integer
        Dim TimeBase As Integer
        Dim TimeDiffDay As Integer
     
        numberRow = FindValueOF(numberOF)
     
        StartDate = Format(CDate(Worksheets("Feuil1").Range("Q" & numberRow).value), "dd/mm/yyyy")
        EndDate = Format(CDate(Worksheets("Feuil1").Range("F" & numberRow).value), "dd/mm/yyyy")
     
        DayStart = Day(StartDate)
        DayEnd = Day(EndDate)
     
        DiffDay = DayEnd - DayStart
     
        TimeBase = 8
     
        TimeDiffDay = DiffDay * TimeBase
     
        CalculTimeOF = TimeDiffDay
    End Function
     
    ' Trouve le numero de ligne de l OF selectionné
    Private Function FindValueOF(value As String) As String
     
    Dim lngLastRow As Long
    Dim strRowNoList As String
     
    intMyVal = 1 'Value to search for, change as required.
    lngLastRow = Worksheets("Feuil1").Cells(Rows.Count, "C").End(xlUp).Row 'Search Column A, change as required.
     
    For Each cell In Worksheets("Feuil1").Range("C2:C" & lngLastRow) 'Starting cell is A2, change as required.
     
        If cell.value = value Then
            If strRowNoList = "" Then
            strRowNoList = strRowNoList & cell.Row
            Else
            strRowNoList = strRowNoList & ", " & cell.Row
            End If
        End If
    Next cell
     
    FindValueOF = strRowNoList
     
    End Function
    même si je lui met en XValue Worksheets("Feuil2").Range("A1:F1") pour avoir la liste des personnes
    et en Name de la series le nom de la personne avec Worksheets("Feuil2").Range(RangeName & "1:" & RangeName & "1")
    il met toujours à une seule personne toutes les valeurs ajoutés

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Par défaut
    C'est bon finalement, j'ai résolu mon problème. Il fallait mettre le range des noms dans la xvalue, et jouer avec les .Points(x), pour mettre les series sur les noms que je voulais, j'ai chipoter un peu pour faire ça avec une array, mais c'est good

    ----

    Edit : Sauf que du coup finalement il ne me met plus qu'un numéro de référence par personne lol, bon faut que je chipote encore un peu
    ---
    redit : Non rien dit, mon graphique était trop petit pour afficher ce qui venait après xD

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

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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