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 :
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

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 :
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.
Cordialement
Luke
[Resolu][Calc]zone d'impression variable
Publié : 04 juin 2018 16:19
par jlvin
C'est parfait.
Merci à tous.
Cordialement