Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Quel est le type de saut ?

16 réponses
Avatar
Mima
Bonjour

Dans une procédure visant à supprimer tous les paragraphes vides d'un
document, je souhaite concerver les paragraphes qui contiennent des sauts
(page, section, colonne).
Ce que je sais faire : Compter les sauts sur une page :
Set objBreaks = ActiveDocument.ActiveWindow.Panes(1).Pages(Compt).Breaks
NbSaut = objBreaks.count
Ce que j'e n'arrive pas à faire :
- définir le type du saut (wdPageBreak, wdSectionBreakNextPage...)
- définir le numéro du paragraphe qui contient le saut

Ma procédure passe en revue tous les paragraphes, mais ne les sélectionne
pas.
Ce que je cherche à faire :
If ActiveDocument.Paragraphs(X) ....contient saut de type.... then
Je travaille avec la version 2003 de Word

Merci d'avance

6 réponses

1 2
Avatar
MiMa
Bonjour

Je crois que je suis tombé vraiment sur un os...

Sur un nouveau document, j'ai inséré successivement :

Un paragraphe vide

Un saut de section continu

Un paragraphe vide

Un saut de section continu

Un paragraphe vide

Un saut de section page suivante

Et la même succession sur la deuxième page

Je détermine dans quelle section se trouve le paragraphe :

X = ThisDocument.Paragraphs(A).Range.Sections(1).Index

Quand je cherche la valeur du saut par l'instruction suivante,

myType = ThisDocument.Sections(X).PageSetup.SectionStart

en partant de la fin, je trouve comme valeur : 0, 0, 2, 0, 0, 2

Ce qui veut dire que SectionStart, pour un même type (continu), renvoi une
fois 0, une fois 2

Pourquoi ?

a+


"Geo" a écrit dans le message de news:

Bonsoir

Voici le résultat guère encourageant, d'une série d'essai.

PageBreakBefore retourne toujours zéro.
La seule façon de savoir s'il y a un saut de page serait donc un caractère
à 12 et que le paragraphe qui suit est dans le même section que celui qui
précède. Pas pratique mais efficace.
Pour savoir dans quelle section est un paragraphe :
MonParagraphe.Range.Sections(1).index

Tous les paragraphes d'une section ont la même valeur pour
PageSetup.SectionStart, y compris l'éventuel caractère de saut de section
qui est en fin de section. La nouvelle section ne commence qu'au
paragraphe suivant.

Bien qu'ayant mis un saut de colonne, je n'ai pas pu obtenir la valeur
correspondante.

La première section a pour valeur : page impaire, je ne vois pas pourquoi.

Saut continu a l'air bien détecté.

Testé aussi sur 2010 avec les mêmes résultats, j'ai fait remonter le
problème.

bon courage.

--
A+




Avatar
MiMa
Bonjour

Merci pour ce bout de code.

Il répond au but recherché en laissant effectivement les différents sauts
en place.

Mais il me laisse sur mes interrogations sur la façon de gérer les sauts.

Encore merci

Cordialement




"michdenis" a écrit dans le message de news:

Est-ce que ceci fait le travail ?

'-------------------------------------
Sub Supprimer_Paragraphes()
Dim Nb As Long, A As Long
Nb = ThisDocument.Paragraphs.Count
For A = Nb To 1 Step -1
With ThisDocument.Paragraphs
If InStr(1, .Item(A).Range.Text, _
Chr(12), vbTextCompare) > 0 Then
If Len(Trim(.Item(A).Range.Text)) = 2 Then
'Afficher le message n'est pas obligatoire !
MsgBox "paragraphe avec un saut de page"
End If
Else
If Len(Trim(.Item(A).Range.Text)) = 1 Then
.Item(A).Range.Delete
End If
End If
End With
Next
End Sub
'-------------------------------------



"Mima" a écrit dans le message de groupe de
discussion :
e299#
C'est vrai que la programation dans Excel est bien plus facile...Mais cela
n'empêche pas de relever des défits !
J'ai réussi à 90% ce que je voulais obtenir. Il me reste à traiter ce
problème de saut de page ou de section.
Quand on utilise l'enregistreur de macro , il donne le type de saut.
Il doit bien avoir un moyen de faire l'inverse et de faire renvoyer par
macro ce type d'information.
Encore merci pour votre aide
a+



"Geo" a écrit dans le message de news:

Bonjour

Non, je ne peux pas uitiliser la méthode Rechercher/Remplacer car je
veux
conserver la mise en page originale.
Pour cela, avant de supprimer un paragraphe vide, je récupère les
valeurs
"espace avant", "espace après", "taille de la police" du paragraphe et
j'injecte la somme de ces valeurs soit au paragraphe précédent, soit au
suivant en fonction des circonstances (début ou fin de document,
tableau...).
Voilà pourquoi je cherche à récuperer les sauts et leurs propriétés afin
de pouvoir, soit garder le paragraphe lié, soit remettre les saut en
bonne place.



Ah ! oui ....
Vous êtes sur de ne pas vouloir passer à Excel ? Parce que là au moins la
taille des cases est fixe.
J'ai peur que vous ne suiviez les pas de Sisyphe.
A toutes fins utiles je vous signale la propriété Range.Information, avec
la valeur wdVerticalPositionRelativeToPage, elle vous donne la position
du
texte dans la page.
Ça vous permettra au moins de vérifier que les texte est au bon endroit.


--
A+







Avatar
michdenis
| Mais il me laisse sur mes interrogations sur la
| façon de gérer les sauts.

Tu retrouves le code publié dans ce message à
cette adresse sous la plume de Helmut Weber.

http://www.officekb.com/Uwe/Forum.aspx/word-vba/8919/Determining-which-type-of-breaks-are-present-on-a-page

Tu copies ce qui suit dans un module standard.
'---------------------------------------------
Sub test012()
Dim rDcm As Range ' the documents range
Set rDcm = ActiveDocument.Range
Selection.StartOf Unit:=wdStory, Extend:=wdMove
With Selection.Find
.Text = Chr(12)
While .Execute
MsgBox KindofBreak12(Selection.Range)
Wend
End With
'wdSectionContinuous ' 0
'wdSectionNewColumn ' 1
'wdSectionNewPage ' 2
'wdSectionEvenPage ' 3
'wdSectionOddPage '4

End Sub
'---------------------------------------------
Public Function KindofBreak12(ByVal rTmp As Range) As String
Dim lSct1 As Long ' counter for sections
Dim lSct2 As Long ' counter for sections
Dim lKoSc As Long ' kind of section.pagesetup.sectionstart
rTmp.Start = ActiveDocument.Range.Start
lSct1 = rTmp.Sections.Count ' count sections
rTmp.End = rTmp.End + 1 ' extend range
lSct2 = rTmp.Sections.Count ' count sections again
If lSct1 = lSct2 Then ' next caracter is in the same section
KindofBreak12 = "ordinary page break"
Exit Function
End If
' next character is in the next section
lKoSc = ActiveDocument.Sections(lSct2).PageSetup.SectionStart
Select Case lKoSc
Case 0: KindofBreak12 = "wdSectionContinuous"
Case 2: KindofBreak12 = "wdSectionNewPage"
Case 3: KindofBreak12 = "wdSectionEvenPage"
Case 4: KindofBreak12 = "wdSectionOddPage"
End Select

End Function
'---------------------------------------------
Avatar
Geo
Bonsoir

Je crois que je suis tombé vraiment sur un os...



C'est sûr.

je ne reproduis pas votre cas, mais il ne faut pas oublier que le
caractère de saut de section appartient à la section précédente.
Donc le caractère de saut continu peut avoir code : NewPage.

Par contre en faisant votre exercice je suis tombé sur un autre cas
marrant.

Soit le document suivant :
http://cjoint.com/?bDwttMv4Y2

On copie/colle un saut continu et on récupère un saut nouvelle page.

Autre anomalie :
mettez un saut continu immédiatement suivi d'un saut nouvelle page.
Supprimer le saut nouvelle page, c'est le saut continu qui disparaît.
Et là on n'est plus en vba.

Bon courage

--
A+
Avatar
MiMa
Génial, mais je ne risquais pas de trouver tout seul !!!!
En fouillant dans l'aide de Word et les forums, je n'ai jamais réussi à
trouver ce genre d'explications !
Merci à tous les deux pour cet échange passionant.
J'ai réussi à intégrer la ligne de code qui teste le car(12) et ma procédure
fonctionne à priori comme je le souhaite. Reste à faire un certain nombre de
tests pour débusquer des bugs éventuels.
Encore merci
Cordialement



"michdenis" a écrit dans le message de news:

| Mais il me laisse sur mes interrogations sur la
| façon de gérer les sauts.

Tu retrouves le code publié dans ce message à
cette adresse sous la plume de Helmut Weber.

http://www.officekb.com/Uwe/Forum.aspx/word-vba/8919/Determining-which-type-of-breaks-are-present-on-a-page

Tu copies ce qui suit dans un module standard.
'---------------------------------------------
Sub test012()
Dim rDcm As Range ' the documents range
Set rDcm = ActiveDocument.Range
Selection.StartOf Unit:=wdStory, Extend:=wdMove
With Selection.Find
.Text = Chr(12)
While .Execute
MsgBox KindofBreak12(Selection.Range)
Wend
End With
'wdSectionContinuous ' 0
'wdSectionNewColumn ' 1
'wdSectionNewPage ' 2
'wdSectionEvenPage ' 3
'wdSectionOddPage '4

End Sub
'---------------------------------------------
Public Function KindofBreak12(ByVal rTmp As Range) As String
Dim lSct1 As Long ' counter for sections
Dim lSct2 As Long ' counter for sections
Dim lKoSc As Long ' kind of section.pagesetup.sectionstart
rTmp.Start = ActiveDocument.Range.Start
lSct1 = rTmp.Sections.Count ' count sections
rTmp.End = rTmp.End + 1 ' extend range
lSct2 = rTmp.Sections.Count ' count sections again
If lSct1 = lSct2 Then ' next caracter is in the same section
KindofBreak12 = "ordinary page break"
Exit Function
End If
' next character is in the next section
lKoSc = ActiveDocument.Sections(lSct2).PageSetup.SectionStart
Select Case lKoSc
Case 0: KindofBreak12 = "wdSectionContinuous"
Case 2: KindofBreak12 = "wdSectionNewPage"
Case 3: KindofBreak12 = "wdSectionEvenPage"
Case 4: KindofBreak12 = "wdSectionOddPage"
End Select

End Function
'---------------------------------------------





Avatar
Geo
Bonjour

Par contre en faisant votre exercice je suis tombé sur un autre cas marrant.

Soit le document suivant :
http://cjoint.com/?bDwttMv4Y2

On copie/colle un saut continu et on récupère un saut nouvelle page.

Autre anomalie :
mettez un saut continu immédiatement suivi d'un saut nouvelle page.
Supprimer le saut nouvelle page, c'est le saut continu qui disparaît.



Sur 2010, c'est encore pire, un saut de section *précédent* change de
nature !
Réponse des développeurs : trop tard pour le corriger.
:'(

--
A+
1 2