Apprendre mon camembert afficher une bonne couleur

Bonjour tout le monde,

J'ai un tableau de produit et chaqun avec son État de vie (liste déroulante).

En fonction de cet état, la ligne de produit change sa couleur (condition search).

Ensuite, je représente mes données sous forme d'un tableau dynamique croisé simple. Finalement, à partir de ce tableau, je construis un camembert où je souhaite visualiser les codes produits (rien d'autre)

Le problème c'est que mon camembert décide lui-même quelle couleur afficher, en plus, lors de rafraichissement de mon tableau, tout se rejoue de manière chaotique.

Je cherche des conseils, des pistes pour apprendre mon camembert à s'adapter en fonction de code couleur de l'état de vie de produits.

Un exemple ci-joint sera plus parlant...

Merci d'avance

22test-produits.xlsx (82.08 Ko)

Bonjour Diego Rivera

Pour moi, le seul moyen de le faire est via VBA

Voici ton fichier avec le code

A+

Bonjour BrunoM45,

C'est déjà excellente ta solution, je te remercie bcp

Le seul problème c'est que quand j'applqiue un filtre (celui du tableau de produits on soit dynamique croisé ou tous les deux), je tombe sur un erreur VBA sur la ligne :

For i = 1 To Rng.FormatConditions.Count

Est-ce que cela est dû au fait que la colonne Z évolue (plage recherchée) et le programme ne retrouve plus un bon périmètre de données ?

Si jamais on rajoute une nouvelle ligne de produits, il faudra conditionner par la suite la colonne Z ?

Je sais, c'est compliqué mais, j'ai besoin vraiment de retrouver une solution fiable.

Merci pour ton aide

Re,

Désolé, je n'avais pas pensé au fait du filtrage

Essaye avec ce code

Sub MeFGraph()
  Dim Lig As Long, LigF As Long
  Dim Coul As Long, RngSearch As Range, RngFind As Range
  Dim DLigTCD As Long
  ' Définir la zone de recherche du produit
  Set RngSearch = Range("A2:A16")
  ' Récupérer le nombre de ligne du TCD -1 pour le Total
  DLigTCD = Range("B" & Rows.Count).End(xlUp).Row - 1
  ' Pour chaque ligne du TCD
  For Lig = 30 To DLigTCD
    ' Trouver la cellule de la valeur dans le tableau des produits
    Set RngFind = RngSearch.Find(Cells(Lig, 2).Value)
    ' Récupérer la couleur de la MFC de la cellule
    Coul = CouleurMFC(RngFind, 1)
    ' Appliquer la couleur au TCD
    Range(Cells(Lig, 2), Cells(Lig, 4)).Interior.Color = Coul
    ' Appliquer la couleur au graphique
    ActiveSheet.ChartObjects("Chart 4").Activate
    With ActiveChart.SeriesCollection(1).Points(Lig - 29)
      With .Format.Fill
      .Visible = msoTrue
      .Solid
      End With
      .Interior.Color = Coul
    End With
  Next Lig
End Sub

Remplace celui de la même procédure

A+

Merci bcp BrunoM45,

C'est bcp mieux avec la nouvelle version de procédure que tu m'as fourni, par contre, quand les filtres sont différents dans le tableau de produits et tableau dynamique, ça bogue sur la même ligne.

Peux-tu regarder, s'il te plaît, et désolé encore de t'avoir dérangé !

Nouvelle version du fichier ci-jointe.

P.S. Merci également pour les petits commentaires dans ton code, j'essaye aussi de le comprendre

Re,

Le problème vient de "RngFind", je fais donc un test dans le nouveau code

Sub MeFGraph()
 Dim Lig As Long, LigF As Long
 Dim Coul As Long, RngSearch As Range, RngFind As Range
 Dim DLigTCD As Long
  ' Definir la zone de recherche du produit
 Set RngSearch = Range("A2:A16")
  ' Recuperer le nombre de ligne du TCD -1 pour le Total
 DLigTCD = Range("B" & Rows.Count).End(xlUp).Row - 1
  ' Pour chaque ligne du TCD
 For Lig = 30 To DLigTCD
    ' Trouver la cellule de la valeur dans le tableau des produits
   Set RngFind = RngSearch.Find(Cells(Lig, 2).Value)
   ' Si aucune valeur trouvée : RngFind est vide,
   ' alors on continue la boucle sans rien faire
   If RngFind Is Nothing Then GoTo SuiteBoucle
    ' Recuperer la couleur de la MFC de la cellule
   Coul = CouleurMFC(RngFind, 1)
    ' Appliquer la couleur au TCD
   Range(Cells(Lig, 2), Cells(Lig, 4)).Interior.Color = Coul
    ' Appliquer la couleur au graphique
   ActiveSheet.ChartObjects("Chart 4").Activate
    With ActiveChart.SeriesCollection(1).Points(Lig - 29)
      With .Format.Fill
      .Visible = msoTrue
      .Solid
      End With
      .Interior.Color = Coul
    End With
SuiteBoucle:
  Next Lig
End Sub

A+

Merci pour ta hyper rapidité, tu es trop fort 8) , je teste et te tiens au courant.

A+

Salut BrunoM45,

Je reviens vers toi juste pour te dire un grand merci pour ton aide et ta solution qui marche très bien !!

Salut Diego Rivera

Diego Rivera a écrit :

Je reviens vers toi juste pour te dire un grand merci pour ton aide et ta solution qui marche très bien !!

Tant mieux, j'en suis heureux

Rechercher des sujets similaires à "apprendre mon camembert afficher bonne couleur"