et bonne année 2026 aux lecteurs de ce texte.
Je suis sous Libre Office Calc (version 25,2,7,2) en environnement windows 11, et suis confronté à un problème pour modifier par une macro dans un graphique de type XY l’image de fond de la paroi (ce que je comprends correspondre à « diagram » en anglais). Ce que j’essaye de faire par macro est l’équivalent de ce qui est réalisable manuellement en sélectionnant le graphique, puis la paroi, puis clic droit, puis « formater la paroi », puis onglet « Zone », puis « Image », puis « Ajouter / Importer », puis sélection d’un fichier jpg, puis « style » = Etiré, puis « OK ».
J’ai fait plusieurs tentatives de macro, toujours avec comme point de blocage la propriété FillBitmap ou FillBitmapURL pour un objet diagram. Le code de ma macro est fournie, où ma dernière tentative est de passer par un GraphicProvider, et où on voit sur des instructions mises en commentaires des tentatives précédentes où j’ai aussi essayé la propriété FillBitmapURL.
Si quelqu’un sait me donner une piste , elle sera la bienvenue. Merci
Code : Tout sélectionner
Sub ImportCarteJPG
REM =======================================================================================
REM Macro récupérant le nom d'un fichier de carte JPG, puis affectant cette image comme
REM fond de la paroi du graphique de trace.
REM =======================================================================================
REM ---------------------------------------------------------------------------------------
REM Déclaration des variables
REM ---------------------------------------------------------------------------------------
Dim Dossier As object
Dim Valeur As Integer
Dim urlCible As String
dim Altitude as object
dim NomFichierImageCarte as object
dim oCalc as object
Dim oProvider as object
Dim oGraphic as object
Dim GraphiqueCarte as object
Dim DiagramCarte as object
REM ---------------------------------------------------------------------------------------
REM Initialisation des variables
REM ---------------------------------------------------------------------------------------
oCalc = ThisComponent
Altitude = ThisComponent.Sheets.getByName("Altitude")
NomFichierImageCarte = Altitude.getcellrangebyname("NomFichierImageCarte")
REM ---------------------------------------------------------------------------------------
REM gel de l'affichage pour gagner en performance
REM ---------------------------------------------------------------------------------------
oCalc.lockControllers
REM ---------------------------------------------------------------------------------------
REM création du service sélection d'un fichier
REM ---------------------------------------------------------------------------------------
Dossier = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
Valeur = Dossier.Execute()
If Valeur = 1 Then urlCible=ConvertFromUrl(Dossier.Files(0))
REM ---------------------------------------------------------------------------------------
REM on vérifie qu'on a bien un fichier jpg
REM ---------------------------------------------------------------------------------------
If right(urlCible,4) <>".jpg" and right(urlCible,4) <> ".JPG" then
msgbox "Merci de spécifier un fichier .jpg ou .JPG"
exit sub
else
REM si il y a un fichier jpg on le mémorise
NomFichierImageCarte.string = urlCible
end if
REM ---------------------------------------------------------------------------------------
REM on spécifie l'image comme fond de la paroi du graphique de trace
REM ---------------------------------------------------------------------------------------
GraphiqueCarte = ThisComponent.CurrentController.ActiveSheet.DrawPage.getByIndex(0)
DiagramCarte = GraphiqueCarte.EmbeddedObject.component.Diagram
oProvider = createUnoService("com.sun.star.graphic.GraphicProvider")
Dim aProps(0) As New com.sun.star.beans.PropertyValue
aProps(0).Name = "URL"
aProps(0).Value = ConvertToURL(urlCible)
oGraphic = oProvider.queryGraphic(aProps())
DiagramCarte.setPropertyValue("FillStyle", com.sun.star.drawing.FillStyle.BITMAP)
DiagramCarte.setPropertyValue("FillBitmap", oGraphic)
rem DiagramCarte.FillStyle = com.sun.star.drawing.FillStyle.BITMAP
rem DiagramCarte.FillBitmap = oGraphic
rem DiagramCarte.FillBitmapURL = ConvertToURL(urlCible)
rem DiagramCarte.FillBitmapMode = com.sun.star.drawing.BitmapMode.STRETCH
REM ---------------------------------------------------------------------------------------
REM dégel de l'affichage
REM ---------------------------------------------------------------------------------------
ThisComponent.unlockControllers
end sub


