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
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 !