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 :

Faire un Graphique Excel [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Points : 70
    Points
    70
    Par défaut Faire un Graphique Excel
    VBA

    Bonjours


    Image si elle ne fonctionne pas : http://www.hostingpics.net/viewer.ph...087Tableau.jpg

    Voici le tableau,

    j'aimerais faire un graphique Histogramme avec :

    Les valeurs supérieur à 1 :
    Garder les couleurs (ex si c'est une valeur "DD" garder le bâton de l'histogramme en orange)
    Ranger les valeurs de la plus petite à la plus grande.

    Le problème c'est que ne je sais pas comment envoyer les valeurs pour que cela fasse un graphique.

    Merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu dois dans un premier temps faire un traitement de données sur tes valeurs:
    - Les trier par ordre croissant
    - Ne pas prendre en compte les valeurs inférieures à 1

    Ensuite tu génères ton histogramme.

    Toutes ces opérations peuvent être réalisées à l'aide de l'enregistreur de macro. A toi après de réécrire le code proprement.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Points : 70
    Points
    70
    Par défaut
    Ok, merci

    Le problème c'est que je ne sais pas le faire sur Excel de base. Je vais essayer de chercher.

    Le problème c'est que mon tableaux, je ne peux pas le modifier et il se génère dynamiquement. C'est à dire que le "Range" doit être dynamique.

    Il faudrait en gros :

    Que je puisse faire un Histogramme non pas avec un Range() mais avec une variable de tableau de données.
    Pour qu'apres je puisse trier les valeurs et enlever > 1
    Je peux modifier les couleurs des histogrammes dynamiquement ?

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il est tout à fait possible de catcher une modification au niveau du tableau de données et de mettre à jour le graphique par la suite (valeurs et couleurs) à l'aide de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub Worksheet_Change(ByVal Target As Range)
    End Sub
    Pas besoin d'une variable de tableau de données tu peux utiliser une fonction comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim DernLigne As Long 
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
    pour récupérer la dernière ligne du tableau.

    Si ça ne te suffit pas je peux t'aider auquel cas joins ton fichier Excel sans données confidentielles.

  5. #5
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Points : 70
    Points
    70
    Par défaut
    Voici-ci joint le fichier que je dois transformer.
    Il peut y avoir plusieurs type de déchet différents.
    Ici il n'y en a que 2.
    Le DD (en orange) et le DND (en beige..)
    Les valeurs sont crées dynamiquement à partir d'un autre fichier.
    Je ne sais pas à l'avance les plages qu'occuperont les différents types de fichier.

    J'aimerais que à partir de ça, un graphique soit crée.
    Il devra ranger les donnée dans un ordre croissant
    Et mettre les bâtons de l'histogramme de la même couleur que le type de déchet (si c'est un DD, bâton en orange, si c'est DND en beige, DI en vert etc.)
    (je suis en train de bosser pour que lorsque la page se créée cela range les valeurs par valeur croissantes, par type de dechet (DD,DND))

    28-05-2013_NANCY_4.xls

    Voila, si il faut plus d'informations n'hésitez pas.

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Peux tu préciser cette phrase ?
    Je ne sais pas à l'avance les plages qu'occuperont les différents types de fichier.

  7. #7
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Points : 70
    Points
    70
    Par défaut
    Pour répondre :

    Si je dois calculer le nombre de déchet par type, c'est possible ; mais cela me prendrais pas mal de temps.
    Donc, sauf si c'est impossible, il ne faudrait pas utiliser les données dans la feuilles Excel mais des données qui sont (déjà) dans une variable de type tableau à la place.

    PS :La feuille que j'ai mit est un exemple. cela dépendra de ce que l'utilisateur choisira. Il peut très bien y avoir 5 déchets comme 300 dans le tableau.

    Peux tu préciser cette phrase ?
    Citation:
    Je ne sais pas à l'avance les plages qu'occuperont les différents types de fichier.
    Si jamais c'est incompréhensible ce que j'ai dit
    Ne prend pas cette phrase en compte.

    Merci

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ok mais ou est ta variable de type tableau avec les données. Variable globale ?

    Sinon la première ligne du tableau commence toujours à la même ligne non ?

  9. #9
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Points : 70
    Points
    70
    Par défaut
    Alors ce n'est pas une variable globale.
    Enfaite ca recherche dans plusieurs fichier des informations et en fait un tableau. Donc c'est une variable de tableau normal
    Sinon oui cela commence toujours à la même ligne.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Ok je vais travailler dessus sans la variable tableau car je ne comprends pas d'ou elle vient et comment la récupérer.

    Et voila le 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
    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
    Option Explicit
    Option Base 1
     
    'Création de l'histogramme
    Public Sub CreationGraphique()
     
        Dim tblDonnees As Variant
        Dim lngLigFinTab As Integer
        Dim c As Range
        Dim i As Integer
        Dim varChart As Variant
     
        tblDonnees = RecuperationDonnees
     
        'Traitement des données
        With Worksheets("Feuil2")
            .Cells.Clear
            .Range(.[A2], .Cells(UBound(tblDonnees) + 1, 3)) = tblDonnees
     
            'Suppression des valeurs <= 1
            lngLigFinTab = .Range("A" & .Rows.Count).End(xlUp).Row
            For i = lngLigFinTab To 2 Step -1
                If .Cells(i, 2).Value <= 1 Then .Cells(i, 2).EntireRow.Delete
            Next i
     
            'Filtrage des donnes par ordre croissant
            .[A1].AutoFilter
            .AutoFilter.Sort.SortFields.Add Key:=Columns(2), SortOn:=xlSortOnValues, _
                                            Order:=xlAscending, DataOption:=xlSortNormal
            .AutoFilter.Sort.Apply
            .AutoFilterMode = False
     
            lngLigFinTab = .Range("A" & .Rows.Count).End(xlUp).Row
     
        End With
     
        'Création du graphique
        'Suppression du graphique existant
        Application.DisplayAlerts = False
        For Each varChart In ActiveWorkbook.Charts
            varChart.Delete
        Next varChart
        Application.DisplayAlerts = True
     
        'Ajout du graphique
        With Sheets("Feuil2")
            .Shapes.AddChart.Select
            Set c = .Range(.[A2], .Cells(lngLigFinTab, 2))
        End With
        With ActiveChart
            .ChartType = xlColumnClustered
            .SetSourceData Source:=c
            .Legend.Delete
            .Location Where:=xlLocationAsNewSheet
        End With
     
        'Mise en forme des points (couleurs)
        i = 2
        With ActiveChart
            For Each varChart In .SeriesCollection(1).Points
                With varChart.Format.Fill
                    Select Case Sheets("Feuil2").Cells(i, 3).Value
                        Case "DD"
                            .ForeColor.RGB = RGB(255, 153, 0)
                        Case "DND"
                            .ForeColor.RGB = RGB(255, 255, 153)
                        Case "DI"
                            .ForeColor.RGB = RGB(0, 255, 0)
                        Case "DEEE"
                            .ForeColor.RGB = RGB(0, 255, 255)
                    End Select
                    i = i + 1
                End With
            Next varChart
        End With
     
    End Sub
     
    'Récupération du tableau avec une plage dynamique
    Public Function RecuperationDonnees() As Variant
     
        Dim lngLigFinTab As Long
     
        With Sheets("Feuil1")
            lngLigFinTab = .[A29].End(xlDown).Row
            RecuperationDonnees = .Range(.[A29], .Cells(lngLigFinTab, 3))
        End With
     
    End Function
    Tu as ton fichier en PJ. Dis moi ce que tu en penses. Tu as déjà à mon avis une grosse partie du travail de fait. Ensuite tu n'as plus qu'à apporter les modifications que tu souhaites. Si tu veux que le graphique soit généré à chaque nouveau tableau alors utilise la procédure que j'évoquais auparavant.

    Il y a quelques restrictions que tu peux adapter:

    - La première ligne du tableau doit rester la même
    - Une feuille libre 'Feuil2' est nécessaire pour que ça fonctionne
    - Tous les graphiques présents dans ton classeur sont supprimés à chaque appel de la procédure
    Dernière modification par AlainTech ; 03/06/2013 à 13h20. Motif: Fusion de 2 messages

  11. #11
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Points : 70
    Points
    70
    Par défaut
    Merci de ta réponse et du temps que tu as pris.
    Je voudrais savoir si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         lngLigFinTab = .[A29].End(xlDown).Row
            RecuperationDonnees = .Range(.[A29], .Cells(lngLigFinTab, 3))
    Avec ce code la, quand on marque " .[A29].End(xlDown).Row " ça descend jusque la première ligne vide, ou jusqu'à la dernière ligne écrite de la colonne "A"
    ?


    Edit : j'ai plusieurs erreurs notamment :
    "SortOn:=xlSortOnValues" Il dit que la variable "xlSortOnValues" n'éxiste pas...
    C'est dù à la version d'Excel ?

  12. #12
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Points : 173
    Points
    173
    Par défaut
    Cette méthode s'arrête juste avant la première cellule vide de la colonne par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    case1
    case2
    case3
     
    case5
    case6
    ici la méthode renverra la ligne de case3 car case4 est vide.

  13. #13
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Points : 70
    Points
    70
    Par défaut
    Merci de ta réponse

  14. #14
    Invité
    Invité(e)
    Par défaut
    Tu utilises quelle version d'Excel?

  15. #15
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Points : 70
    Points
    70
    Par défaut
    J'utilise la version de 2003 (Sp3)

    Edit :

    Enfaite je ne peux pas utiliser ces bouts de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            'Filtrage des donnes par ordre croissant
            .[A1].AutoFilter
            .AutoFilter.Sort.SortFields.Add Key:=Columns(2), SortOn:=xlSortOnValues, _
                                            Order:=xlAscending, DataOption:=xlSortNormal
            .AutoFilter.Sort.Apply
            .AutoFilterMode = False
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        'Ajout du graphique
        With Sheets("Feuil2")
            .Shapes.AddChart.Select
            Set c = .Range(.[A2], .Cells(lngLigFinTab, 2))
        End With

    PS: Je vais partir dans le même esprit enfaite et, soit je prendrais une autre feuille (comme toi) ou alors je les mettrais sur la feuille 1 mais en caché.
    Merci

  16. #16
    Invité
    Invité(e)
    Par défaut
    Avec une autre méthode pour le triage de données et la création du graphique qui devraient être supportés en 2003:
    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
    Option Explicit
    Option Base 1
     
    'Création de l'histogramme
    Public Sub CreationGraphique()
     
        Dim tblDonnees As Variant
        Dim lngLigFinTab As Integer
        Dim c As Range
        Dim i As Integer
        Dim varChart As Variant
     
        tblDonnees = RecuperationDonnees
     
        'Traitement des données
        With Worksheets("Feuil2")
            .Cells.Clear
            .Range(.[A1], .Cells(UBound(tblDonnees), 3)) = tblDonnees
     
            'Suppression des valeurs <= 1
            lngLigFinTab = .Range("A" & .Rows.Count).End(xlUp).Row
            For i = lngLigFinTab To 1 Step -1
                If .Cells(i, 2).Value <= 1 Then .Cells(i, 2).EntireRow.Delete
            Next i
            lngLigFinTab = .Range("A" & .Rows.Count).End(xlUp).Row
     
            'Filtrage des donnes par ordre croissant
            .Range(.[A1], .Cells(lngLigFinTab, 3)).Sort Key1:=.Columns(2), order1:=xlAscending, Header:=xlNo
     
        End With
     
        'Création du graphique
        'Suppression du graphique existant
        Application.DisplayAlerts = False
        For Each varChart In ActiveWorkbook.Charts
            If varChart.Name = "Graphique" Then varChart.Delete
        Next varChart
        Application.DisplayAlerts = True
     
        'Ajout du graphique
        With Sheets("Feuil2")
            Set c = .Range(.[A1], .Cells(lngLigFinTab, 2))
            With .ChartObjects.Add(Left:=10, Width:=10, Top:=10, Height:=10)
                .Chart.ChartType = xlColumnClustered
                .Chart.SetSourceData Source:=c
                .Chart.Legend.Delete
                .Chart.Location Where:=xlLocationAsNewSheet
            End With
        End With
        ActiveChart.Name = "Graphique"
     
        'Mise en forme des points (couleurs)
        i = 1
        With ActiveChart
            For Each varChart In .SeriesCollection(1).Points
                With varChart.Format.Fill
                    Select Case Sheets("Feuil2").Cells(i, 3).Value
                        Case "DD"
                            .ForeColor.RGB = RGB(255, 153, 0)
                        Case "DND"
                            .ForeColor.RGB = RGB(255, 255, 153)
                        Case "DI"
                            .ForeColor.RGB = RGB(0, 255, 0)
                        Case "DEEE"
                            .ForeColor.RGB = RGB(0, 255, 255)
                    End Select
                    i = i + 1
                End With
            Next varChart
        End With
     
    End Sub
     
    'Récupération du tableau avec une plage dynamique
    Public Function RecuperationDonnees() As Variant
     
        Dim lngLigFinTab As Long
     
        With Sheets("Feuil1")
            lngLigFinTab = .[A29].End(xlDown).Row
            RecuperationDonnees = .Range(.[A29], .Cells(lngLigFinTab, 3))
        End With
     
    End Function
    La maintenant ça devrait être bon !
    Dis moi tout.
    Dernière modification par Invité ; 10/06/2013 à 19h13.

  17. #17
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 193
    Points : 70
    Points
    70
    Par défaut
    Tout d'abords Merci beaucoup même avec du retard.

    J'avais résolu mon soucis en modifiant ton premier exemple.
    Je n'ai pas testé le dernier mais le premier m'a suffit

    Bonne journée à vous

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

Discussions similaires

  1. [XL-2003] Graphique Excel : faire disparaitre le motif de la légende
    Par shimuno dans le forum Conception
    Réponses: 2
    Dernier message: 03/02/2012, 17h27
  2. Faire un graphique à bulles Excel
    Par belsuncette dans le forum VB.NET
    Réponses: 4
    Dernier message: 05/10/2009, 14h50
  3. Faire un graphique en Ole avec Excel
    Par kurul1 dans le forum C++Builder
    Réponses: 18
    Dernier message: 23/03/2007, 21h57
  4. VBA - Excel Faire un graphique histogrammes - courbes
    Par brethomeau dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/11/2005, 16h49
  5. [RAVE][DELPHI7] Comment faire un graphique ?
    Par DFANDOR dans le forum Rave
    Réponses: 7
    Dernier message: 06/02/2003, 20h25

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