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

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
jlvin
Fraîchement OOthentifié
Messages : 5
Inscription : 03 juin 2018 16:32

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

Message 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.

Dernière modification par jlvin le 04 juin 2018 09:47, modifié 2 fois.
open office 4.1.5
high sierra 10.13.4
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc]zone d'impression variable

Message 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.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
jlvin
Fraîchement OOthentifié
Messages : 5
Inscription : 03 juin 2018 16:32

Re: [Calc]zone d'impression variable

Message 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
Dernière modification par jlvin le 04 juin 2018 09:23, modifié 3 fois.
open office 4.1.5
high sierra 10.13.4
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc]zone d'impression variable

Message 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:
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25173
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]zone d'impression variable

Message 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.
jlvin
Fraîchement OOthentifié
Messages : 5
Inscription : 03 juin 2018 16:32

Re: [Calc]zone d'impression variable

Message par jlvin »

Ci-joint le fichier en question
merci d'avance
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
open office 4.1.5
high sierra 10.13.4
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc]zone d'impression variable

Message par Hubert Lambert »

Voici, en modifiant ton code au strict minimum :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
jlvin
Fraîchement OOthentifié
Messages : 5
Inscription : 03 juin 2018 16:32

Re: [Calc]zone d'impression variable

Message 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
open office 4.1.5
high sierra 10.13.4
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 936
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Calc]zone d'impression variable

Message 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
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
jlvin
Fraîchement OOthentifié
Messages : 5
Inscription : 03 juin 2018 16:32

[Resolu][Calc]zone d'impression variable

Message par jlvin »

C'est parfait.
Merci à tous.

Cordialement
open office 4.1.5
high sierra 10.13.4