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
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