Je sais bien qu'il faut consulter le forum avant de poster. Croyez moi, j'ai beaucoup cherché, et pas seulement sur le forum, dans le Guide de programmation, dans l'ouvrage d'Andrew Pitonyak et ailleurs... Alors je me décide à poster.
J'ai fait une macro qui ouvre un fichier existant dans mon PC.
Je pensais qu'après la ligne oDoc1 = StarDesktop.CurrentComponent les instructions de la macro s'appliqueraient au classeur correspondant à la variable oDoc1 mais je n'arrive pas à entrer dans le fichier correspondant. Comment activer le classeur que la macro vient d'ouvrir ?
Pour poser le problème, j'ai imaginé une petite macro, la plus simple possible.
Je crée la macro dans un classeur « destination » (oDoc2 dans la macro)
la macro ouvre un autre classeur existant « source », (oDoc1 dans la macro)
je lui demande de peindre en vert la cellule B4 de ce classeur.
Le fichier « source » s'ouvre mais je n'arrive pas à l'activer (= y mettre le focus?) pour y intervenir !
La macro (code ci-dessous) peint bien en vert une cellule B4 mais pas celle du fichier « source ». C'est celle du classeur « destination » (dans lequel j'ai créé la macro) qui est colorée. Je reste dans le fichier « destination » !
- Quelles instructions faut-il ajouter ou corriger pour intervenir dans le classeur « source » ?
Comment revenir ensuite au fichier « destination » ?
Merci d'avance aux spécialistes d'OOo Basic qui voudront bien m'aider.
GML
Code : Tout sélectionner
Sub OuvreColoreCellule
dim oDoc1, oDoc2
Dim sUrl As String
oDesk = createUnoService("com.sun.star.frame.Desktop")
'Définit l'URL du fichier source et ouvre ce fichier
sUrl = "File:///C:/Users/gmaze/Desktop/Apprentissage Macros OOo/2018_0809_gml_source.ods"
rem get access to the document
Dim Args1()
oDoc1=oDesk.loadComponentFromURL(sUrl,"_blank",0,Args1())
'le fichier "2018_0809_gml_source.ods" s'ouvre mais il n'est pas activé !
'__________________________________________________________________________________
'
'JE VEUX METTRE LE FOCUS SUR oDoc1, mon fichier "2018_0809_gml_source.ods"
'ThisComponent.CurrentController
'oDoc1.CurrentController.Frame.ContainerWindow.ToFront 'réponse de Piaf 25/09/2015
'oDoc1.CurrentController.Frame.ContainerWindow.setFocus 'réponse Alain de la Chaume 13/3/2009
oDoc1 = StarDesktop.CurrentComponent
'__________________________________________________________________________________
'A PARTIR DE LA, COPIE DU CODE ENREGISTRE A LA SOURIS
'-------------------------------------------------------------------------
oDoc1 = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem --------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$B$4"
dispatcher.executeDispatch(oDoc1, ".uno:GoToCell", "", 0, args2())
'_______________________________________________________________________
rem COLORE EN VERT LA CELLULE B4--------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "BackgroundColor"
args3(0).Value = 10079334
dispatcher.executeDispatch(oDoc1, ".uno:BackgroundColor", "", 0, args3())
end sub