Quel est le type de saut ?

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Geo
Le #21060511
Bonjour
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ]
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 cherche à faire :
If ActiveDocument.Paragraphs(X) ....contient saut de type.... then
Je travaille avec la version 2003 de Word

Merci d'avance



Un saut n'est pas lié à un paragraphe, c'est un caractère particulier.
Pour connaître les sauts de page il faut rechercher les caractères de
valeur 12.
Une fin de paragraphe a pour valeur 13.
Donc la suite 13 12 13 correspond à un paragraphe ne contenant qu'un
saut de page.

Bel exercice de programmation en vue.

La fonction rechercher remplacer peut être une piste, surtout qu'elle
est très performante.

--
A+
Mima
Le #21061151
Merci Geo pour cette réponse
Je n'aurai pas cherché dans cette direction...
a+

"Geo"
Bonjour
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ] 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 cherche à faire :
If ActiveDocument.Paragraphs(X) ....contient saut de type.... then
Je travaille avec la version 2003 de Word

Merci d'avance



Un saut n'est pas lié à un paragraphe, c'est un caractère particulier.
Pour connaître les sauts de page il faut rechercher les caractères de
valeur 12.
Une fin de paragraphe a pour valeur 13.
Donc la suite 13 12 13 correspond à un paragraphe ne contenant qu'un saut
de page.

Bel exercice de programmation en vue.

La fonction rechercher remplacer peut être une piste, surtout qu'elle est
très performante.

--
A+




Geo
Le #21062041
Re

En fait ce n'est pas si simple.
Le caractère 12 correspond à un saut, reste à déterminer de quoi.
Il y a bien une propriété de paragraphe qui est
PageBreakBefore qui indique si le paragraphe est précédé d'un saut de
page.

Pour les sections on a la propriété PageSetup.SectionStart.
mais j'avoue que je patauge un peu, il va falloir y passer un peu de
temps pour bien comprendre.

--
A+
Mima
Le #21064431
Bonsoir



En effet, j'ai fais une boucle pour tester la valeur du dernier caractère de
chaque paragraphe et je trouve bien tous ceux correspondant à un saut.

J'ai ensuite essayé la propriété PageBreakBefore, mais là le résultat est
moins probant !

A la ligne : "ActiveDocument.Paragraphs(X).PageBreakBefore", j'ai "0" pour
unique résultat.



code : Debug.Print "paragraphe n°" & X + 1 & " - " & "Val dern car = " & Y &
" - " & _
" PageBreakBefore = " &
ActiveDocument.Paragraphs(X).PageBreakBefore

Réponse : paragraphe n°5 - Val dern car = 12 - PageBreakBefore = 0



Ce que je cherche à faire dans un tableau :

- Récupérer le type du saut

- Localiser le saut

- Supprimer les paragraphes vides

- Repositionner le saut

- Re insérer le saut



En écrivant cela, il faudra aussi que je récupère les paramètres de mises en
pages pour les saut de section...

Bref, je n'ai pas fini

a+






"Geo"
Re

En fait ce n'est pas si simple.
Le caractère 12 correspond à un saut, reste à déterminer de quoi.
Il y a bien une propriété de paragraphe qui est
PageBreakBefore qui indique si le paragraphe est précédé d'un saut de
page.

Pour les sections on a la propriété PageSetup.SectionStart.
mais j'avoue que je patauge un peu, il va falloir y passer un peu de temps
pour bien comprendre.

--
A+




Geo
Le #21064911
Bonsoir

J'ai ensuite essayé la propriété PageBreakBefore, mais là le résultat est moins probant
!

A la ligne : "ActiveDocument.Paragraphs(X).PageBreakBefore", j'ai "0" pour unique
résultat.



Pas mieux.


Ce que je cherche à faire dans un tableau :
- Récupérer le type du saut
- Localiser le saut
- Supprimer les paragraphes vides
- Repositionner le saut
- Re insérer le saut



En écrivant cela, il faudra aussi que je récupère les paramètres de mises en pages pour
les saut de section...

Bref, je n'ai pas fini



En effet.
Votre description est certainement un peu synthétique, mais pour
supprimer des paragraphes vides, le plus simple est d'utiliser la
fonction de recherche : on remplace tous les ^p^p par ^p, à faire
passer éventuellement plusieurs fois.
Ça ne supprime ni les saut de page, ni les sauts de section puisque le
saut est un caractère et donc il n'y a pas deux fins de paragraphes
successives quand un saut de page ou deux section est entre.

--
A+
Mima
Le #21070681
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.
a+


"Geo"
Bonsoir

J'ai ensuite essayé la propriété PageBreakBefore, mais là le résultat est
moins probant !

A la ligne : "ActiveDocument.Paragraphs(X).PageBreakBefore", j'ai "0"
pour unique résultat.



Pas mieux.


Ce que je cherche à faire dans un tableau :
- Récupérer le type du saut
- Localiser le saut
- Supprimer les paragraphes vides
- Repositionner le saut
- Re insérer le saut



En écrivant cela, il faudra aussi que je récupère les paramètres de mises
en pages pour les saut de section...

Bref, je n'ai pas fini



En effet.
Votre description est certainement un peu synthétique, mais pour supprimer
des paragraphes vides, le plus simple est d'utiliser la fonction de
recherche : on remplace tous les ^p^p par ^p, à faire passer
éventuellement plusieurs fois.
Ça ne supprime ni les saut de page, ni les sauts de section puisque le
saut est un caractère et donc il n'y a pas deux fins de paragraphes
successives quand un saut de page ou deux section est entre.

--
A+




Geo
Le #21072781
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+
Mima
Le #21072951
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"
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+




Geo
Le #21076441
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+
michdenis
Le #21077071
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" 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"
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+




Publicité
Poster une réponse
Anonyme