Bonjour,
je nobtiens pas le même résultat lorsque jexécute une macro en mode direct
(appelée par un bouton) et en mode débogage (pas à pas) par lappui sur la
touche F8.
Dans le premier cas les colonnes ne sont pas masquées et la zone
dimpression est trop importante, cela imprime toute les colonnes
Dans le deuxième cas les colonnes sont cachées et la zone dimpression est
alors correcte
Avez-vous une idée ?
Ci-dessous la macro en question
sub Print_P1_P3
' Definition des variables
dim MonDocument as object, MesFeuilles as Object
dim MaFeuille as Object, MaCellule as Object
dim MaZone as Object, MesColonnes as Object, UneColonne as Object
dim Dispatcher as object
dim NombreLigne as Integer
dim AdresseColonnes as String, AdressePrint as String
dim Props1(1) as new com.sun.star.beans.PropertyValue
dim Props2(1) as new com.sun.star.beans.PropertyValue
dim Props3(3) as new com.sun.star.beans.PropertyValue
dim Props5(0) as new com.sun.star.beans.PropertyValue
dim AdrZones(1) As New com.sun.star.table.CellRangeAddress
' Initialisation des variables de la feuille
MonDocument = ThisComponent
MesFeuilles = MonDocument.Sheets
MaFeuille = MesFeuilles.getByName("1er trimestre")
MonDocument = ThisComponent.CurrentController.Frame
Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
' Sélection de la première cellule
Props5(0).Name = "ToPoint"
Props5(0).Value = "$A$1"
Dispatcher.executeDispatch(MonDocument, ".uno:GoToCell", "", 0, Props5())
' Détermination du nombre de ligne à imprimer
NombreLigne = 0
Do
NombreLigne = InputBox("Donne moi le nombre d'élèves de la classe !")
Loop While Not NombreLigne >0
NombreLigne = NombreLigne * 2 + 4
' Masquage des colonnes inutiles
MonDocument = ThisComponent
AdresseColonnes = "$C$1:$BV$" & NombreLigne
MaZone = MaFeuille.getCellRangeByName(AdresseColonnes)
MesColonnes = MaZone.Columns
MesColonnes.IsVisible = False
' Impression de la zone désirée
AdressePrint = "$A$1:$DF$" & NombreLigne
MaZone = MaFeuille.getCellRangeByName(AdressePrint)
AdrZones(0) = MaZone.RangeAddress
MaFeuille.PrintAreas = AdrZones()
'Définition du format de page
Dim PageStyleFamille as Object, PageStyle as Object
PageStyleFamille=MonDocument.StyleFamilies.getByName("PageStyles")
PageStyle=PageStyleFamille.getByName("PageStyle_1ère Période")
with PageStyle
.ScaleToPagesX=1 'nombre de page horizontales
.ScaleToPagesY=1 'nombre de page verticales
.IsLandscape=true 'orientation de la page
.width=29700
.height=21000
end with
' Paramétrage final de l'impression
MonDocument = ThisComponent.CurrentController.Frame
Props3(0).Name = "Copies"
Props3(0).Value = 1
Props3(1).Name = "RangeText"
Props3(1).Value = "1"
Props3(2).Name = "Collate"
Props3(2).Value = false
Props3(3).Name = "Wait"
Props3(3).Value = True
Dispatcher.executeDispatch(MonDocument, ".uno:Print", "", 0, Props3())
' Ré-afichage des colonnes
MonDocument = ThisComponent
MaZone = MaFeuille.getCellRangeByName(AdresseColonnes)
MesColonnes = MaZone.Columns
MesColonnes.IsVisible = True
' Sélection de la nouvelle cellule
MonDocument = ThisComponent.CurrentController.Frame
Props5(0).Name = "ToPoint"
Props5(0).Value = "$A$1"
Dispatcher.executeDispatch(MonDocument, ".uno:GoToCell", "", 0, Props5())
' Sélection de la cellule de la dernière semaine de la page précédente
MonDocument = ThisComponent
MaCellule = MaFeuille.getCellRangeByName("$BN$5")
MonDocument.currentController.Select(MaCellule)
' Placement du curseur sur la bonne cellule
MonDocument = ThisComponent.CurrentController.Frame
Props1(0).Name = "By"
Props1(0).Value = 1
Props1(1).Name = "Sel"
Props1(1).Value = false
Dispatcher.executeDispatch(MonDocument, ".uno:GoRight", "", 0, Props1())
Props2(0).Name = "By"
Props2(0).Value = 1
Props2(1).Name = "Sel"
Props2(1).Value = false
Dispatcher.executeDispatch(MonDocument, ".uno:GoLeft", "", 0, Props1())
end sub
Merci de votre réponse
Georges Eckstein
Windows 7 et LibreOffice 3.5.5.3