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 :

problème manipuler un graphique dynamique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    chef de service
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : chef de service

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Par défaut problème manipuler un graphique dynamique
    Bonjour,

    Je souhaite manipuler un tableau croisé dynamique avec un graphique depuis un userform.
    La solution que j'ai trouvé : depuis un combobox je colle un nom dans la feuille ou se trouve le tableau et ensuite avec une macro récupère le nom et modifie le filtre nom du tableau.

    Nom : Capture.JPG
Affichages : 936
Taille : 60,9 KoNom : Capture1.JPG
Affichages : 649
Taille : 21,3 Ko

    Dans l'userform j'importe l'image du graphique, le combo me permet de selectionner une personne, ensuite je valide, le nom est collé dans une cellule de la feuille, par une macro je le récupère et je modifie le tcd donc le graphique,
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Nom"). _
    CurrentPage = Range("o1").Value
    ce qui me permet depuis l'userform de voir différents profils. Le problème est que j'alimente le combo à partir d'un liste de noms dans le classeur, et que si cet agent n'a pas encore suivi de formation il ne figure pas dans le tcd, et du coup j'ai un message d'erreur qui me plante le programme.

    Question: peut on charger directement les valeurs contenues dans le filtre du tcd " PivotFields("Nom"). _CurrentPage =???? " dans la combo? ça me permettrai d'éviter d'une part ce bidouillage et d'autre part d'éviter le bug
    ou alors une procédure qui contrôle si le nom se trouve dans le filtre et si vrai continu, si faut "messagebox" et abandon de la procédure.

    Ci dessous le code pour l'appel de l'image du graphique dans l'userform et ensuite le code de la macro qui modifie le nom du filtre

    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
     
    Private Sub CommandButton10_Click()
     If Me.choix.Text = "" Then
            MsgBox "Vous devez entrer un nom."
            Me.choix.SetFocus
            Exit Sub
        End If
    Sheets("Stat agents").Select
    Range("o1") = Me.choix.Value
    Call agents_FMPA
                                              ' active la feuille contenant le graphique la feuille s'appelle Graphe équipes
    ActiveWorkbook.RefreshAll                                                  ' raffraichir les données du tableau croisé dynamique
    Set CurrentChart = Sheets("Stat agents").ChartObjects(2).Chart         ' référencé l'objet CurrentChart, là dans l'exemple, c'est le 2eme graphique "ChartObjects(2)"
    Sheets("Stat agents").ChartObjects("Graphique 2").Activate             ' active le graphique qui s'appelle "Graphique 2"
    ActiveChart.ChartArea.Select
    ActiveChart.ShowWindow = True
    Fname = ThisWorkbook.Path & "\temp2.gif"                                   ' attribution d'un nom pour l'export du graphique, dans le dossier courant du fichier
    CurrentChart.Export Filename:=Fname, FilterName:="GIF"
    UserForm6.Image1.Picture = LoadPicture(Fname)                              ' ensuite j'ai créé un UserForm (userform3) avec juste une image (vierge, qui s'appelle Image1), qui charge donc l'image venant d'être enregistré.
    End Sub
    code macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub agents_FMPA()
    ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Nom"). _
            ClearAllFilters
        ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("Nom"). _
            CurrentPage = Range("o1").Value
            ActiveSheet.ChartObjects("Graphique 2").Activate
        ActiveChart.ChartTitle.Select
        ActiveChart.ChartTitle.Text = "Suivi formation" & ": " & Range("o1").Value
    End Sub

    Je vous remercie pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mimicor15 Voir le message
    Bonjour,

    Sans garantie car pas testé, je verrais bien un code comme ci-dessous.

    Votre procédure Agents_FMPA devient une fonction. Si le nom de l'agent est trouvé, on met à jour le Tcd et le graphique et on continue le reste du code présent dans la procédure CommandButton10.
    Les paramètres de la fonction permettent de la réutiliser dans d'autres TCD graphiques du même ordre.
    Vous pourriez également tester si l'agent a suivi une formation avec une fonction du type NbVal ou autre, depuis votre source de données avant de lancer la procédure.

    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
     
    Sub TestAgents_FMPA()
     
        With ActiveSheet
             If Agents_FMPA(ActiveSheet, "XXXX Jean-Pierre", .PivotTables("Tableau croisé dynamique4"), .ChartObjects("Graphique 2")) = False Then
                MsgBox "Ce nom n'a pas été trouvé dans le TCD !", vbCritical
             Else
                ' Suite de votre programme lancé avec CommandButton10
                '....
             End If
        End With
     
    End Sub
     
    Function Agents_FMPA(ByVal FeuilleTcd As Worksheet, ByVal NomAgent As String, ByVal Pt As PivotTable, GraphiqueAssocie As ChartObject) As Boolean
     
    Dim Pf As PivotField
    Dim Pi As PivotItem
     
        Agents_FMPA = False
        With FeuilleTcd
             Set Pf = Pt.PivotFields("Nom")
             Pf.ClearAllFilters
             For Each Pi In Pf.PivotItems
                 If Pi.Name = NomAgent Then
                    Pf.CurrentPage = NomAgent
                    GraphiqueAssocie .Chart.ChartTitle.Text = "Suivi formation" & ": " & NomAgent
                    Agents_FMPA = True
                    Exit For
                End If
            Next Pi
            Set Pf = Nothing
        End With
     
    End Function

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 569
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 569
    Par défaut
    Bonjour

    Tu peux aussi créer un TCD avec juste le champ nom et utiliser cette plage pour alimenter ta combo box.

    Si des filtres doivent être synchronisés car ils modifient la liste, utilise un segment connecté à ton TCD principal et ce TCD utilitaire.

  4. #4
    Membre confirmé
    Homme Profil pro
    chef de service
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : chef de service

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Par défaut reponse
    Super merci pour vos réponses.

    J'ai testé ce matin en adaptant le code pour qu'il fonctionne direct avec le combo, tout fonctionne très bien à priori.

    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Probléme sur graphique dynamique
    Par JIPE59552 dans le forum Excel
    Réponses: 1
    Dernier message: 22/09/2015, 11h10
  2. [XL-2013] Problème graphique dynamique
    Par Missouflo dans le forum Excel
    Réponses: 5
    Dernier message: 25/08/2015, 15h26
  3. [XL-2013] Problème de mise à jour graphique dynamique
    Par martineaston dans le forum Excel
    Réponses: 2
    Dernier message: 18/07/2014, 23h37
  4. Problème de graphique dynamique
    Par Heey-Zeed dans le forum GUI
    Réponses: 2
    Dernier message: 17/10/2013, 10h18
  5. [XL-2010] Problème graphique dynamique
    Par Harry Covair dans le forum Excel
    Réponses: 1
    Dernier message: 26/07/2012, 15h00

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