Echec mise en forme graphique VBA

Bonjour,

Je rencontre un problème au cours d'une macro permettant de créer automatiquement un graphique en nuage de points. La macro en elle-même ne génère aucune erreur, mais une partie de la mise en forme souhaitée (en commentaire dans le code) n'est pas appliquée à l'issue du fonctionnement de la macro. J'ai pourtant repris du code généré par l'enregistreur de macro (qui utilise des instructions "select" que j'ai retiré, mais la macro donne le même résultat en les laissant). Quelqu'un a-t-il une idée de la nature du problème ?

J'ai ajouté en pièce jointe un aperçu du rendu actuel (gauche) et du rendu souhaité (droite).

Voilà le code concerné (j'ai volontairement simplifié les lignes qui dépendaient du reste de la macro, notamment concernant les plages de données des séries) :

Sub Extrait()

    Dim DAC As Byte, N1 As Byte, Y As String

    For DAC = 1 To 5 'Boucle sur les 5 graphiques à créer
        Sheets("GRAPHS").Shapes.AddChart.Select
        With ActiveChart
            .ChartType = xlXYScatter 'Type = nuage de points
            For N1 = 1 To 6 'Boucle sur les 6 séries à créer
                .SeriesCollection.NewSeries
                With ActiveChart.SeriesCollection(N1)
                    If N1 <= 3 Then
                        .Name = "Groupe " & N1 'Séries 1 à 3 : nuage de points
                    Else
                        .Name = "Série " & N1 'Séries 4 à 6 : lignes
                    End If
                    If N1 <= 3 Then
                        .XValues = "=BDD!$AD$2:$AD$50000" 'Plage de valeurs X (N° ligne variable dans la macro originale)
                        .Values = "=BDD!$A" & Chr(68 + N1) & "$2:$A" & Chr(68 + N1) & "$50000" 'Plage de valeurs Y (idem)
                        .MarkerStyle = 2 'Forme du point = losange
                        .MarkerSize = 2 'Taille = 2
                        'DÉBUT NON RESPECTÉ--------------------------------------------------------------------------------------------------
                        .Format.Line.Visible = msoFalse 'Pas de ligne de marquage
                        With ActiveChart.SeriesCollection(N1).Format.Fill
                            .Visible = msoTrue 'Point affiché
                            If N1 = 2 Then .ForeColor.RGB = RGB(0, 176, 80) Else .ForeColor.RGB = RGB(192, 0, 0) 'Couleur de remplissage du point
                            .Transparency = 0
                            .Solid
                        End With
                        'FIN NON RESPECTÉ---------------------------------------------------------------------------------------------------
                    Else
                        .XValues = "=GRAPHS!$P$6:$P$60" 'Plage X commune aux séries 4, 5 et 6
                        If N1 = 4 Then
                            .Values = "=GRAPHS!$" & Chr(81 + DAC) & "$6:$" & Chr(81 + DAC) & "$60" 'Plage Y série 4
                            .Format.Line.Visible = msoTrue 'Ligne visible
                            .Format.Line.ForeColor.RGB = RGB(0, 0, 0) 'Couleur ligne : noir
                            .Format.Line.DashStyle = msoLineSysDash 'Ligne en pointillés
                        End If
                        If N1 = 5 Then
                            If 87 + DAC <= 90 Then Y = Chr(87 + DAC) Else Y = "A" & Chr(61 + DAC) 
                            .Values = "=GRAPHS!$" & Y & "6:$" & Y & "$60" 'Plage Y série 5
                            .Format.Line.Visible = msoTrue 'Ligne visible
                            .Format.Line.ForeColor.RGB = RGB(0, 40, 150) 'Couleur ligne : bleu
                        End If
                        If N1 = 6 Then
                            Y = "A" & Chr(67 + DAC)
                            .Values = "=GRAPHS!$" & Y & "6:$" & Y & "$60" 'Plage Y série 5
                            .Format.Line.Visible = msoTrue 'Ligne visible
                            .Format.Line.ForeColor.RGB = RGB(180, 100, 20) 'Couleur ligne : marron
                        End If
                        .MarkerStyle = -4142 'Points masqués
                        .Format.Line.Weight = 2 'Epaisseur ligne = 2
                        .AxisGroup = 2 'Séries 4 à 6 sur l'axe secondaire (permet affichage au 1er plan)
                    End If
                End With
            Next N1
            .Axes(xlValue).MajorGridlines.Delete 'Suppression de la grille de fond de l'axe Y
            .Axes(xlValue).TickLabels.NumberFormat = "0" 'Suppression des décimales de l'axe Y
            .Axes(xlCategory).TickLabels.NumberFormat = "d/m" 'Changement du format date de l'axe X
            .Axes(xlValue, xlSecondary).MaximumScale = 140 'Maximum imposé axe Y secondaire = 140
            .Axes(xlValue).MaximumScale = 140 'Maximum imposé axe Y = 140
            .Legend.Delete 'Suppression de la légende
            .Axes(xlValue, xlSecondary).Delete 'Suppression de l'axe secondaire
        End With
    Next DAC

End Sub
graphsexcelvba

bonjour

un graphique se crée une fois au départ, au clavier+souris

ensuite on réactualise et il se met à jour

pourquoi as-tu besoin de "recréer" le même graphique 1000 fois ?

Je n'ai mis qu'un extrait ici, mais la finalité est de créer une image (JPEG) de chaque graphique et les supprimer ensuite.

Mon problème est que je travail sur un fichier très lourd (base de données >350000 lignes) et que laisser des graphiques s'afficher en permanence ralenti le fichier, alors que je ne les utilisent que ponctuellement pour suivre les données.

Autre chose, je créer 5 graphiques à partir des mêmes colonnes, mais sur des lignes différentes. J'ai d'abord fait mes graphiques avec des plages nommées dynamiques, mais c'est assez lourd aussi. En passant par la macro, je peux actualiser au besoin les plages de données.

Quelqu'un à une piste ?

Mon problème étant relativement pénalisant pour mon travail, et n'ayant eu aucune réponse, je me permet de remonter le sujet.

re

alors crée un fichier avec graphique qui ira interroger tes grosses bases Excel sans même l'ouvrir !

télécharge PowerQuery

lors de l'obtention des données, ne charge pas, ajoute au modèle

1000 000 lignes, même pas peur

Bonjour jmd,

Je regarde ce que je peux faire avec PowerQuery, il faut déjà que j'obtienne l'autorisation de feu l'administrateur pour installer ça !

Rechercher des sujets similaires à "echec mise forme graphique vba"