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 :

VBA - Mise à jour graphique après ajout séries via VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Mars 2021
    Messages : 2
    Par défaut VBA - Mise à jour graphique après ajout séries via VBA
    Bonjour à tous,

    Je cherche une solution au problème suivant.
    J'ai créé une Macro qui me permet d'ajouter des séries dans un graphique (voir ci-dessous) et j'ai parfois le problème que le graphique ne se met pas à jour (séries non-visible).
    Pour le mettre à jour je dois faire un click droit sur le graph -> sélectionner les données... -> cliquer sur la dernière série -> OK
    Une fois que j'ai fais 2 fois la manipulation précédente la macro fonctionne...

    Je n'arrive pas identifier ce qui créer ce problème car la macro peut très bien fonctionner pendant un moment puis avoir le problème de mise à jour et comme mentionné ci-dessous après 2 manipulation en manuelle elle se remet à fonctionner.

    Ci-joint vous trouverez le fichier excel avec la macro. Pour activer la macro il faut double cliquer sur les cellules H6:O149 de la feuille "Analysis" et le graphique doit se mettre à jour dans la feuille "Pivot2".
    Ci-dessous un extrait de la macro.


    Je vous remercie par avance pour votre aide et j'espère que vous trouverez une solution


    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
    Sub Graphique ()
        Set Rg_chartX = Worksheets("Pivot2").Range("$C$1:$" & Rg_column & "$1")
        ActiveChart.FullSeriesCollection(1).XValues = Rg_chartX
     
        Set Rg_chart = Worksheets("Pivot2").Range("$C$2:$" & Rg_column & "$2")
        ActiveChart.FullSeriesCollection(1).Values = Rg_chart
     
        Set Rg_chart = Worksheets("Pivot2").Range("$C$3:$" & Rg_column & "$3")
        ActiveChart.FullSeriesCollection(2).Values = Rg_chart
     
        w = 0
        For w = 0 To k - 2
     
            Set Rg_chart = Worksheets("Pivot2").Range("$C$4:$" & Rg_column & "$4").Offset(w, 0)
            'ActiveChart.FullSeriesCollection(3).Values = Rg_chart
     
            ActiveChart.SeriesCollection.NewSeries
            ActiveChart.FullSeriesCollection(3 + w).Name = Worksheets("Pivot2").Range("$C$4").Offset(w, -1)
            ActiveChart.FullSeriesCollection(3 + w).Values = Rg_chart
            ActiveChart.FullSeriesCollection(3 + w).AxisGroup = 2
            ActiveChart.FullSeriesCollection(3 + w).ChartType = xlXYScatter
            ActiveChart.FullSeriesCollection(3 + w).XValues = Rg_chartX
            Application.Wait (Now + TimeValue("00:00:01"))
            DoEvents
            'Worksheets("Pivot2").ChartObjects("Graphique 3").Chart.Refresh
        Next
     
        'configure chart
        Worksheets("Pivot2").ChartObjects("Graphique 3").Chart.Axes(xlValue, xlPrimary).MaximumScale = Worksheets("Pivot2").Range("A2")
        Worksheets("Pivot2").ChartObjects("Graphique 3").Chart.Axes(xlValue, xlSecondary).MaximumScale = Worksheets("Pivot2").Range("A2")
        Worksheets("Pivot2").ChartObjects("Graphique 3").Chart.Axes(xlValue, xlPrimary).MinimumScale = Worksheets("Pivot2").Range("A4")
        Worksheets("Pivot2").ChartObjects("Graphique 3").Chart.Axes(xlValue, xlSecondary).MinimumScale = Worksheets("Pivot2").Range("A4")
        Worksheets("Pivot2").ChartObjects("Graphique 3").Chart.Axes(xlValue, xlSecondary).TickLabels.NumberFormat = "#.##0,000"
     
        Worksheets("Pivot2").ChartObjects("Graphique 3").Chart.Refresh
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Bonjour,

    Je ne sais pas si ce code va résoudre le problème.
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Option Explicit
     
    Sub Graphique()
        Dim wA As Worksheet, wP As Worksheet
        Dim i As Long, j As Long, k As Long
        Dim sRef As String, rChart As Range, s As Object
     
        Set wA = ThisWorkbook.Worksheets("Analysis")
        Set wP = ThisWorkbook.Worksheets("Pivot2")
     
        wP.Range("C1:R33").ClearContents
     
        sRef = Range("A" & ActiveCell.Row).Value    '--- Ref (en colonne A)
     
        i = 6               '--- 6 = n° ligne premières données
        While wA.Cells(i, 1) <> sRef
            i = i + 1       '--- i = n° première ligne du groupe de données
        Wend
     
        j = 8               '--- 8 = n° première colonne de données
        While wA.Cells(5, j) <> "-" _
              And wA.Range("A5").Offset(0, j) <> "Average"
            j = j + 1
        Wend
        j = j - 1       '--- j = n° dernière colonne du groupe de données
     
        k = i
        While wA.Cells(k, 1) = sRef
            k = k + 1
        Wend
        k = k - 1       '--- k = n° dernière ligne du groupe
     
        '--- recopie valeurs groupe données de feuille Analysis dans feuille Pivot2
       'wA.Range(Cells(i, 8), Cells(k, j)).Select
        wA.Range(Cells(i, 8), Cells(k, j)).Copy
        wP.Range("C4").PasteSpecial xlPasteValues
     
        '--- recopie valeurs ligne X
        wA.Range(Cells(5, 8), Cells(5, j)).Copy
        wP.Range("C1").PasteSpecial xlPasteValues
        Application.CutCopyMode = False
     
        '--- inscrit valeurs pour ligne max et ligne min
        sRef = Range(Cells(2, 3), Cells(2, j - 5)).Address
        wP.Range(sRef) = wA.Cells(i, 3).Value + wA.Cells(i, 4).Value
        sRef = Range(Cells(3, 3), Cells(3, j - 5)).Address
        wP.Range(sRef) = wA.Cells(i, 3).Value + wA.Cells(i, 5).Value
     
        '--- mise à jour du graphique
        wP.Select
        wP.ChartObjects("Graphique 3").Activate
     
        With ActiveChart
            '--- supprime anciennes séries de données (sauf Mim et Max)
            For Each s In .SeriesCollection
                If s.Name <> "Max" And s.Name <> "Min" Then
                    s.Delete
                End If
            Next
            '--- actualise, ajoute séries
            Set rChart = wP.Range(Cells(1, 3), Cells(1, j - 5))
            .FullSeriesCollection(1).XValues = rChart              '--- X
            .FullSeriesCollection(1).Values = rChart.Offset(1, 0)  '--- Max
            .FullSeriesCollection(2).Values = rChart.Offset(2, 0)  '--- Min
            For j = 0 To k - i
                .SeriesCollection.NewSeries
                .FullSeriesCollection(3 + j).Name = wP.Range("B" & 4 + j)
                .FullSeriesCollection(3 + j).Values = rChart.Offset(3 + j, 0)
                .FullSeriesCollection(3 + j).AxisGroup = 2
                .FullSeriesCollection(3 + j).ChartType = xlXYScatter
            Next
            '--- configure échelles
            .Axes(xlValue, xlPrimary).MaximumScale = wP.Range("A2")
            .Axes(xlValue, xlSecondary).MaximumScale = wP.Range("A2")
            .Axes(xlValue, xlPrimary).MinimumScale = wP.Range("A4")
            .Axes(xlValue, xlSecondary).MinimumScale = wP.Range("A4")
            .Axes(xlValue, xlSecondary).TickLabels.NumberFormat = "#.##0,000"
            .Refresh
        End With
        Set rChart = Nothing
        Set wA = Nothing
        Set wP = Nothing
    End Sub
    Dans une autre discussion, il est indiqué qu'il suffit d'ajouter une, voire deux fois, l'instruction DoEvents !?

    Cordialement.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Mars 2021
    Messages : 2
    Par défaut
    Merci pour ton aide EricDgn, j'ai testé le code que tu a proposé mais le problème est toujours là.
    Je vais me renseigner concernant la solution avec Do Events.

Discussions similaires

  1. [XL-2007] Mise à jour d'une base données via recherche avancée et formulaire en excel VBA
    Par nazz4 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/02/2011, 00h11
  2. Mise à jour DBGrid après ajout d'un champ
    Par jackvpt dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/12/2010, 10h03
  3. Réponses: 4
    Dernier message: 09/03/2007, 19h19
  4. Mise à jour quotidienne d'une table via fichier texte
    Par chooky97150 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 31/08/2006, 22h00
  5. Mise à jour enregistrements après impression
    Par alalau dans le forum Access
    Réponses: 2
    Dernier message: 17/12/2004, 16h13

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