Problème de création de plusieurs graphiques à partir d'un dictionnaire

Bonjour,
je suis en train de travailler sur un projet qui a pour but la création d’un fichier writer contenant des tableaux et graphiques des données de régions et départements. Pour ce faire j’ai mis en place une macro qui stockent les différentes données dans un dictionnaire (scriptforge) : je cree ensuite les graphiques dans un fichier temporaire calc et je les exporte comme image ‘png’ dans le document writer. La création des tableaux se fait facilement mais pour les graphiques, je n’arrive pas à créer deux graphiques de suite (pour les départements et régions). Si je lance ma macro pour seulement l’un, elle marche correctement mais quand le dictionnaire contient les deux j’ai cette erreur : Erreur d’exécution BASIC.
“Une exception s’est produite :
Type: com.sun.star.lang.IllegalArgumentException
Message: sequence element is not assignable by given value” au niveau de " oGraphicExporter.filter(args())" . Voici la partie du code qui pose problème : ’ Sauvegarder le graphique comme image
Dim oGraphicExporter As Object
oGraphicExporter = CreateUnoService(“com.sun.star.drawing.GraphicExportFilter”)
Dim args(2) As New com.sun.star.beans.PropertyValue
Dim oPage As Object
oPage = oCalcDoc.drawPages.getByIndex(0)
oChart = oPage.getByIndex(0)

   Sauvegarder comme un png
   args(0).Name = "MediaType"
   args(0).Value = "image/png"
   'Configurer l'url
   args(1).Name = "URL"
   args(1).Value = ConvertToURL(sPath & "/tempChart" & chartCounter & ".png")
   
   'Exporter le graphique
   oGraphicExporter.setSourceDocument(oChart)
   oGraphicExporter.filter(args())

   ' Insérer une ligne vide avant le graphique
   oCursor.gotoEnd(False)
   oText.insertString(oCursor, Chr(13), False)

   ' Insérer l'image dans le document Writer
   Dim oGraphic As Object
   oGraphic = oDoc.createInstance("com.sun.star.text.TextGraphicObject")
   oGraphic.GraphicURL = ConvertToURL(sPath & "/tempChart" & chartCounter & ".png")
   oText.insertTextContent(oCursor, oGraphic, False)
   
   'Libérer explicitement les objets pour éviter les conflits de ressources
   oChart = Nothing
   oLegend = Nothing
   oGraphicExporter = Nothing
   
   ' Fermer le document Calc sans sauvegarder
   oCalcDoc.close(True)
   
   wait 100
    End If
    'oText.insertString(oCursor, "Traitement des CA impossible car il manque soit des " & category & " : " & Chr(13), False)
    'End If
Next k
' Enregistrer le document Writer
Dim sSaveURL As String
sSaveURL = ConvertToURL(sPath & "/Restitutions_graphiques/document_writer_trimestre.odt")
oDoc.storeAsURL(sSaveURL, Array())

MsgBox "Le rapport a été créé et enregistré avec succès."

End Sub.
je ne peux pas joindre toute la macro car le module fait partie d’un ensemble de plusieurs modules qui font diverses traitement avant la création des graphiques, par contre je pourrais envoyer le code de la sous routine en entier si vous en avez besoin.

Merci de votre aide

code complet : Sub CreateReportFromDictionary(Dict As Object, oDoc As Object, sPath As String)

' Initialiser le texte du document
Dim oText As Object
oText = oDoc.getText()
Dim oCursor As Object
oCursor = oText.createTextCursor()
oCursor.gotoEnd(False) ' Déplacer le curseur à la fin du document

' Définir les catégories et leurs clés correspondantes
Dim categories(1) As String
categories(0) = "Régions"
categories(1) = "Départements"
Dim ficheActuelles(1) As String
ficheActuelles(0) = "RegActuelle"
ficheActuelles(1) = "DeptActuelle"
Dim fichePrevs(1) As String
fichePrevs(0) = "RegPrev"
fichePrevs(1) = "DeptPrev"

'compteur pour noms de graphiques uniques
Dim chartCounter As integer
chartCounter = 0
'Initialisation d ela plage des cellules
Dim mRanges(0) As New com.sun.star.table.CellRangeAddress

Dim k As Integer
For k = 0 To UBound(categories)
    Dim category As String
    category = categories(k)
    Dim ficheActuelle As String
    ficheActuelle = ficheActuelles(k)
    Dim fichePrev As String
    fichePrev = fichePrevs(k)
    'MsgBox "j'affiche " & ficheActuelle & " et aussi " & fichePrev
    ' Vérifier si les données pour la catégorie actuelle existent
    If Dict.Exists(ficheActuelle) or Dict.Exists(fichePrev) Then
    'MsgBox "jjerjejj"
   ' Ajouter un titre en gras pour chaque catégorie
   oText.insertString(oCursor, "Traitement CA des " & category & " : " & Chr(13), False)
   oCursor.CharWeight = com.sun.star.awt.FontWeight.BOLD
   oText.insertString(oCursor, Chr(13), False) ' Ligne vide après le titre
   oCursor.CharWeight = com.sun.star.awt.FontWeight.NORMAL ' Réinitialiser la police normale

’ Déterminer le nombre d’entrées (régions ou départements,une pour les en-têtes et une par région) et 4 colonnes
Dim nbEntries As Integer
If Dict.Exists(ficheActuelle) Then
nbEntries = Dict.Item(ficheActuelle).Count
ElseIf Dict.Exists(fichePrev) Then
nbEntries = Dict.Item(fichePrev).Count
Else
nbEntries = 0
End If

’ Ajouter une ligne vide avant le nouveau tableau
oText.insertString(oCursor, Chr(13), False)

Dim oTable As Object
oTable = oDoc.createInstance(“com.sun.star.text.TextTable”)
oTable.initialize(nbEntries + 2, 4) ’ +2 pour la ligne de titre et les en-têtes
oText.insertTextContent(oCursor, oTable, False)

’ Fusionner la première ligne pour le titre
'oTable.getCellRangeByName(“A1:D1”).merge(True)
oTable.getCellByName(“A1”).setString(“Chiffres d’affaires (en périodes d’affaires)”)

   ' Remplir les en-têtes du tableau
   oTable.getCellByName("A2").setString("Nom des " & category)
   oTable.getCellByName("B2").setString("Cumul T précédente")
   oTable.getCellByName("C2").setString("Cumul T actuelle")
   oTable.getCellByName("D2").setString("Évolution (T précédente/T actuelle)")

   ' Parcourir le dictionnaire et remplir les données
   Dim keys As Variant
   If Dict.Exists(ficheActuelle) Then
       keys = Dict.Item(ficheActuelle).Keys
   Else
       keys = Dict.Item(fichePrev).Keys
   End If

   Dim i As Integer
   For i = LBound(keys) To UBound(keys)
       Dim entry As String
       entry = keys(i)
 
       Dim ActuelleData As Variant
       Dim PrevData As Variant
       Dim cumulActuelle As Double
       Dim cumulPrecedente As Double
       Dim evolution As Double

       ' Initialiser les valeurs à vide
       cumulActuelle = 0
       cumulPrecedente = 0
       evolution = 0

       ' Récupérer les données actuelles et précédentes si elles existent
       If Dict.Exists(ficheActuelle) Then
           If Dict.Item(ficheActuelle).Exists(entry) Then
               ActuelleData = Dict.Item(ficheActuelle).Item(entry)
               cumulActuelle = ActuelleData(0)
           End If
       End If
 
       If Dict.Exists(fichePrev) Then
           If Dict.Item(fichePrev).Exists(entry) Then
               PrevData = Dict.Item(fichePrev).Item(entry)
               cumulPrecedente = PrevData(0)
           End If
       End If
 
       ' Calculer l'évolution uniquement si les deux valeurs sont présentes et non nulles
       If cumulActuelle <> 0 And cumulPrecedente <> 0 Then
           evolution = ((cumulActuelle - cumulPrecedente) / cumulPrecedente) * 100
       Else
           evolution = 0
       End If

       oTable.getCellByName("A" & (i + 3)).setString(entry)
       If cumulPrecedente <> 0 Then
           oTable.getCellByName("B" & (i + 3)).setValue(cumulPrecedente)
       End If
       If cumulActuelle <> 0 Then
           oTable.getCellByName("C" & (i + 3)).setValue(cumulActuelle)
       End If

       oTable.getCellByName("D" & (i + 3)).setValue(evolution)
   Next i    

   ' Créer un nouveau document Calc
   Dim oCalcDoc As Object
   oCalcDoc = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, Array())

   ' Ajouter des données dans le document Calc
   Dim oSheet As Object
   oSheet = oCalcDoc.getSheets().getByIndex(0)
   oSheet.getCellRangeByName("A1").setString("Nom des " & category)
oSheet.getCellRangeByName("B1").setString("Évolution (T précédente/T actuelle)")

   ' Remplir les données dans Calc
   For i = LBound(keys) To UBound(keys)
       entry = keys(i)

       evolution = oTable.getCellByName("D" & (i + 3)).getValue()
       oSheet.getCellByPosition(0, i + 1).setString(entry)
       oSheet.getCellByPosition(1, i + 1).setValue(evolution)
   Next i

   ' Insérer un graphique dans Calc
   Dim oCharts As Object
   oCharts = oSheet.getCharts()

   ' Définir la plage de cellules pour le graphique
   'Dim mRanges(0) As New com.sun.star.table.CellRangeAddress
   mRanges(0).Sheet = 0
   mRanges(0).StartColumn = 0 'Colonne A
   mRanges(0).StartRow = 0 'On peut commencer à 1 pour enlever les entêtes
   mRanges(0).EndColumn = 1 'Colonne B
   mRanges(0).EndRow = nbEntries 'Ou + 1 à voir

   ' Définir la position et la taille du graphique
   Dim rec As New com.sun.star.awt.Rectangle
   rec.X = 1000
   rec.Y = 1000
   rec.Width = 15000
   rec.Height = 10000

   ' Ajouter le graphique
   chartCounter = chartCounter + 1
   oCharts.addNewByName("Chart_" & chartCounter, rec, mRanges, True, True)
   Dim oChart As Object
   oChart = oCharts.getByName("Chart_" & chartCounter).getEmbeddedObject()

   ' Configurer le diagramme en barres horizontales
   oChart.Diagram = oChart.createInstance("com.sun.star.chart.BarDiagram")
   oChart.Diagram.Vertical = True

   ' Ajouter une légende au graphique
   oChart.HasLegend = True
   ' Définir sa position en bas

   oChart.Legend.Alignment = com.sun.star.chart.ChartLegendPosition.BOTTOM

   ' Sauvegarder le graphique comme image
   Dim oGraphicExporter As Object
   oGraphicExporter = CreateUnoService("com.sun.star.drawing.GraphicExportFilter")
   Dim args(2) As New com.sun.star.beans.PropertyValue
   Dim oPage As Object
   oPage = oCalcDoc.drawPages.getByIndex(0)
   oChart = oPage.getByIndex(0)

   Sauvegarder comme un png
   args(0).Name = "MediaType"
   args(0).Value = "image/png"
   'Configurer l'url
   args(1).Name = "URL"
   args(1).Value = ConvertToURL(sPath & "/tempChart" & chartCounter & ".png")
   
   'Exporter le graphique
   oGraphicExporter.setSourceDocument(oChart)
   oGraphicExporter.filter(args())

   ' Insérer une ligne vide avant le graphique
   oCursor.gotoEnd(False)
   oText.insertString(oCursor, Chr(13), False)

   ' Insérer l'image dans le document Writer
   Dim oGraphic As Object
   oGraphic = oDoc.createInstance("com.sun.star.text.TextGraphicObject")
   oGraphic.GraphicURL = ConvertToURL(sPath & "/tempChart" & chartCounter & ".png")
   oText.insertTextContent(oCursor, oGraphic, False)
   
   'Libérer explicitement les objets pour éviter les conflits de ressources
   oChart = Nothing
   oLegend = Nothing
   oGraphicExporter = Nothing
   
   ' Fermer le document Calc sans sauvegarder
   oCalcDoc.close(True)
   
   wait 100
    End If
    'oText.insertString(oCursor, "Traitement des CA impossible car il manque soit des " & category & " : " & Chr(13), False)
    'End If
Next k
' Enregistrer le document Writer
Dim sSaveURL As String
sSaveURL = ConvertToURL(sPath & "/Restitutions_graphiques/document_writer_trimestre.odt")
oDoc.storeAsURL(sSaveURL, Array())

MsgBox "Le rapport a été créé et enregistré avec succès."

End Sub

plutot essayer d’en extraire un exemple minimal qui reproduise l’erreur, et d’uploader le fichier ici.