Graphique croisé dynamique. Couleurs automatique

Bonjour,

je suis actuellement sur une base de donnée excel que j'interprète à l'aide de graphique croisé dynamique.

Mon souci : les couleurs du graphique sont toujours les même par défaut.

je m'explique: quand je travaille sur toute la base de donnée sans sélectionner des données en particulier, j'obtiens un graphique avec des couleurs prédéfinies (ex A en bleu, B en violet, C en Blanc...)

Dès que je fait des tris ou il n'y aura pas forcement de réponse A par exemple, automatiquement les couleurs changent : B en bleu et C en violet.

Étant donné que je fait un rapport avec une extraction de ces tableaux, cela devient vite incompréhensible quand les couleurs changent continuellement.

Il y aurait il une possibilité de paramétrer une bonne fois pour toutes les couleurs qui sortiront sur le graph?

Il m'es difficile de vous joindre le fichier car il est très lourd

Merci

Bonjour,

et

Comme tu n'as pas trop de réponses, c'est que cela n'est pas possible en l'état, Excel faisant "ce qu'il veut"....

Cependant, on peut lui forcer la main, et l'obliger à faire ce qu'on désire, par l'intermédiaire d'un code VBA, communément appelé "Macro"

Si cela t'intéresse, et afin de répondre au mieux à ta demande, il serait judicieux que tu joignes un fichier exemple, exempt de toutes données confidentielles, mais au plus proche de ton véritable tableau.

Cet exemple doit contenir au moins trois catégories (que tu appelles "A", "B" et "C"), ainsi que le TCD que tu as fabriqué.

Avec ton fichier, on peut voir ce qu'il est possible de faire.

PS : avec une vingtaine de lignes, ce sera suffisant. Supprime tout ce qui est superflu...

A te relire

merci pour ta réponse

je ferai un tableau de ce type que je joindrai cet après midi.

-- 24 Juin 2010, 15:42 --

Re bonjour !!

voici mon tableau avec le graphique croisé dynamique

en feuille 1 mes données et les explications à mon problème

et tant qu'à faire j'ai un souci quand je croise les infos avec les poids par gamme : je n'arrive jamais a les mettre dans le bon ordre alors que j'y arrive avec la température ou la densité

Merci d'avance et bonne journée

je n'arrive pas a envoyer le fichier.

j'ai fait : ajouter des fichiers joints

j'ai mis le chemin d'accès + un commentaire et ai cliqué sur ajouter le fichier mais cela ne semble pas marcher

j'ai pourtant regardé la vidéo explicative sur you tube

désolé de faire le boulet

Re-,

pour également faire remonter le fil

il me semble que la taille max est de 100 Ko

essaie de le zipper...

@ +

re,

effectivement cela fonctionne mieux.

voici donc le fichier

251pour-forum.zip (12.87 Ko)

d'avance merci

bonsoir,

si j'ai bien compris

un exemple de ce qu'on peut faire

dans l'onglet "couleurs", tu détermines les couleurs que tu souhaites obtenir en fonction des XX1

lorsque tu reviens sur l'onglet "Feuil5", qui contient le TCD, celui-ci est mis à jour automatiquement

si tu vas sur l'onglet "Graph1", le TCD est également mis à jour automatiquement, donc le graph se met également

à jour

regarde, si c'est cela que tu souhaites...

742pour-forum-v1.zip (23.48 Ko)

c'est super cela va m'éviter de batailler a chaque fois.

comment as tu fait?

j'ai regardé dans visual basic, j'ai bien vu ce que tu avais fait mais je sais pas m'en servir

mais en gros il me suffirai de faire un copier collé avec quelques modifs concernant les feuilles et le tour serait joué?

merci pour cette solution

dans l'attente de te lire

Re-,

copie l'onglet "couleurs" dans ton classeur final, tu peux ainsi déterminer les couleurs qui t'intéressent

par le code, j'insère des noms automatiquement sur cette feuille, donc tu n'as rien à faire pour cela

pour le code VBA, recopie toutes les procédures que j'ai mises dans chaque évènement de feuille, notamment concernant la feuille du graphique, et du TCD

le bouton sert à déterminer l'index des couleurs que tu auras choisies

si tu n'y arrives pas, et que tu veux que je t'aide un peu plus, je peux te joindre mon adresse mail, et si ton fichier n'est pas confidentiel, tu peux me l'envoyer, j'essaierai d'y inclure ces codes

@ te relire

je pensais ne pas m'en être trop mal sorti mais un bug subsiste

le VBA me le surligne en Jaune

je te joint une copie d'écran

le fichiers est hélas confidentiel

merci pour le temps que tu y passe

Re-,

Lorsque le code est bloqué à ce niveau, en cliquant sur déboguage, et que tu passes ta souris sur le mot "lacouleur", qu'est-ce qui est en info-bulle?

As-tu bien rempli la feuille couleur, avec les valeurs de XX1 conformes, dans la colonne A?

Comme je ne sais pas combien de valeurs peut prendre XX1, je m'étais arrêté à 9

Tu peux en rajouter tant que tu veux, tu complètes la colonne A, dans la colonne B, tu mets la couleur que tu désires, tu cliques sur le bouton jaune, et ensuite tu viens voir sur le graphe...

@ te relire

As-tu bien rempli la feuille couleur, avec les valeurs de XX1 conformes, dans la colonne A?

les valeurs sont les même que celles que je t'avais mises donc pas de souci.

Lorsque le code est bloqué à ce niveau, en cliquant sur déboguage, et que tu passes ta souris sur le mot "lacouleur", qu'est-ce qui est en info-bulle?

lacouleur=erreur 2042

Sc.Interior.ColorIndex=-4105

dans l'attente de te lire

merci

Re-,

dans Insertion/Nom/Définir, combien de noms as-tu?

Vois-tu "indexs" et "XX1"?

si tu ne les vois pas, clique sur le bouton jaune de la feuille "couleurs" (si tu as bien recopié également le module1, où se trouve la procédure "trouver_index")

pour recopier ce module, dans le VBE, clique sur le nom du module (Module1), et tout en maintenant appuyé, glisse-le vers ton fichier, dans l'explorateur de projets qui est sur la gauche.

si l'appui sur le bouton jaune ne déclenche rien, fais un clic droit dessus, "Affecter une macro", et choisis le nom de la procédure que je viens de citer supra...

si toujours pas ça, va falloir opérer à cœur ouvert....

@ te relire

Lorsque le code est bloqué à ce niveau, en cliquant sur déboguage, et que tu passes ta souris sur le mot "lacouleur", qu'est-ce qui est en info-bulle?

lacouleur=erreur 2042

Sc.Interior.ColorIndex=-4105 je n'avais pas vu cette erreur.

Quand je suis sur ma feuille de couleurs et que je change toutes les couleurs et que je clique sur trouver les index de couleurs, il y a pas de souci, il me les trouve.

quand je viens sur le TCD pas de souci, il réfléchi et ne me rapporte aucune erreur après sa réflexion

quand je passe sur le Graph, c'est la qu'il plante après avoir rempli au 3/4 la barre de réflexion

dans Insertion/Nom/Définir, combien de noms as-tu?

Vois-tu "indexs" et "XX1"? je n'ai que ces deux la

Re-,

si toujours pas ça, va falloir opérer à cœur ouvert....

On va y aller pas à pas...

Mets-toi sur une autre feuille que le graphique

Dans le VBE (pour Visual Basic Editor, éditeur de code VBA (Visual Basic for Application))

Tu doubles-clic sur "Graph1" (ou le nom de la feuille graphique)

tu cliques dans la marge grise qu'il y a, à gauche de la fenêtre de codes, au niveau de la ligne :

For Each Sc In ActiveChart.SeriesCollection

normalement, toute la ligne passe en "marron", ainsi qu'un rond marron dans la marge (c'est une balise "stop")

Puis, reviens sur le fichier, et sélectionne la feuille graphique

Le code va se lancer, mais s'arrête au niveau de la ligne

à partir de ce moment-là, appuie sur F8 (tu es alors en mode pas-à-pas)

le code continue ligne par ligne

dès que tu quittes la ligne :

lacouleur = Application.Index(.[indexs], Application.Match(Val(Sc.Name), .[XX1], 0))

passe ta souris sur SC.Name, et regarde la valeur

normalement, au début, ce sera bon

à force d'appuyer sur F8, tu vas pratiquement dérouler tout le code, et tu auras l'erreur

note la valeur de Sc.Name, et dis moi

Bon courage....

Sc.Name = "Total"

J'ai fait la même chose sur le fichier que tu as fait et le Sc.Name = "2"

Ok,

si tu veux mettre une couleur à cette série, comme tu as un champ supplémentaire nommé "Total" (vérifie bien l'orthographe), tu peux rajouter ce mot dans la colonne A de la feuille couleurs, tu mets une couleur dans la colonne B, tu cliques sur le bouton jaune, et tu auras l'index de la couleur du champ "Total"

Cependant, il faut modifier légèrement le code...

Private Sub Chart_Activate()
Dim Sc As Series
ActiveWorkbook.RefreshAll
For Each Sc In ActiveChart.SeriesCollection
    With Sheets("couleurs")
        If Sc.Name = "Total" Then
            lacouleur = Application.Index(.[indexs], Application.Match(Sc.Name, .[XX1], 0))
        Else
            lacouleur = Application.Index(.[indexs], Application.Match(Val(Sc.Name), .[XX1], 0))
        End If
        Sc.Interior.ColorIndex = lacouleur
    End With
Next Sc
End Sub

si tu ne veux pas y mettre de la couleur, tu mets ceci :

Private Sub Chart_Activate()
Dim Sc As Series
ActiveWorkbook.RefreshAll
For Each Sc In ActiveChart.SeriesCollection
    With Sheets("couleurs")
        If Sc.Name <> "Total" Then
            lacouleur = Application.Index(.[indexs], Application.Match(Val(Sc.Name), .[XX1], 0))
        End If
        Sc.Interior.ColorIndex = lacouleur
    End With
Next Sc
End Sub

On va y arriver...

@ te relire

j'ai une bonne et une mauvaise nouvelle :

la bonne : XX1 tout est OK les couleurs se mettent parfaitement bien avec le premier code que tu as fait (une couleur pour total)

la mauvaise, c'est que j'ai le paramètre XX2 a étudier selon le même principe.

j'ai donc mis dans l'onglet couleurs dans ma colonne "A" sous ce que tu avais fait mes paramètre XX2 qui ne sont pas numéraires mais alphabétiques :

xx1 : 7 valeurs : 2 à 8

xx2 : 9 valeurs : A à I

La valeur de Sc.Name après avoir déroulé le code est "A"

Est ce parce que c'est des lettres que ca Bug?

Re-,

Est ce parce que c'est des lettres que ca Bug?

Oui

dans le code, j'utilise la fonction Val, qui renvoie une valeur numérique

essaie avec ce code :

Private Sub Chart_Activate()
Dim Sc As Series
ActiveWorkbook.RefreshAll
For Each Sc In ActiveChart.SeriesCollection
    With Sheets("couleurs")
        If Not IsNumeric(Sc.Name) Then
            lacouleur = Application.Index(.[indexs], Application.Match(Sc.Name, .[XX1], 0))
        Else
            lacouleur = Application.Index(.[indexs], Application.Match(Val(Sc.Name), .[XX1], 0))
        End If
        Sc.Interior.ColorIndex = lacouleur
    End With
Next Sc
End Sub

On y est presque....

oui presque : on se retrouve avec un problème similaire à "total"

tous les champs de la base n'étant pas remplis il plante au meme endroit avec :

Sc.Name ="(vide)"

cela le fait aussi avec xx1 alors que cela marchait tant que je n'avais pas essayé le xx2

Re-,

nouvelle version :

Private Sub Chart_Activate()
Dim Sc As Series
ActiveWorkbook.RefreshAll
For Each Sc In ActiveChart.SeriesCollection
    With Sheets("couleurs")
        If Sc.Name <> "" Then
            If Not IsNumeric(Sc.Name) Then
                lacouleur = Application.Index(.[indexs], Application.Match(Sc.Name, .[XX1], 0))
            Else
                lacouleur = Application.Index(.[indexs], Application.Match(Val(Sc.Name), .[XX1], 0))
            End If
            Sc.Interior.ColorIndex = lacouleur
        End If
    End With
Next Sc
End Sub
Rechercher des sujets similaires à "graphique croise dynamique couleurs automatique"