Code erreur VBA lors de la génération d'un graph
Bonjour tout le monde et mes meilleurs vœux,
J'obtiens un code erreur lors de la génération d'un graphique que je ne comprend pas :
Erreur d'exécution '-2147024809 (80070057)': Cet objet n'a pas de titre,
Qui arrive sur la ligne
.ChartTitle.Characters.Text = Title
Mon code :
Sub CreerGraph2(Titre As String, Tableau As String, Compagnie As String, Cle As Integer, W As String)
'Titre = "Titre à donner au graphique"
'Tableau = "Le nom du tableau contenant les données à tracer"
'Compagnie = "Le nom de la compagnie concernée"
'Cle = "La position de la compagnie dans la liste des compagnies"
'W = "La colonne désignant la compagnie à stater et ses objectifs, sur la feuille résultat"
Dim NbGraph As Integer
Dim Coords As String
Dim MaPlage As String
Dim LigneExpert As String
'On compte le nombre de graphique sur la page pour connaitre la position du graph que l'on va créer
NbGraph = Sheets(Compagnie).ChartObjects.Count
Select Case NbGraph
Case Is = 0
Coords = "A1"
Case Is = 1
Coords = "I1"
Case Is = 2
Coords = "A18"
Case Is = 3
Coords = "I18"
Case Is = 4
Coords = "A35"
Case Is = 5
Coords = "I35"
Case Is = 6
Coords = "A48"
Case Is = 7
Coords = "D48"
End Select
'Création du graphique
Charts.Add
ActiveChart.Location _
where:=xlLocationAsObject, name:=Compagnie
Dim Title As String
If Sheets("Résultats").Range(W & "15").Value = "" Then
Title = Titre & " - Autre(s) compagnie(s)"
With ActiveChart
'[#ALL] c'est pour que les en-têtes de Tableau soient prisent en compte
.SetSourceData Source:=Sheets("Recap").Range(Tableau & "[#ALL]"), PlotBy:=xlRows
.ChartType = xlLine
.HasTitle = True
.ChartTitle.Characters.Text = Title ' =>=>=>=> C'est la ligne qui génère l'erreur <=<=<=<=<=
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
.PlotArea.Interior.ColorIndex = 2
.Axes(xlValue).MajorGridlines.Border.LineStyle = xlDot
.ChartArea.Font.Size = 10
End With
Else
Title = Titre & " - " & Sheets("Résultats").Range(W & "15").Value
With ActiveChart
'[#ALL] c'est pour que les en-têtes de Tableau soient prisent en compte
.SetSourceData Source:=Sheets("Recap").Range(Tableau & "[#ALL]"), PlotBy:=xlRows
.ChartType = xlLine
.HasTitle = True
.ChartTitle.Characters.Text = Title
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
.PlotArea.Interior.ColorIndex = 2
.Axes(xlValue).MajorGridlines.Border.LineStyle = xlDot
.ChartArea.Font.Size = 10
End With
End If
'Placement du graphique
With ActiveSheet.ChartObjects(NbGraph + 1)
.Left = Range(Coords).Left
.Top = Range(Coords).Top
End With
'On supprime les séries de données concernant les autres compagnies afin d'avoir en visuel un graphe individuel
Dim d As Integer
For d = 0 To NbCompagnies - 1
If d = Cle Then
ActiveChart.SeriesCollection(2).Delete
Else:
If d < Cle Then
ActiveChart.SeriesCollection(1).Delete
Else
ActiveChart.SeriesCollection(2).Delete
End If
End If
Next
End Sub
Une petite idée ?
Sachant que j'utilise quasiment le même code, qui fonctionne, dans un autre module.
Code qui fonctionne :
Sub CreerGraph(Titre As String, Tableau As String, Expert As String, Cle As Integer, W As String)
'Titre = "Titre à donner au graphique"
'Tableau = "Le nom du tableau contenant les données à tracer"
'Expert = "Les initiales de l'expert concerné"
'Cle = "La position de l'expert dans la liste des experts"
'W = "La colonne désignant la compagnie à stater et ses objectifs, sur la feuille résultat"
Dim NbGraph As Integer
Dim Coords As String
Dim MaPlage As String
Dim LigneExpert As String
'On compte le nombre de graphique sur la page pour connaitre la position du graph que l'on va créer
If Expert = "" Then
Expert = "Sans nom"
Else:
Expert = Expert
End If
NbGraph = Sheets(Expert).ChartObjects.Count
Select Case NbGraph
Case Is = 0
Coords = "A1"
Case Is = 1
Coords = "I1"
Case Is = 2
Coords = "A18"
Case Is = 3
Coords = "I18"
Case Is = 4
Coords = "A35"
Case Is = 5
Coords = "I35"
Case Is = 6
Coords = "A48"
Case Is = 7
Coords = "D48"
End Select
'Création du graphique
Charts.Add
ActiveChart.Location _
where:=xlLocationAsObject, name:=Expert
With ActiveChart
'[#ALL] c'est pour que les en-têtes de Tableau soient prisent en compte
.SetSourceData Source:=Sheets("Recap").Range(Tableau & "[#ALL]"), PlotBy:=xlRows
.ChartType = xlLine
.HasTitle = True
.ChartTitle.Characters.Text = Titre & " - " & Sheets("Résultats").Range(W & "15").Value
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
.PlotArea.Interior.ColorIndex = 2
.Axes(xlValue).MajorGridlines.Border.LineStyle = xlDot
.ChartArea.Font.Size = 10
End With
'Placement du graphique
With ActiveSheet.ChartObjects(NbGraph + 1)
.Left = Range(Coords).Left
.Top = Range(Coords).Top
End With
'On supprime les séries de données concernant les autres experts afin d'avoir en visuel un graphe individuel
Dim d As Integer
For d = 0 To NbExperts - 1
If d = Cle Then
ActiveChart.SeriesCollection(2).Delete
Else:
If d < Cle Then
ActiveChart.SeriesCollection(1).Delete
Else
ActiveChart.SeriesCollection(2).Delete
End If
End If
Next
End Sub
Si un spécialiste des erreurs d'exécution passe dans le coin, je suis tout ouïe !
Merci d'avance
Bonjour
Je n'y connais rien mais je pense que Title est un mot réservé par VBA
Remplace Title par Titre2 et fais un essai
C'est juste une supposition, mais si ce n'est pas ça il faudrait joindre le fichier en cause
Bonjour,
Initialement il n'y avait pas de variable Title, mais directement
Titre & " - " & Sheets("Résultats").Range(W & "15").Value
Ça ne vient donc pas du nom donné à la variable hélas.
(Mais je prends note de ton commentaire pour "les bonnes pratiques du code" j'éviterai ce type de nom de variable. Merci)
Le bug arrive en cliquant sur le bouton "Bilan cabinet"
(Pensez à changer le chemin du fichier de données sur la feuille "Résultats" du fichier "EN COURS..." pour qu'il se lance)
Bonjour
Désolé mais je ne pourrais pas t'aider
J'ai essayé ton programme et bien sur plantage
Mais j'ai déplacé la ligne en cours (le surlignage de la ligne) sur la ligne précédente
.HasTitle = True
et j'ai relancé la macro à partir de cette ligne
le graphique se fait
Plantage , j'ai refait la même chose mais j'ai eu plantage sur une ligne suivante de la même procédure
Else
[surligner=#FFFFBF]ActiveChart.SeriesCollection(2).Delete
End If
End If
Next
End Sub
Message d'erreur : Erreur d'exécution '1004': Paramètre non valide
Je n'en sais pas plus
J'ai aussi la même succession d'erreur :s