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 :

Générer des graphiques [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre expérimenté
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2013
    Messages : 120
    Par défaut Générer des graphiques
    Bonjour,

    C'est encore moi



    J'attaque la troisième et dernière grosse partie du projet que je développe pour mon entreprise et je sèche complétement depuis 2 jours. A savoir, je dois générer lorsque l'utilisateur clique sur un bouton d'une barre personnalisé du ruban, un graphique(peu importe le type de graphique, ça reste adaptable). La feuille de donnée contient :

    -Colonne A : des noms de personnes qui sont répétés x fois
    -Colonne B : un nombre d'heure
    -Colonne C : des dates de travail
    -Colonne D : un numéro de projet
    -Colonne E : un nom de projet

    J'aimerais générer des graphiques pour retrouver le nombre d'heure que chaque personne à travaillé(se sera une bonne base de travail pour ensuite faire les autres graphiques que je dois implémenter).

    J'ai essayé plusieurs choses :

    -J'ai lu qu'on pouvait faire les instructions SQL de base pour pouvoir récupérer les données qu'on souhaite, ce que j'ai fait en faisant un sum sur le nombre puis un group by sur le nom de la personne(voir code ci dessous). Cependant je ne sais pas comment récupérer ces données pour soit les collées vers une autre feuille pour pouvoir génerer mon graphique grâce à cette plage, soit les affecter directement dans une plage de donnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim sSql As String
     
     
        sSql = "SELECT Nom, sum(Nombre)FROM Feuil2 GROUP BY Nom"
    -Essayer de passer directement par une plage de données, mais je n'y arrive pas, il ne regroupe pas les heures par les noms des personnes et me met tous en vrac dans un graphique. Peut être qu'il existe une instruction similaire au sum et group by en VBA mais malgrès de longues recherches, je n'ai rien trouvé qui va dans ce sens sur le net


    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
     
        Dim MonGraph As Chart
        Dim MaPlage As Range
        Dim MaSerie As Series
     
     
     
     
     
        Set MaPlage = Worksheets("Feuil2").Range(Worksheets("Feuil2").Cells(1, 1), Worksheets("Feuil2").Range("B1").End(xlDown).Offset(1, 0))
     
        Set MonGraph = ThisWorkbook.Charts.Add
        MonGraph.ChartType = xlBarClustered
        MonGraph.SetSourceData , MaPlage, xlColumns
     
     
        For compteur = 2 To MaPlage.Columns.Count
            Set MaSerie = MonGraph.SeriesCollection.NewSeries
            MaSerie.Values = "=" & MaPlage.Columns(compteur).Address(True, True, xlR1C1, True)
            MaSerie.XValues = "=" & MaPlage.Columns(2).Address(True, True, xlR1C1, True)
        Next compteur
     
     
        ActiveChart.ChartArea.Select
        ActiveChart.Axes(xlValue).Select
        ActiveChart.Axes(xlValue).MinimumScale = 0
        ActiveChart.Axes(xlValue).MaximumScale = 50
        ActiveChart.Axes(xlValue).MajorUnit = 5
        ActiveChart.Axes(xlValue).MinorUnit = 5
     
        With MonGraph
            .HasTitle = True
            With .ChartTitle
            .Characters.Text = "Graphique"
            .Shadow = True
            .Border.Weight = xlHairline
            End With
        End With
    Merci pour vos réponses,

    Thomas

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2013
    Messages : 120
    Par défaut
    Bonjour,


    Personne n'a d'idée pour ce problème ? Je commence à me demander si ce qu'on me demande est réellement possible avec Excel.

    Cordialement,


    Thomas

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 561
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 561
    Par défaut
    Bonjour

    Je te conseille de créer un tableau croisé dynamique, de lui associer un ou plusieurs segments, et un graphique croisé dynamique : ainsi tu auras un graphique, soit de l'ensemble des personnes, soit pour la personne choisie dans le segment Nom et des calculs dynamiques.

    Par ailleurs la source doit être sous forme de tableau, ce qui permet de la gérer comme une table de base de données et d'avoir des TCD toujours à jour.

    Sur 2013 on peut même faire aisément des graphiques dynamiques depuis un tableau sans TCD si les données ne nécessitent pas de synthèse : http://www.excel-formations.fr/Trucs...es/GRAPH02.php

  4. #4
    Membre expérimenté
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2013
    Messages : 120
    Par défaut
    C'est parfait, merci de m'avoir indiqué la direction à prendre pour résoudre mon problème, je mets le code complet avec création du graphique + des segments pour ceux que sa intéresse, il ne reste plus que de l'optimisation à faire. A adapter aux spécificités des données

    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
    Dim plage As Range
     
        'Définit la plage de donnée pour créer un tableau
        Set plage = Worksheets("Feuil2").Range(Worksheets("Feuil2").Cells(1, 1), Worksheets("Feuil2").Range("E1").End(xlDown).Offset(1, 0))
     
        'Pour les tests, a chaque fois qu'on relance la macro, le tableau crée précedement repasse en plage de donnée
        Worksheets("Feuil2").ListObjects("TableauDynamique").Unlist
     
        'Conversion de la plage de donnée en tableau
        Worksheets("Feuil2").ListObjects.Add(xlSrcRange, plage, , xlYes).Name = "TableauDynamique"
     
     
        'Création d'une nouvelle feuille
        Sheets.Add.Name = "Rapport"
        'Creation du tableau croisé
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="TableauDynamique", Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:="Rapport!R3C1", TableName:="Rapport tableau", DefaultVersion:=xlPivotTableVersion14
        Sheets("Rapport").Select
        Cells(3, 1).Select
     
     
        With Worksheets("Rapport").PivotTables("Rapport tableau").PivotFields("Nom")
            .Orientation = xlPageField
            .Position = 1
        End With
        Worksheets("Rapport").PivotTables("Rapport tableau").AddDataField ActiveSheet.PivotTables("Rapport tableau").PivotFields("Nombre"), "Nombre d'heures", xlCount
        With Worksheets("Rapport").PivotTables("Rapport tableau").PivotFields("Texte d'imputation")
            .Orientation = xlRowField
            .Position = 1
        End With
        'Création du graphique dynamique
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.SetSourceData Source:=Range("Rapport!$A$3:$B$10")
     
        'Creation des segments
        Range("A3").Select
        ActiveWorkbook.SlicerCaches.Add(ActiveSheet.PivotTables("Rapport tableau"), "Nom").Slicers.Add ActiveSheet, , "Nom", "Nom", 79.5, 415.5, 144, 198.75
        ActiveWorkbook.SlicerCaches.Add(ActiveSheet.PivotTables("Rapport tableau"), "Texte d'imputation").Slicers.Add ActiveSheet, , "Texte d'imputation", "Texte d'imputation", 117, 453, 144, 198.75
        ActiveSheet.Shapes.Range(Array("Texte d'imputation")).Select
    Encore merci de m'avoir aidé pour ce problème

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/05/2008, 11h00
  2. Réponses: 4
    Dernier message: 14/05/2007, 08h53
  3. [2.0] Générer des Graphiques
    Par Sadneth dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/04/2007, 16h34
  4. [Graphique] Générer des graphiques en php
    Par gabychon dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 17/01/2006, 22h56

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