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 :

Gestion des couleurs des graphs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2023
    Messages : 8
    Par défaut Gestion des couleurs des graphs
    Bonjour à tous,

    Merci encore pour toutes ces lignes qui m'inspirent grandement pour mes travaux !
    J'ai aujourd'hui un cas que je n'arrive pas à résoudre mais qui ne devrait pas vous poser de pbs.

    J'ai un graphique ("graph") qui s'appuie sur un tableau croisé dynamique ("TCD"), qui lui-même s'appuie sur un tableau structuré ("Données").
    Par ailleurs, ce tableau structuré contient une colonne avec une validation de donnée (de type liste) qui fait référence à un autre tableau structuré ("valeur").

    Ce dernier tableau structuré ("valeur") contient les données de série de mon graph !

    Je souhaite que les couleurs de chaque point de mon graph corresponde à la couleur de fond des cellules de mon tableau structuré ("valeur").

    Voici mon code qui me permet d'avoir un graph selon un code RGB renseigné directement dans 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
     
      Dim graph As Chart
      Dim statut(1 To 8) As Long
      Dim i As Long
     
      statut(1) = RGB(198, 224, 180)
      statut(2) = RGB(132, 151, 176)
      statut(3) = RGB(171, 189, 171)
      statut(4) = RGB(191, 191, 191)
      statut(5) = RGB(212, 179, 225)
      statut(6) = RGB(234, 234, 234)
      statut(7) = RGB(225, 180, 179)
      statut(8) = RGB(131, 151, 176)
     
      On Error Resume Next
        Set graph = ActiveChart
        If graph Is Nothing Then
          MsgBox "Vous devez d'abord sélectionner un graphique."
          Exit Sub
        End If
     
        For i = 1 To 8
          With ActiveChart.FullSeriesCollection(1).Points(i).Format.Fill
              .Visible = msoTrue
              .ForeColor.RGB = statut(i)
              .Transparency = 0
              .Solid
          End With
          With ActiveChart.FullSeriesCollection(1).Points(i).Format.Line
              .Visible = msoFalse
          End With
        Next
    Et ça fonctionne !

    Mais ce que je cherche à modifier, c'est que au lieu de renseigner le code RGB dans cette macro, il aille le chercher directement sur la cellule concernée !
    En gros avoir (en français) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    statut(1) = aller chercher la couleur de fond de ma cellule située dans la feuille "AAA", dans le tableau structuré "BBB", dans la colonne "CCC", à la ligne 1
    ...
    Avez-vous des idées ?

    Et question bonus : la formule "...Point(i)" utilisée pour identifier une donnée de la série dans le graph correspond à une valeur du tableau structuré. J'ai trié les données du graphique et du tableau pour que les données correspondent. Mais si je tri l'un différemment de l'autre, alors les couleurs ne correspondront plus.... Si vous avez une piste pour faire coïncider les 2, je suis preneur !

    Merci par avance !

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Exemple d'une ligne de code qui renvoie le code couleur de l'intérieur de la première cellule de la colonne nommée "Valeur" d'un tableau structuré nommé "t_Data"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Dim t As ListObject
      Set t = Range("t_Data").ListObject
      statut(1) = t.ListColumns("Valeur").DataBodyRange.Cells(1, 1).Interior.Color
    Attention que la propriété Interior.Color est le code d'une couleur que l'on a ajouté à la couleur initiale du thème choisi du tableau lui même et pas non plus une couleur appliquée par une mise en forme conditionnelle (pour ces derniers cas il faut utiliser DisplayFormat.Interior.Color .

    Exemple où l'on applique à la cellule E1 de la feuille active, la même couleur que la première cellule de la colonne Valeur du tableau t_Data
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      Dim statut(1 To 8) As Long
      Dim t As ListObject
      Set t = Range("t_Data").ListObject
      statut(1) = t.ListColumns("Valeur").DataBodyRange.Cells(1, 1).Interior.Color
      Range("E1").Interior.Color = statut(1)
    Nom : 230225 dvp Interior_Color.png
Affichages : 533
Taille : 14,8 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2023
    Messages : 8
    Par défaut
    Bonjour,

    Pour le début de la semaine, lire cette réponse me convient parfaitement !
    Je teste tout ça de suite !
    Merci @Philippe Tulliez

    Bonne journée,

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2023
    Messages : 8
    Par défaut
    Bonjour Philippe,

    Merci encore : ça fonctionne très bien ! Il me manquait la partie Cells(1,1) pour y arriver dans mes tests, c'est donc maintenant chose faite !

    J'en profite donc pour compléter ma demande :
    J'ai un tableau structuré qui contient des données d'un graph et auquel j'applique une couleur de fond (pas de MFC)
    J'arrive à obtenir ces couleurs dans un graph qui utilise ce tableau structuré (via un TCD et un autre tableau structuré) : la couleur correspond à un point d'une série :
    Le tableau structuré dans une feuille :
    Nom : TGH - Outil de gestion de projet 1.6.5.xlsm - Excel.jpg
Affichages : 466
Taille : 8,9 Ko
    Le TCD et le graph dans une autre :
    Nom : TGH - Outil de gestion de projet 1.6.5.xlsm - Excel_2.jpg
Affichages : 493
Taille : 39,5 Ko

    La macro créée grâce à toi permet de recopier le code couleur du tableau dans le graph. Encore faut-il que le tri du tableau et du graph soit le même.
    Si je veux que ça fonctionne même si le tri n'est pas bon, comment faire ?
    J'avoue ne pas savoir par ou commencer....

    Si je peux avoir une piste, je suis preneur !
    Merci encore en tout cas !
    Guillaume

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour que cela fonctionne quel que soit l'ordre des lignes, il suffirait de calculer la position des cellules à l'aide par exemple de la fonction EQUIV (MATCH pour le code VBA) et utiliser la position de la ligne dans le premier argument de Cells soit Cells(NuméroLigne, 1)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2023
    Messages : 8
    Par défaut
    Merci Philippe pour la piste !

    Du coup, j'ai modifié mon code en essayant de construire le raisonnement ainsi :

    Je récupère mes libellés de la série de mon graphique (lib 1 à 8)
    Je les fais "matcher" avec les libellés de mon tableau

    Et je déroule la mise en couleur.

    Le résultat ci-dessous est bien-sûr KO, car mon niveau de code est plus que mauvais....
    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
      Dim graph As Chart
      Dim statut(1 To 8) As Long
      Dim lib(1 To 8) As Long
      Dim i As Long
      Dim Table As Range
     
        Set graph = ActiveChart
        Set Table = Range("Statuts_article").ListObject.ListColumns("Statut Article").DataBodyRange
     
            lib(1) = graph.SeriesCollection(1).Points(1).DataLabel
            lib(2) = graph.FullSeriesCollection(1).Points(2).DataLabel.Text
            lib(3) = graph.FullSeriesCollection(1).Points(3).DataLabel.Text
            lib(4) = graph.FullSeriesCollection(1).Points(4).DataLabel.Text
            lib(5) = graph.FullSeriesCollection(1).Points(5).DataLabel.Text
            lib(6) = graph.FullSeriesCollection(1).Points(6).DataLabel.Text
            lib(7) = graph.FullSeriesCollection(1).Points(7).DataLabel.Text
            lib(8) = graph.FullSeriesCollection(1).Points(8).DataLabel.Text
     
        statut(1) = Table.Cells(Application.Match(lib(1), Table, 0), 1).Interior.Color
        statut(2) = Table.Cells(Application.Match(lib(2), Table, 0), 1).Interior.Color
        statut(3) = Table.Cells(Application.Match(lib(3), Table, 0), 1).Interior.Color
        statut(4) = Table.Cells(Application.Match(lib(4), Table, 0), 1).Interior.Color
        statut(5) = Table.Cells(Application.Match(lib(5), Table, 0), 1).Interior.Color
        statut(6) = Table.Cells(Application.Match(lib(6), Table, 0), 1).Interior.Color
        statut(7) = Table.Cells(Application.Match(lib(7), Table, 0), 1).Interior.Color
        statut(8) = Table.Cells(Application.Match(lib(8), Table, 0), 1).Interior.Color
     
      On Error Resume Next
        If graph Is Nothing Then
          MsgBox "Vous devez d'abord sélectionner un graphique."
          Exit Sub
        End If
     
        For i = 1 To 8
          With graph.FullSeriesCollection(1).Points(i).Format.Fill
              .Visible = msoTrue
              .ForeColor.RGB = statut(i)
              .Transparency = 0
              .Solid
          End With
          With graph.FullSeriesCollection(1).Points(i).Format.Line
              .Visible = msoFalse
          End With
        Next
    Pouvez-vous me dire ce qui ne va pas dans mon raisonnement, et donc dans mon code ?

    Merci beaucoup !

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il faudrait préciser ce qui ne va pas.
    Y a t'il un message d'erreur et dans l'affirmative quel est-il et à quelle ligne du code ?
    Dans la négative, cela signifie que des valeurs ne sont pas correctes (peut-être la valeur cherchée par MATCH ?). Il faut alors utiliser les outils de débogages comme le "Pas à Pas"

    Pour une compréhension rapide une vidéo dans ce billet titré Le débogage en VBA et pour approfondir, un tutoriel à lire Le débogage sous Visual Basic 6 et Visual Basic pour Application(1re partie)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Editeur graphique pour la gestion des graphes
    Par nasro21 dans le forum Débuter
    Réponses: 2
    Dernier message: 11/05/2014, 13h19
  2. Gestion des graphes et calculs distance
    Par mat1554 dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 18/04/2013, 23h46
  3. [Debutant] gestion des couleurs ??
    Par MaxiMax dans le forum OpenGL
    Réponses: 5
    Dernier message: 26/03/2004, 08h34

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