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 :

Excel plante à la fin de l'exécution de la macro de mise à jour d'un graphique croisé dynamique


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Excel plante à la fin de l'exécution de la macro de mise à jour d'un graphique croisé dynamique
    Bonjour à tous et merci pour tout ce que j'ai pu apprendre en lisant ce forum avant de m'y inscrire.

    J'ai un problème particulier que je n'arrive pas à résoudre alors je vais cette fois demander...

    J'utilise des graphiques croisés dynamiques pour visualiser des choses et j'utilise les filtres intégrés pour modifier le périmètre de l'analyse. Évidemment, parfois, le nombre de série est modifié car certaines sont nulles pour le périmètre sélectionné, et la mise en forme du graphique "saute". Pour pallier ce problème, j'ai une belle macro qui remets en forme le graphique en fonction du nom des série (modification des couleurs, une série passe aussi en ligne plutôt que histogramme empilé).

    Bref tout ça fonctionne bien avec un bouton, mais j'aimerai que cela se fasse automatiquement. J'ai donc tenté d'utiliser la fonction PivotTableUpdate de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
        Call Couleur_Graph_Feuille("T_ContratCouleur", ActiveWorkbook.ActiveSheet.Name)
    End Sub
    Couleur_Graph_Feuille est la macro de mise à jour du graphique qui fonctionne très bien si je l'appelle par un bouton avec exactement ce code . Elle prend comme paramètre le tableau de référence des couleur et la feuille sur laquelle on est (j'ai de nombreux onglets, avec des GCD, je préfère ne pas boucler sur tout inutilement).

    Ce qui est étrange, c'est que si je l'appelle depuis PivotTableUpdate, Excel plante (récupération du fichier, tout ça). Je l'ai exécutée en pas à pas pour vérifier et Excel plante après le End Sub...

    J'ai voulu confirmer que je ne créais pas une boucle, mais la macro lancée par le bouton ne lance pas l'event PivotTableUpdate.

    Est-ce que quelqu'un aurait une idée de ce qui se passe ? Je peux laisser mon bouton, mais ce serait plus propre (et plus satisfaisant intellectuellement) si je trouvais pourquoi cela ne fonctionne pas...

    Merci d'avance !
    ---
    Edit 1 : Fautes de français...

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Ton sujet m'intéresse vraiment car moi j'ai un problème concernant les graphiques croisés dynamiques aussi qui ne s'actualise pas.
    Je voudrais savoir si vous pouviez joindre votre macro pour voir à quoi elle ressemble.


    Merci pour cette aide

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,


    Voilà le code qui fait la modification du graphique. Il mets a jour les couleurs en fonction d'une table de paramétrage de deux colonnes : Nom de la série; Référence de la couleur. De plus s'il trouve une série "Capa" il transforme de type de graphique pour la série en ligne.

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Sub Couleur_Graph_Feuille(sTblParam As String, eOnglet As String)
    'Mise à jour des couleurs des graphiques selon les données de la table pour la feuille en cours
    'On donne aux séries du graphique les couleurs passées
    'en paramètres pour chaque contrat
    'Paramètre : sTblParam, entrée, tabeau contenant les contrats et les couleurs associées
     
    Dim tblParam As ListObject, SerieContrat As Series
    Dim varParam As Variant, iBcle As Integer
    Dim iOnglet As Integer, iGraph As Integer
    Dim Ch As Chart
     
        'On initalise la variable colonne du tableau passé en paramètre (ce tableau doit être dans l'onglet Paramétrages)
        Set tblParam = ActiveWorkbook.Sheets("Paramétrages").ListObjects(sTblParam)
     
        'On met en table le tableau
        varParam = tblParam.DataBodyRange
     
     
        'Recherche les graphiques incorporés dans la feuille
        For iGraph = 1 To Sheets(eOnglet).ChartObjects.Count
     
            'On active le graphique afin de pouvoir travailler dessus
            Sheets(eOnglet).ChartObjects(iGraph).Activate
     
            'Avec le graphique en cours
            With ActiveChart
     
                'On passe en revu toutes les séries
                For Each SerieContrat In .SeriesCollection
     
                    'On cherche dans tous les contrats
                    For iBcle = LBound(varParam) To UBound(varParam)
     
                        'On teste si l'on a le même nom que le paramètre
                        If InStr(1, SerieContrat.Name, varParam(iBcle, 1)) <> 0 Then
     
                            'On applique la couleur à la série
                            SerieContrat.Interior.ColorIndex = varParam(iBcle, 2)
                        End If
     
                        'On teste s'il s'agit de la capacité
                        If InStr(1, SerieContrat.Name, "Capa") <> 0 Then
     
                            'on change les colonnes en courbe
                            SerieContrat.ChartType = xlLine
     
                            'on change la couleur de la ligne en rouge
                            SerieContrat.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
     
                            'On change la taille de la ligne
                            SerieContrat.Format.Line.Weight = 2.25
                        End If
                    Next iBcle 'contrat suivant
                Next 'Série suivante
            End With 'Fin du graphique en cours
        Next iGraph 'Graphique suivante
     
     
        'On libère la mémoire
        Set tblParam = Nothing
     
    End Sub
    Si cela peut aider

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci pour avoir poster ton code

    Ce code m'aidera pour mettre une courbe en rouge.

    Sinon est ce que tu sais comment fixer une plage de données car moi mon graphique ne se rafraichit pas lorsque mes données changent quand je rajoute des lignes ou en supprime.

    Merci pour tes réponses

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Si tu utilises Excel 2007 ou plus, je ne peux que te conseiller d'utiliser le mode "tableau". Cela crée une plage nommée qui s'étend lorsque l'on ajoute des lignes, entre autres fonctionnalités pratiques. C'est dans le ruban "Insertion". Cela devrait résoudre ton problème de plage de taille modifiable.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/05/2012, 22h41
  2. Réponses: 3
    Dernier message: 29/04/2012, 21h26
  3. Réponses: 1
    Dernier message: 23/01/2009, 09h59
  4. Réponses: 5
    Dernier message: 03/04/2007, 17h37
  5. [VBA-Excel] Macro de mise à jour de Report
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 13/07/2006, 11h23

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