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

Contribuez Discussion :

Garder le format à l'actualisation d'un graphe croisé dynamique [FAQ]


Sujet :

Contribuez

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut Garder le format à l'actualisation d'un graphe croisé dynamique
    Garder le format à l'actualisation d'un graphe croisé dynamique
    Pour graphique incorporé (pas une feuille graphique)

    J'avais un problème de format pour mes graphes croisés dynamiques. A chaque fois que je changeais un champ dynamique, le format par défaut revenait (avec ses jolies couleurs).

    Voici comment j'ai résolu mon problème, en espérant que ce soit utile. C'est un mix de plusieurs choses que j'ai vues... donc merci à ceux qui m'ont aidé. Ce post est juste un regroupement de ces infos.
    Il y a surement d'autres solutions.

    1) Création du graphe

    Pour cela, c'est tout simple. On sélectionne ses données, on fait un tableau croisé dynamique ("Données > Rapport de tableau croisé dynamique") que l'on transforme en graphe (clic droit sur le tableau puis "Graphique croisé dynamique").
    Pour utiliser le code ci dessous, j'ai renommé mon graphique. Pour cela, sélectionner votre graphique en appuyant sur la touche "Ctrl" ce qui fera apparaître le nom actuel que vous pourrez modifier (dans le coin haut gauche d'excel, à gauche de la barre de formule). Dans mon exemple, je l'ai appelé "graphNoteEncours".

    2) Définir le style

    Donnez à votre graphe le format que vous voulez et enregistrer le. Pour cela, clic droit sur le graphe, "Type de Graphique...". Allez dans l'onglet "Type personnalisé" et choisissez le bouton radio ("sélectionner parmi les") "Type pesonnalisé". A ce moment là, un bouton "Ajouter..." apparait, cliquez dessus et saisissez un nom de modèle (pour mon exemple, "noteEncours").

    Note : on peut remettre à la main ce modèle, le but de l'exemple est en fait d'automatiser l'activation de ce modèle après un changement.


    3) Code pour automatiser l'activation du modèle

    Mon exemple correspond à des graphes incorporés, c'est à dire un objet graphique et non une feuille graphique. Pour le cas d'une feuille graphique, on peut agir directement sur les évènements de la feuille. Dans le cas de graphes objets, il faut créer un module de classe et lier le graphe à ce module.

    Donc, direction l'éditeur VBa (Alt + F11).

    Clic droit (j'aime le clic droit ), donc clic droit sur le projet (dans l'arborescence du projet) et faites "Insertion > Module de Classe".

    Nommer ce module "EventClassModule" (le nom dans la fenêtre de propriété).

    Voici le code du module de classe "EventClassModule" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public WithEvents Public WithEvents myChartClass As Chart
     
    ' fonction appelée à chaque MAJ du graphe
    Private Sub myChartClass_Calculate()
          ' activation du modèle de format
          myChartClass.ApplyCustomType ChartType:=xlUserDefined, TypeName:= _
            "noteEncours"
    End Sub
    (Il ne faut pas oublier la déclaration de myChartClass)

    Ensuite, il faut lier le module de classe au graphe lui même. Pour cela, on va mettre le code suivant dans le workbook ("ThisWorkbook" par défaut) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim myClassModule As New EventClassModule
     
    ' lier le graphique au module de classe
    Private Sub Workbook_Open()
        Set myClassModule.myChartClass = _
            Sheets("Note Encours").ChartObjects("graphNoteEncours").Chart
    End Sub
    Comme cela, le code s'executera à l'ouverture du fichier excel.

    Maintenant, pour chaque MAJ ou recalcule du graphe, on gardera le même modèle.

    Pour ajouter un autre graphe au même modèle, il suffit de définir une autre instanciation du module de classe et de lier le module au graphe.

    Fichier exemple en PJ.

    Sources :
    aide Excel ("Utilisation d'événements avec des graphiques incorporés")
    Excel Download
    Developpez.com
    Fichiers attachés Fichiers attachés
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut
    en fait le code, n'est pas parfait.
    A certaine ouverture, cela fait ramer... en effet, je fais une actualisation dans la fonction d'actualisation. Donc ca boucle ... aie
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Le problème que tu as et la solution que tu propose correspondent exactement a mon souci.
    Le problème c'est que mon fichier ne fonctionne pas, j'ai donc télécharger ton fichier. il ne fonctionne pas non plus.
    Est ce qu'il y a une manip a faire dans excel.
    ou les formules ne son pas correct ? je ne sais pas.

    En tout cas si tu pouvais m'aider sur ce sujet

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    après avoir un peu galéré, la solution que j'ai trouvé la plus pratique est de créer un graphique "normal" à partir des données du tableau dynamique croisé.
    Pour cela, il faut un peu ruser, car Excel semble tenir absolument à ce que tout graphique créé à partir de données d'un tableau dynamique croisé soit un "Graphe dynamique croisé".
    La méthode que j'utilise est la suivante:
    1. Cliquer sur le bouton "Assistant graphique" en ayant pris garde que la cellule active soit en dehors du tableau dynamique croisé.
    2. Séléctionner le type de graphique souhaité
    3. Cliquer sur l'onglet "Série" en haut
    4. Ajouter les séries une par une à l'aide du bouton ad-hoc et sélectionner les plages souhaitées du tableau dynamique.

    On obtient un graphique "normal" qui ne perd pas son format lors du rafraichissement des données du tableau dynamique croisé.
    En contrepartie, il ne faut pas que la structure du tableau change (insertion de nouveaux champs, ...) car dans ce cas le résultat sur le graphique est imprévisible...

    En espérant que cela puisse aider.

Discussions similaires

  1. [AC-2003] question sur le graph croisé dynamique
    Par rob1son76 dans le forum IHM
    Réponses: 0
    Dernier message: 23/04/2010, 10h21
  2. [AC-2007] Lancement requète / graph croisé dynamique
    Par Sherman dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 17/04/2010, 18h22
  3. Réponses: 1
    Dernier message: 14/12/2009, 16h57
  4. [XL-2007] affichage filtre graph croisé dynamique
    Par excel2007excel dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/04/2009, 15h19
  5. Graph croisé dynamique avec moyennes mobiles.
    Par alex830001 dans le forum Excel
    Réponses: 1
    Dernier message: 30/07/2008, 23h27

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