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

VBA : Sélectionnerd'un signet à un saut de page

7 réponses
Avatar
Ellimac
Bonjour,

Tout est dans le titre : comment en VBA sélectionner d'un signet à un saut
de page ou pour le dernier à la fin du document ?
Merci

Camille

7 réponses

Avatar
Geo
Bonjour Camille

Bonjour,

Tout est dans le titre : comment en VBA sélectionner d'un signet à un saut de page ou
pour le dernier à la fin du document ?



Il peut y avoir des solutions différentes selon que le saut de page est
"manuel" ou si vous voulez dire "du signet jusqu'à la fin de la page où
est le signet".
Dans le dernier cas, je pense qu'on devrait pouvoir utiliser le signet
prédéfini /page après avoir positionné le point d'insertion dans la
page.

Dans le premier, il faut réfléchir, donc pour éviter de se fatiguer
inutilement, attendons votre complément.

[Réponse faite sur le forum public Word :


news://msnews. microsoft.com/microsoft.public.fr.word ]

--
A+
Avatar
Ellimac
Bonjour,

Il s'agit de sauts de pages manuels.
Exixte-t'il une possibilité de les compter ?

Donc faire une boucle pour le nb de sauts de pages manuels +1 atteindre d'un
signet ou d'une position jusqu'au saut de page manuel suivant. Sauf pour le
dernier passage dans la boucle où ce sera jusqu'à la fin du document (ça je
dois savoir faire).
Merci

Camille

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

Bonjour Camille

Bonjour,

Tout est dans le titre : comment en VBA sélectionner d'un signet à un
saut de page ou pour le dernier à la fin du document ?



Il peut y avoir des solutions différentes selon que le saut de page est
"manuel" ou si vous voulez dire "du signet jusqu'à la fin de la page où
est le signet".
Dans le dernier cas, je pense qu'on devrait pouvoir utiliser le signet
prédéfini /page après avoir positionné le point d'insertion dans la page.

Dans le premier, il faut réfléchir, donc pour éviter de se fatiguer
inutilement, attendons votre complément.

[Réponse faite sur le forum public Word :


news://msnews. microsoft.com/microsoft.public.fr.word ]

--
A+




Avatar
Geo
Bonjour Camille

Il s'agit de sauts de pages manuels.
Exixte-t'il une possibilité de les compter ?



Naturellement, mais cela ne me semble pas nécessaire.
Il me semble qu'il vaudrait mieux rechercher le saut de page manuel qui
suit le signet.
Voici un exemple de code, qui devrait s'adapter facilement à votre cas
:

Sub SelectionAuSautDePage()
Dim SautTrouvé As Boolean
Dim Fin As Range
Dim MaSélection As Range
Dim ZoneRecherche As Range
Dim Signet As String

Signet = "MonSignet"

With ActiveDocument
' zone de recherche du signet à la fin du document
Set ZoneRecherche = _
.Range(Start:=.Bookmarks(Signet).Range.Start, _
End:=.Bookmarks("EndOfDoc").Range.End)
' recherche du saut de page manuel qui suit
ZoneRecherche.Find.ClearFormatting
With ZoneRecherche.Find
.Text = "^m"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
End With
SautTrouvé = ZoneRecherche.Find.Execute
If SautTrouvé Then
Set Fin = ZoneRecherche
Else
' pas trouvé : fin = fin du document
Set Fin = .Bookmarks("EndOfDoc").Range
End If
' +1 pour inclure le saut de page dans la sélection
Set MaSélection = _
.Range(.Bookmarks(Signet).Range.Start, _
Fin.End + 1)
MaSélection.Select

End With

End Sub


[Réponse faite sur le forum public Word :


news://msnews. microsoft.com/microsoft.public.fr.word ]





--
A+
Avatar
Ellimac
Bonjour,

Super, mille mercis.
J'ai réussi à me dépatouiller avec tout cela. Ce qui donne :

'signet pour commentaire
With ActiveDocument.Bookmarks
.Add Range:=Selection.Range, Name:="m1"
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
Selection.Find.ClearFormatting

With Selection.Find
.Text = "^m"
End With
Selection.Find.Execute
Selection.Find.ClearFormatting
Selection.MoveLeft Unit:=wdWord, Count:=2
With ActiveDocument.Bookmarks
.Add Range:=Selection.Range, Name:="fin"
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
a = 1

'sélection entre les 2 signets
With ActiveDocument
Set ZoneRecherche = _
.Range(Start:=.Bookmarks("m1").Range.Start, _
End:=.Bookmarks("fin").Range.End)


ZoneRecherche.Select

Camille

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

Bonjour Camille

Il s'agit de sauts de pages manuels.
Exixte-t'il une possibilité de les compter ?



Naturellement, mais cela ne me semble pas nécessaire.
Il me semble qu'il vaudrait mieux rechercher le saut de page manuel qui
suit le signet.
Voici un exemple de code, qui devrait s'adapter facilement à votre cas :

Sub SelectionAuSautDePage()
Dim SautTrouvé As Boolean
Dim Fin As Range
Dim MaSélection As Range
Dim ZoneRecherche As Range
Dim Signet As String

Signet = "MonSignet"

With ActiveDocument
' zone de recherche du signet à la fin du document
Set ZoneRecherche = _
.Range(Start:=.Bookmarks(Signet).Range.Start, _
End:=.Bookmarks("EndOfDoc").Range.End)
' recherche du saut de page manuel qui suit
ZoneRecherche.Find.ClearFormatting
With ZoneRecherche.Find
.Text = "^m"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
End With
SautTrouvé = ZoneRecherche.Find.Execute
If SautTrouvé Then
Set Fin = ZoneRecherche
Else
' pas trouvé : fin = fin du document
Set Fin = .Bookmarks("EndOfDoc").Range
End If
' +1 pour inclure le saut de page dans la sélection
Set MaSélection = _
.Range(.Bookmarks(Signet).Range.Start, _
Fin.End + 1)
MaSélection.Select

End With

End Sub


[Réponse faite sur le forum public Word :


news://msnews. microsoft.com/microsoft.public.fr.word ]





--
A+




Avatar
Ellimac
Re,

Pour pouvoir effectuer une boucle pour le nombre de sauts de pages manuels
est-il possible de les compter ?

Merci

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

Bonjour Camille

Il s'agit de sauts de pages manuels.
Exixte-t'il une possibilité de les compter ?



Naturellement, mais cela ne me semble pas nécessaire.
Il me semble qu'il vaudrait mieux rechercher le saut de page manuel qui
suit le signet.
Voici un exemple de code, qui devrait s'adapter facilement à votre cas :

Sub SelectionAuSautDePage()
Dim SautTrouvé As Boolean
Dim Fin As Range
Dim MaSélection As Range
Dim ZoneRecherche As Range
Dim Signet As String

Signet = "MonSignet"

With ActiveDocument
' zone de recherche du signet à la fin du document
Set ZoneRecherche = _
.Range(Start:=.Bookmarks(Signet).Range.Start, _
End:=.Bookmarks("EndOfDoc").Range.End)
' recherche du saut de page manuel qui suit
ZoneRecherche.Find.ClearFormatting
With ZoneRecherche.Find
.Text = "^m"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
End With
SautTrouvé = ZoneRecherche.Find.Execute
If SautTrouvé Then
Set Fin = ZoneRecherche
Else
' pas trouvé : fin = fin du document
Set Fin = .Bookmarks("EndOfDoc").Range
End If
' +1 pour inclure le saut de page dans la sélection
Set MaSélection = _
.Range(.Bookmarks(Signet).Range.Start, _
Fin.End + 1)
MaSélection.Select

End With

End Sub


[Réponse faite sur le forum public Word :


news://msnews. microsoft.com/microsoft.public.fr.word ]





--
A+




Avatar
Geo
Bonjour

Super, mille mercis.
J'ai réussi à me dépatouiller avec tout cela. Ce qui donne :



Ca fonctionne bien en fin de document ?

Pour pouvoir effectuer une boucle pour le nombre de sauts de pages
manuels est-il possible de les compter ?



Oui, on peut par exemple utiliser la fonction de recherche :

Sub CompteSautDePage()
Dim SautTrouvé As Boolean
Dim NbSauts As Integer
' Début du document
Selection.HomeKey Unit:=wdStory
NbSauts = 0
With ActiveDocument
Do
With Selection.Find
.Text = "^m"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
End With
SautTrouvé = Selection.Find.Execute
If SautTrouvé Then
NbSauts = NbSauts + 1
Else
Exit Do
End If
Loop While SautTrouvé

MsgBox NbSauts & " saut(s) de page"
End With

End Sub

[Réponse faite sur le forum public Word :
news://msnews. microsoft.com/microsoft.public.fr.word ]



--
A+
Avatar
Ellimac
Bonjour,

Super nickel, merci beaucoup.

Camille

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

Bonjour

Super, mille mercis.
J'ai réussi à me dépatouiller avec tout cela. Ce qui donne :



Ca fonctionne bien en fin de document ?

Pour pouvoir effectuer une boucle pour le nombre de sauts de pages
manuels est-il possible de les compter ?



Oui, on peut par exemple utiliser la fonction de recherche :

Sub CompteSautDePage()
Dim SautTrouvé As Boolean
Dim NbSauts As Integer
' Début du document
Selection.HomeKey Unit:=wdStory
NbSauts = 0
With ActiveDocument
Do
With Selection.Find
.Text = "^m"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
End With
SautTrouvé = Selection.Find.Execute
If SautTrouvé Then
NbSauts = NbSauts + 1
Else
Exit Do
End If
Loop While SautTrouvé

MsgBox NbSauts & " saut(s) de page"
End With

End Sub

[Réponse faite sur le forum public Word :
news://msnews. microsoft.com/microsoft.public.fr.word ]



--
A+