XL 2013 erreur 91 pour un graphique

babalouche

XLDnaute Nouveau
Bonjour le forum,

Je dois faire une macro en vba pour faire des graphiques a partir de tableau contenu dans des fichiers.
mon fichier qui contient la macro agit sur le fichier contenant le tableau et doit créer une feuille sur celui ci pour y mettre les graphiques. Seulement j'ai une erreur 91 quand je commence à faire les graphiques.
Les lignes où sont l'erreur sont en gras ( comme j'ai un if j'ai 2 fois l'erreur ).
Le fichier test1_batiste1.xlsm est le fichier de la macro

Sub Workbook_Open()

Dim classeur As String
Dim Wkb As Workbook
Dim colonne As Integer
Dim ligne As Integer
Dim colonne_date As Integer
Dim compteur As Integer

Windows("test1_batiste1.xlsm").Activate

classeur = ""
For Each Wkb In Application.Workbooks
If Not Wkb Is ThisWorkbook And LCase(Wkb.Name) <> "test1_batiste1.xlsm" Then
classeur = Wkb.Name
Exit For
End If
Next Wkb

Workbooks(classeur).Activate

colonne = WorksheetFunction.CountA(Range("A1:BB1"))
ligne = WorksheetFunction.CountA(Range("A1:A1000"))

colonne_date = 1
compteur = 1

While (IsDate(Cells(2, colonne_date)) <> True And colonne_date < colonne + 2)
colonne_date = colonne_date + 1
Wend

Workbooks(classeur).Activate
Sheets(1).Activate
Workbooks(classeur).Sheets.Add After:=ActiveSheet

If (colonne_date = 1) Or (colonne_date > colonne) Then
For i = 1 To colonne - 1
Workbooks(classeur).ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SeriesCollection.NewSeries.Workbooks (classeur)
ActiveChart.FullSeriesCollection(1).Values = Workbooks(classeur).Sheets(1).Range(Workbooks(classeur).Sheets(1).Cells(2, i + 1), Workbooks(classeur).Sheets(1).Cells(ligne, i + 1))
ActiveChart.FullSeriesCollection(1).Name = Workbooks(classeur).Sheets(1).Cells(1, i + 1)
ActiveChart.FullSeriesCollection(1).XValues = Workbooks(classeur).Sheets(1).Range(Workbooks(classeur).Sheets(1).Cells(2, 1), Workbooks(classeur).Sheets(1).Cells(ligne, 1))
Workbooks(classeur).ActiveSheet.Shapes("Graphique " & i).IncrementLeft -230
Workbooks(classeur).ActiveSheet.Shapes("Graphique " & i).IncrementTop -50 + 300 * (i - 1)
Next i
Else
For i = 1 To colonne
Workbooks(classeur).ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SeriesCollection.NewSeries.Workbooks (classeur)
ActiveChart.FullSeriesCollection(1).Values = Workbooks(classeur).Worksheets(1).Range(Workbooks(classeur).Sheets(1).Cells(2, i), Workbooks(classeur).Sheets(1).Cells(ligne, i))
ActiveChart.FullSeriesCollection(1).Name = Workbooks(classeur).Worksheets(1).Cells(1, i)
ActiveChart.FullSeriesCollection(1).XValues = Workbooks(classeur).Worksheets(1).Range(Workbooks(classeur).Sheets(1).Cells(2, colonne_date), Workbooks(classeur).Sheets(1).Cells(ligne, colonne_date))
Workbooks(classeur).ActiveSheet.Shapes("Graphique " & cc).IncrementLeft -230
Workbooks(classeur).ActiveSheet.Shapes("Graphique " & cc).IncrementTop -50 + 300 * (compteur - 1)

If colonne_date - 1 = i Then
i = i + 1
End If
compteur = compteur + 1
Next i
End If
End Sub
 
Dernière édition:

babalouche

XLDnaute Nouveau
Désolé je débute sur vba je ne connais pas tout. J'ai essayé de créer une macro avec ce que j'apprenais au fur et à mesure.
les lignes de code que vous m'avez donné le set ... je dois y placer où et enlever quoi si je dois enlever quelque chose
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Vous n'avez pas à être désolé, ce n'était qu'une suggestion.
Voyez-vous j'ai une macro dans mes outils permettant de créer rapidement un graphique de contrôle incorporé dans une feuille de calcul. Je l'ai écrite il y a bien longtemps.
Et bien même là, pour ne pas devoir me casser la tête à distinguer l'objet Chart qui m'intéresse de l'objet ChartObject qui lui permet d'être artificiellement supporté dans un feuille de calcul, je commence plutôt par créer une feuille graphique et je ne l'incorpore que tout à la fin dans la feuille de calcul par une instruction Cht.Location Where:=xlLocationAsObject, Name:=LeNomDeMaFeuilleDeCalcul
 

Dranreb

XLDnaute Barbatruc
N'ayant pas votre classeur joint pour identifier à coup sûr la source du problème, je suppose que le problème est bien là: le graphique n'est pas actif parce que c'est le ChartObject qui est sélectionné en tant que chose dessinée par l'instruction qui le crée, et non sa propriété Chart.
 

babalouche

XLDnaute Nouveau
Dans un premier temps j'avais écrit une macro pour faire les graphiques à l'ouverture du fichier contenant le tableau mais aussi qui avait la macro et elle marchait sans problème. Je l'ai modifié pour pouvoir executer la macro sur un autre fichier contenant le tableau.
Pour préciser même si ca doit se remarquer dans mon code que le tableau est à taille variable (colonne, ligne) donc le nombre de graphiques aussi
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Essayez comme ça, en première approximation :
VB:
Option Explicit
Sub Workbook_Open()
   Dim Wbk As Workbook, Cht As Chart, RngTit As Range, RngDon As Range, _
      ColDate As Long, Col As Long, Sér As Series
   For Each Wbk In Application.Workbooks
      If Wbk.Name <> ThisWorkbook.Name Then Exit For
      Next Wbk
   If Wbk.Name = ThisWorkbook.Name Then MsgBox "Il n'y a pas d'autre classeur ouvert.", _
      vbCritical, ThisWorkbook.Name: Exit Sub
   Set RngDon = Wbk.Worksheets(1).UsedRange
   For ColDate = 1 To RngDon.Columns.Count
     If IsDate(RngDon(2, ColDate).Value) Then Exit For
     Next ColDate
   If ColDate > RngDon.Columns.Count Then MsgBox "Il n'a été trouvé aucune date en :" _
      & vbLf & RngDon.Rows(2).Address(False, False, xlA1, True), _
      vbCritical, ThisWorkbook.Name: Exit Sub
   Set RngTit = RngDon.Rows(1)
   Set RngDon = RngDon.Rows(2).Resize(RngDon.Rows.Count - 1)
   Set Cht = Wbk.Charts.Add
   For Col = 1 To RngTit.Columns.Count
      If Col <> ColDate Then
         Set Sér = Cht.SeriesCollection.NewSeries
         Sér.Name = RngTit.Columns(Col)
         Sér.XValues = RngDon.Columns(ColDate)
         Sér.Values = RngDon.Columns(Col): End If: Next Col
   End Sub
 

babalouche

XLDnaute Nouveau
comment changer votre code pour pouvoir faire des graphiques correspondant à un paramètre en fonction du temps (s'il existe) et du coup avoir plusieurs graphiques ?
certains tableaux possèdent un certain nombre de colonne qui rend la lisibilité de ce graphe difficile
 

babalouche

XLDnaute Nouveau
pour la colonne de date le nom le plus souvent utilisé est Date mais il se peut pour des tableaux à ne pas avoir de date. Et dans votre code on ne peut pas le modifier pour avoir autant de graphiques qu'il y a de colonnes en dehors de la date (ou de la première colonne s'il n'y a pas de date) ?
 

Dranreb

XLDnaute Barbatruc
Si, bien sûr, vous pouvez créer autant de feuilles graphiques que vous voulez en répétant dans une boucle la dernière partie.
Il suffit de trouver le moyen de déterminer à chaque fois le numéro de colonne des XValues de toutes les séries et l'éviter à chaque fois des séries créées comme on évite actuellement la ColDate
 

Discussions similaires

Statistiques des forums

Discussions
314 659
Messages
2 111 623
Membres
111 236
dernier inscrit
vinthi