Page 1 sur 1

[Résolu][Writer]Désélectionner "Saut" de page avant tableau

Publié : 14 janv. 2020 14:40
par zutix
Voici un sujet pour expert :

Quel code permettrait de supprimer le saut de page avant le tableau dans lequel on est positionné ?
c'est-à-dire quel code ferait la même chose que : clic dans menu : Tableau > Propriétés du tableau > onglet Enchaînement > désélection de Saut

A noter que :
tableau.BreakType=com.sun.star.style.BreakType.NONE ne fonctionne pas

Merci d'avance et meilleurs vœux !

Re: [WRITER]DESELECTIONNER SAUT AVANT TABLEAU

Publié : 14 janv. 2020 14:46
par micmac
Bonjour à vous aussi. Nous avons l'habitude de saluer sur ce forum,
Dans votre signature il y a écrit : LibreOffice Version: 4.3.7.2.lin04 par exemple mais pas seulement
Votre signature est incomplètement renseignée et fait mention d'une version de LibreOfficeOffice qui n'est plus maintenue.

Afin de profiter des dernières améliorations, il est fortement recommandé d'être à jour de la dernière version stable

Dans votre signature il est nécessaire d'indiquer :
  1. La version exacte de AOO ou LibO (AOO 4.1.7, LibO 6.2.8 par exemple) ;
  2. La version exacte du système d'exploitation (Windows XP SP3, Vista SP2, Windows 7 SP1, Win 8.1, Win 10, Ubuntu 19.04, macOS 10.15.2 par exemple).
Accès direct à votre signature pour la corriger.

Cordialement.

Re: [Writer]Désélectionner "Saut" de page avant tableau

Publié : 14 janv. 2020 17:38
par Noonours
Bonjour
Le code suivant généré par l'enregistreur de macros fonctionne avec ma version de LibreOffice:

Code : Tout sélectionner

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Pagebreak"
args1(0).Value = com.sun.star.style.BreakType.NONE

dispatcher.executeDispatch(document, ".uno:Pagebreak", "", 0, args1())


end sub
Sinon avec une utilisation de ton moteur de recherche préféré, on peut trouver ce lien.

Cordialement,

Re: [Writer]Désélectionner "Saut" de page avant tableau

Publié : 15 janv. 2020 08:41
par Dude
zutix a écrit :A noter que :
tableau.BreakType=com.sun.star.style.BreakType.NONE ne fonctionne pas
Cette phrase ne veut rien dire.
On ne sait pas ce que contient ta variable tableau, ni comment elle a été déclarée.

Comme d'habitude, il faut systématiquement :
  1. publier le code complet de la macro
  2. fournir un document incorporant celle-ci

Re: [Writer]Désélectionner "Saut" de page avant tableau

Publié : 15 janv. 2020 13:31
par zutix
Voici le code commenté et le repérage de la zone problématique

Code : Tout sélectionner

'------------------------------------------------------------------
' Supprimer la page de no passe en parametre
' Le document actif est constitué de pages toutes remplies par 1 tableau chacune

' Ex d'appel de la fonction pour aider a comprendre  :
' If supprimerPageAfs(20) Then 
'	msgBox "page 20 supprimée" 
' Else 
'	msgBox "erreur lors du traitement visant à oter la page 20" 
' End If
'

Function supprimerPageAfs(iPage As Integer) As Boolean
	Dim iP As Integer 
	Dim oCursV As Object, oCursE As Object
	Dim oTextTab As Object, oCell As Object, oCellCursE As Object

' le curseur visible sert uniquement à voir en mode pas a pas
	oCursV=thisComponent.currentController.viewCursor
	supprimerPageAfs=False

	' pour une page entre la seconde et l'avant-dernière   OK
	' selectionner le tableau de la page et l'effacer
	' renumeroter la page suivante et rebaptiser le tableaux de cette page 
	' idem pour toutes les pages jusqu'a la fin  
	If iPage>1 And iPage<thisComponent.CurrentController.PageCount Then 
		oTextTab=thisComponent.TextTables.getByName("TBL_0_"&iPage-1)	
		oTextTab.dispose()
		For iP=iPage To thisComponent.CurrentController.PageCount Step (1)
			oTextTab=thisComponent.TextTables.getByName("TBL_0_"&iP)
			oCell=oTextTab.getCellByName(trouverCellPage(iP+1))
			oCellCursE=oCell.createTextCursor()
			oCursV.gotoRange(oCellCursE,false)
			oCell.String="Page "&iP
			oTextTab.Name="TBL_0_"&iP-1
		Next iP
		supprimerPageAfs=True


'*** DEBUT ZONE qui pose probleme **************************************************		
	' pour la derniere page qui pose probleme !!!!!!!!!!!!!!!!!!!
	' selectionner le tableau	
	' effacer le saut de page avant le tableau puis effacer le tableau
	' ou effacer le tableau puis effacer la page blanche qui reste a la fin = le saut de page 
	Else 
	  If iPage=thisComponent.CurrentController.PageCount Then
 	  	oTextTab=thisComponent.TextTables.getByName("TBL_0_"&iPage-1)
 	  	
 	  	'tentative de suppression du saut de page avant tableau NOK	Evidemment il n'y avait pas de ' lors du test
 '		oTextTab.BreakType=com.sun.star.style.BreakType.NONE   
 
 		'autre tentative en appelant la sub du gentil Noonours  NOK          Evidemment il n'y avait pas de ' lors du test
 '              oterSautAvTab
	  

		'effacer le tableau
	  	oTextTab.dispose()
	  	
	  	' retour de la fonction
		supprimerPageAfs=True

'*** FIN ZONE problématique **********************************************************
	
	' pour la 1ere page OK car cela n'a pas de sens de la supprimer
	  Else
		msgBox "La première page n'est pas traitée."
	  End If
	End If
End Function


sub oterSautAvTab
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Pagebreak"
args1(0).Value = com.sun.star.style.BreakType.NONE

dispatcher.executeDispatch(document, ".uno:Pagebreak", "", 0, args1())
end sub

L'extrait joint du fichier est suffisant pour comprendre et tester. Objectif : supprimer la page 6 sans qu'il reste de page blanche à la fin.
Merci d'avance aux bonnes volontés.

Re: [Writer]Désélectionner "Saut" de page avant tableau

Publié : 15 janv. 2020 14:40
par Dude
zutix a écrit :L'extrait joint du fichier est suffisant pour comprendre et tester. Objectif : supprimer la page 6 sans qu'il reste de page blanche à la fin.
Je ne comprends pas le rapport entre supprimer une page et ton histoire de saut de page avant tableau.
Ton document montre que le tableau en page 4 n'est pas paramétré avec cette option :
capture.png
:?:

Re: [Writer]Désélectionner "Saut" de page avant tableau

Publié : 15 janv. 2020 15:16
par zutix
Pour clarifier :
C'est la page 6 qui importe ici. Inutile de se préoccuper des autres pages. Le doc est généré automatiquement par un outil spécialisé auquel on ne peut accéder et qui n'est pas writer.
Une fois le doc généré, il est possible de l'ouvrir avec writer et de le retravailler dans writer.

Ma question est : comment arriver à supprimer complètement la dernière page du doc ouvert dans writer sans laisser de page blanche à la fin en complétant ma macro ?

Merci d'avance pour toute idée constructive.

Re: [Writer]Désélectionner "Saut" de page avant tableau

Publié : 15 janv. 2020 16:04
par Dude
zutix a écrit :comment arriver à supprimer complètement la dernière page
Et je me répète : quel est le rapport avec le titre de ta question ?
Quelqu'un cherchant comment gérer le saut de page d'un tableau ne va rien comprendre.

Re: [Writer]Désélectionner "Saut" de page avant tableau

Publié : 15 janv. 2020 20:59
par Hubert Lambert
Bonjour,

Essaie ceci :

Code : Tout sélectionner

    doc = thiscomponent
    tableau = doc.TextTables.getByName("TBL_0_5")
    tableau.PageDescName = ""
    tableau.BreakType = com.sun.star.style.BreakType.NONE
Voir le lien fourni par Noonours pour plus d'informations.

Cordialement.

Re: [Writer]Désélectionner "Saut" de page avant tableau

Publié : 17 janv. 2020 13:39
par zutix
Merci d'avoir répondu mais comme déjà dit cela ne fonctionne pas sur ma version de libre office.
Cordialement

Re: [Writer]Désélectionner "Saut" de page avant tableau

Publié : 17 janv. 2020 15:40
par Dude
zutix a écrit :comme déjà dit cela ne fonctionne pas sur ma version de libre office
Comme déjà dit, as-tu fait le test manuellement ?
  1. Ouvrir le document
  2. Aller sur la page 6
  3. Editer les propriétés du tableau "TBL_0_5"
  4. Dans l'onglet Enchaînements, décocher la case "Saut"
Cela ne permet pas la suppression de la dite-page.

Re: [Writer]Désélectionner "Saut" de page avant tableau

Publié : 17 janv. 2020 17:20
par Hubert Lambert
zutix a écrit :Merci d'avoir répondu mais comme déjà dit cela ne fonctionne pas sur ma version de libre office.
Cordialement
Je ne vois rien , dans tes messages précédents, qui fasse référence à la propriété PageDescName.
Or il est indispensable que celle-ci contienne une chaîne vide pour supprimer le saut de page.

Re: [Writer]Désélectionner "Saut" de page avant tableau

Publié : 21 janv. 2020 07:57
par zutix
Excellent ! Tu as raison Hubert Lambert. Merci infiniment.

Résumé pour ceux qui rencontre la même difficulté :
Pour supprimer un "saut de page avant tableau" avant de supprimer le tableau lui même
pour qu'une fois le tableau effacé il ne reste pas de page blanche :

Code : Tout sélectionner

Dim oTestTab As object
oTextTab=thisComponent.TextTables.getByName(nom du tableau)

' ***  suppression du saut de page avant tableau
oTextTab.PageDescName = ""
oTextTab.BreakType=com.sun.star.style.BreakType.NONE 

' ***  effacement du tableau
oTextTab.dispose()