Bonjour à tous et toutes,
J’ai récemment récupéré un fichier Calc pour automatiser la création de courriers à mon travail, dont une des macros sert à insérer des images.
Cependant, je fais face à un certain nombre d’erreurs que je n’arrive pas à comprendre et encore moins à corriger, même si j’ai réussi à bidouiller et réparer une autre macro (ce Calc étant mes premiers pas dans le monde des macros Libreoffice, voire même des macros de tableurs tout court).
J’avais déjà fait quelques modifications la semaine dernière avant un long week-end, car les erreurs “Variable d’objet non définie” apparaissaient à chaque utilisation de “oGraph.X” (que ce soit avec GraphicURL, Anchor ou dans la définition de oSize), sans résultat probant.
Ce matin, voyant que ça ne servait à rien et ne me souvenant plus très bien des modifications que j’avais apporté, j’ai repris le code “sain” de la macro (que je vous met en-dessous). Et à mon grand étonnement, je ne retrouve pas les erreurs de la semaine dernière sur les “oGraph”, mais il semble que le module “com.sun.star.drawing.GraphicObjectShape” qui fonctionnait très bien la semaine dernière décide de me mettre des bâtons dans les roues.
Quand j’exécute la macro à partir de mon document, elle me retourne une erreur “Variable d’objet non définie” à cette ligne : oGraph = oDoc.createInstance(“com.sun.star.drawing.GraphicObjectShape”).
Il me semble pourtant que tous les termes sont définis, mais ne m’y connaissant pas je me tourne vers vous afin d’avoir vos avis et conseils. (nb : j’ai déjà tenté de remplacé les “.” pour “:” ou “::” sans résoudre le problème, ça n’a fait que déplacer l’erreur sur la syntaxe de la commande).
edit : J’ai réussi à résoudre ce problème, il manquait simplement la ligne “oDoc = thiscomponent”. Cependant, je me retrouve avec une nouvelle erreur, qui concerne la ligne “oPage.add(oGraph)”, et dont le message d’erreur indique :
"Erreur d’exécution BASIC. Une exception s’est produite : Type: com.sun.star.lang.IllegalArgumentException
Message: at C:/cygwin64/home/buildslave/source/libo-core/svx/source/unodraw/unoshap2.cxx:1407." que je ne comprends pas du tout le chemin d’accès ne menant à rien, n’ayant pas cygwin64 d’installé sur mon poste. Est-ce que quelqu’un pourrait éclairer ma lanterne ?
J’aimerai aussi avoir vos retours sur ce qui peut bloquer les fonctions (?) “oGraph” (toujours avec le message d’erreur “Variable d’objet non définie”) qui m’ont hanté la semaine dernière et qui, je pense, reviendront une fois le “com.sun.star…” réparé.
Je vous remercie d’avance pour votre aide.
Le code complet de la macro (tel que récupéré d’une version saine) :
REM Macro qui insère une image
Sub InsereImage(Feuille as object,Cell as string,CellChemin as string,Taille as Double) 'InsereImage(oDoc.CurrentController.ActiveSheet,"V4","A9",0.8) : Insère dans la feuille Feuille une image en cellule V4, où le chemin de l'image est écrit en cellule A9, avec une taille de 1 (la taille est à faire varier entre 0 et 10)
Dim sURL As String
Dim oPage As Object
Dim oFeuille As Object
Dim oGraph As Object
Dim oDoc As Object
Dim c As Object
oFeuille = Feuille
sUrl = ConvertToUrl (Chemin)
oPage = oFeuille.getDrawPage()
oGraph = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
oGraph.GraphicURL = sUrl
oPage.add(oGraph)
'c = oFeuille.getCellByPosition(Co -1, Li - 1)
c = oFeuille.getCellRangeByName(Cell)
oGraph.Anchor = c
Dim oSize As New com.sun.star.awt.Size
Dim LargeurCellule, HauteurCellule As Long
Dim k As Double
Dim k1,k2,kb As Double
LargeurCellule = 10000 'c.Size.Width
HauteurCellule = 10000 'c.Size.Height
oSize = oGraph.Graphic.getSize
With oSize
'k1 = LargeurCellule/.Width
' k2 = HauteurCellule/.Height
k = Taille
'kb= 20
'If k1 < k2 Then
' k = k1
' Else
' k = k2
'End If
.Width = .Width*k 'largeur
.Height = .Height*k 'Hauteur
End With
oGraph.setsize(oSize)
End sub