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 :

Création graphique pour chaque ligne d'un tableau [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut Création graphique pour chaque ligne d'un tableau
    Bonjour à tous,

    Pourriez-vous me mettre sur la bonne piste pour réaliser la manip suivante :
    Je dispose d'un tableau (1ere ligne = champs, lignes suivantes = valeurs) de données, pour lequel je dois créer un graph de type "radars" pour chaque ligne, puis l'exporter en image (PNG, JPG...).
    Si possible, j'aimerai que la couleur de mon graph soit liée à la valeur d'un champ ("couleur" qui prend 4 valeurs différentes).

    Pourriez vous m'orienter sur les codes nécessaires à ce genre d'opération ?

    Merci à vous !

    Sylvain M.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Bon, je me répond à moi même pour une des étapes : l'export en PNG du graphique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub SauvePNG()
    ' Enregistre les graphiques du tableur au format image PNG
    Fname = ThisWorkbook.Path & "\" & ActiveChart.Name & ".png"
    ActiveChart.Export Filename:=Fname, FilterName:="PNG"
    End Sub
    Pour le reste, je cherche encore, mais si vous acceptez d'orienter mes recherches, j'accepte !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Histoire de mieux contextualiser, voici en pièce jointe un tableur qui montre mieux le principe. L'idée est d'exporter autant de graphiques que de lignes.

    Si quelqu'un peut m'aider : merci d'avance !


    [Edit : poursuite de mes investigations]

    Voila un code qui fonctionne pour la partie "export pour chaque ligne".
    Maintenant, il faudrait que j'y ajoute la couleur conditionnelle du graphique... et là, ça me semble beaucoup plus coton ! (à mon niveau en tout cas...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub batch_graphs()
    ' Créé un graphique pour chaque ligne du tableau
    Dim I As Integer
    For I = 2 To 11
        Sheets("RADAR 1").Select
        ActiveChart.PlotArea.Select
        ActiveChart.SeriesCollection(1).Name = "='donnees'!$A$" & I
        ActiveChart.SeriesCollection(1).Values = "='donnees'!$B$" & I & ":$E$" & I
        ' Enregistre les graphiques du tableur au format image PNG
        Fname = ThisWorkbook.Path & "\" & ActiveChart.Name & "_" & I & ".png"
        ActiveChart.Export Filename:=Fname, FilterName:="PNG"
    Next I
    End Sub
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent 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
    Par défaut
    Bonsoir

    On va préparer notre fichier comme suit

    1. Sur la feuille donnees


    • On nomme la cellule I1 par NN et la cellule J1 par COULEUR (Tous les noms décrits ici ont une portée la feuille donnees (cf case de nommage Zone))
    • On met dans une plage (par exemple I2:J4 la correspondance entre la couleur et son code RGB)

    Exemple:
    Vert___5296274
    Bleu___12611584
    Rouge__255









    2. Sur la feuille graphique:


    • On nomme notre feuille graphique RADAR





    3. Code vba

    La macro suivante suffira
    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
    Sub TEST()
    Dim LastLig As Long, i As Long
     
    With Worksheets("donnees")
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To LastLig
            .Range("I1") = i - 1
            Charts("RADAR").SeriesCollection(1).Format.Line.ForeColor.RGB = .Range("COULEUR")
            DoEvents
            SauvePNG
        Next i
    End With
    End Sub
     
    Private Sub SauvePNG()
    Dim Fname As String
     
    Fname = ThisWorkbook.Path & "\" & Worksheets("donnees").Range("TITRE") & ".png"
    Charts("RADAR").Export Filename:=Fname, FilterName:="PNG"
    End Sub
    Cf Fichier

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Bon, ben je suis fiers de moi : je viens de parvenir, seul (!), a écrire une macro qui fait ce que je veux...
    Voici donc la solution à mon problème :

    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
    Sub batch_graphs()
    ' Créé un graphique pour chaque ligne du tableau
    Dim I As Integer
    Dim D As Worksheet
    Set D = Worksheets("donnees")
    For I = 2 To 11
        Sheets("RADAR").Select
        ' modifie les données sources du graphique
        ActiveChart.PlotArea.Select
        ActiveChart.SeriesCollection(1).Name = "='donnees'!$A$" & I
        ActiveChart.SeriesCollection(1).Values = "='donnees'!$B$" & I & ":$E$" & I
        ' détermine de quelle couleur est la ligne
        If D.Cells(I, 6).Text = "bleu" Then ActiveChart.SeriesCollection(1).Border.Color = vbBlue
        If D.Cells(I, 6).Text = "vert" Then ActiveChart.SeriesCollection(1).Border.Color = vbGreen
        If D.Cells(I, 6).Text = "rouge" Then ActiveChart.SeriesCollection(1).Border.Color = vbRed
        ' Enregistre les graphiques du tableur au format image PNG
        Fname = ThisWorkbook.Path & "\" & ActiveChart.Name & "_" & I & ".png"
        ActiveChart.Export Filename:=Fname, FilterName:="PNG"
    Next I
    End Sub
    Merci à moi !

    Bon, je ne sais pas si ce monologue a un intérêt sur le forum, donc je ne le prendrai pas mal si on supprime ces messages !

    Bonne soirée !

    Sylvain M.

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,
    Bon, je ne sais pas si ce monologue a un intérêt sur le forum, donc je ne le prendrai pas mal si on supprime ces messages
    as-tu au moins regardé la proposition de mercatog, abonné expérimenté et de bon conseil

    bonne nuit
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Pardon Mercatog : je n'avais pas vu que tu m'avais écris une proposition !
    Je vais regarder ça a tête reposée demain (là mes yeux commencent à piquer après ces exploits d'apprenti codeur !) : ça me semble beaucoup plus propre et reproductible.

    Donc merci à toi !

    Sylvain M.

  8. #8
    Expert éminent 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
    Par défaut
    Bonsoir Dominique et merci pour toi.

    Bonsoir Sylvain
    Ce que tu as trouvé est aussi bon (à quelques remarques près, Les Select et si un jour tu veux ajouter une couleur, il faudra modifier le code)

    En tout cas, bon travail.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/12/2014, 00h56
  2. Pour chaque ligne retourner afficher un tableau
    Par ziko.1988 dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 03/05/2012, 12h23
  3. Tableau + formulaire de détail pour chaque ligne
    Par nb-wissam dans le forum Forms
    Réponses: 4
    Dernier message: 10/06/2010, 13h50
  4. [MySQL] Calculer une somme pour chaque ligne et colonne d'un tableau
    Par baggie dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/05/2010, 10h55
  5. [Composants] TRichEdit: Une police pour chaque ligne
    Par naili dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/03/2003, 16h59

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