Page 1 sur 1

[Résolu][Calc] Zone d'impression variable

Publié : 03 juin 2018 16:42
par jlvin
Bonjour,
Je souhaite pouvoir imprimer une zone avec un nombre de colonnes fixe mais un nombre de ligne variable. Cette zone d'impression est déterminée par une formule dans une cellule (I1) de ma feuille de calcul, cette cellule est appelée "Zone_I".
J'ai tenté le code ci-dessous qui ne fonctionne pas /

Code : Tout sélectionner

sub test

Dim MonDocument As Object, LesFeuilles As Object
Dim MaFeuille As Object, UneZone As Object
dim document   as Object
dim dispatcher as Object

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

MonDocument = ThisComponent
LesFeuilles = MonDocument.Sheets
' récupérer la feuille où se trouve la zone nommée
MaFeuille = LesFeuilles.getByName("Feuille1")
UneZone =  MaFeuille.getCellRangeByName("Zone_I")
dim args2(2) as new com.sun.star.beans.PropertyValue
args2(0).Name = "PrintArea"
args2(0).Value = UneZone
args2(1).Name = "PrintRepeatRow"
args2(1).Value = "$A$2:$A$8"
args2(2).Name = "PrintRepeatCol"
args2(2).Value = ""
dispatcher.executeDispatch(document, ".uno:ChangePrintArea", "", 0, args2())
end sub
Pouvez-vous m'aider ?

La modération vous a écrit: Pour faciliter la lecture, code mis entre balises par le modérateur.


Re: [Calc]zone d'impression variable

Publié : 04 juin 2018 06:42
par Hubert Lambert
Bonjour,

Ta variable "UneZone" est définie comme Object, alors que le programme attends une valeur de type String.
Par ailleurs, tu fournis une référence de colonne ("$A$2:$A$8") à un paramètre qui attend une référence de ligne ("PrintRepeatRow").
Si ça ne va toujours pas mieux, précise-nous exactement ce qu'il se passe quand "ça ne fonctionne pas" ou, mieux encore, joins-nous un fichier exemple.
Cordialement.

Re: [Calc]zone d'impression variable

Publié : 04 juin 2018 09:06
par jlvin
Bonjour,

merci pour ta réponse mais, si je déclare "UneZone" comme string, j'ai une erreur d'exécution basic "valeur de propriété incorrecte" sur la ligne suivante :

Code : Tout sélectionner

UneZone =  MaFeuille.getCellRangeByName("Zone_I")
Par ailleurs, les lignes ci-dessous correspondent à l'enregistrement d'une macro retraçant la séquence suivante : Format/Zone d'impression/Éditer/, suivi de la saisie des 3 paramètres demandés, dont le premier concerne justement ma zone d'impression variable (Zone_I de la feuille 1), le deuxième les lignes d'en-tête à répétées (ici lignes 2 à 8 ).

Code : Tout sélectionner

args2(0).Name = "PrintArea"
args2(0).Value = UneZone
args2(1).Name = "PrintRepeatRow"
args2(1).Value = "$A$2:$A$8"
args2(2).Name = "PrintRepeatCol"
args2(2).Value = ""
dispatcher.executeDispatch(document, ".uno:ChangePrintArea", "", 0, args2())
quand je dit qu'elle ne fonctionne pas, c'est que la zone d'impression ne change jamais, quel que soit le contenu de Zone_I

Cordialement

Re: [Calc]zone d'impression variable

Publié : 04 juin 2018 09:11
par Hubert Lambert
Là ça devient un peu complexe pour travailler "en aveugle". Envoie-nous une version simplifiée et dépersonnalisée de ton document, que l'on puisse voir comment tout cela fonctionne.
Et merci de ne pas oublier les balises fermantes pour la mise en forme du code :wink:

Re: [Calc]zone d'impression variable

Publié : 04 juin 2018 09:19
par Dude
jlvin a écrit :si je déclare "UneZone" comme string, j'ai une erreur d'exécution basic "valeur de propriété incorrecte"
Et comme d'habitude, il faut se servir de XRay pour comprendre ce que te renvoie la méthode :

Code : Tout sélectionner

UneZone =  MaFeuille.getCellRangeByName("Zone_I")
La variable UneZone est une structure CellRange et non une chaîne.

Re: [Calc]zone d'impression variable

Publié : 04 juin 2018 09:21
par jlvin
Ci-joint le fichier en question
merci d'avance

Re: [Calc]zone d'impression variable

Publié : 04 juin 2018 13:50
par Hubert Lambert
Voici, en modifiant ton code au strict minimum :

Re: [Calc]zone d'impression variable

Publié : 04 juin 2018 14:35
par jlvin
Je n'ai pas tout compris : Je ne vois pas la différence avec le code initial, celui attaché au nouveau fichier est :

Code : Tout sélectionner

Sub test

Dim MonDocument As Object, LesFeuilles As Object
Dim MaFeuille As Object, UneZone As Object
dim document   as object
dim dispatcher as object

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
MonDocument = ThisComponent
LesFeuilles = MonDocument.Sheets
' récupérer la feuille où se trouve la zone nommée
MaFeuille = LesFeuilles.getByName("Feuille1")
UneZone =  MaFeuille.getCellRangeByName("Zone_I")
dim args2(2) as new com.sun.star.beans.PropertyValue
args2(0).Name = "PrintArea"
args2(0).Value = UneZone
args2(1).Name = "PrintRepeatRow"
args2(1).Value = "$A$2:$A$8"
args2(2).Name = "PrintRepeatCol"
args2(2).Value = ""

dispatcher.executeDispatch(document, ".uno:ChangePrintArea", "", 0, args2())

end sub

et le résultat est identique (ce qui est rassurant ...)

Cordialement

Re: [Calc]zone d'impression variable

Publié : 04 juin 2018 15:23
par luky-luke
Bonjour
jlvin a écrit :Je n'ai pas tout compris : Je ne vois pas la différence avec le code initial
Le code initial

Code : Tout sélectionner

dim args2(2) as new com.sun.star.beans.PropertyValue
args2(0).Name = "PrintArea"
args2(0).Value = UneZone
La modification proposée par Hubert Lambert
Hubert Lambert a écrit :Ta variable "UneZone" est définie comme Object, alors que le programme attends une valeur de type String.

Code : Tout sélectionner

args2(0).Name = "PrintArea"
args2(0).Value = UneZone.String
Cordialement
Luke

[Resolu][Calc]zone d'impression variable

Publié : 04 juin 2018 16:19
par jlvin
C'est parfait.
Merci à tous.

Cordialement