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

Insérer un saut de page avant un texte défini

7 réponses
Avatar
Daniel
Bonjour à toutes et tous,

Je désire écrire une petite macro permettant d'insérer un saut de page
lorsque le système rencontre un texte précis se trouvant dans un fichier
.txt, mais uniquement lorsqu'il rencontre ce texte la deuxième fois et non
la première fois.

Le problème pour moi, c'est que je ne m'y connais pas suffisamment pour
l'écrire.

Quelqu'un pourrait-il m'aider ?

Merci d'avance.

Daniel

7 réponses

Avatar
Tisane
Bonjour Daniel,

Je désire écrire une petite macro permettant d'insérer un saut de page
lorsque le système rencontre un texte précis se trouvant dans un fichier
.txt, mais uniquement lorsqu'il rencontre ce texte la deuxième fois et non
la première fois.
Le problème pour moi, c'est que je ne m'y connais pas suffisamment pour
l'écrire.


Si tu autoenregistres la macro, cela donne à peu près ceci (le fichier .txt
est ouvert dans Word bien sûr) :

Sub SautPage()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Ton_Texte"
.Replacement.Text = ""
End With
Selection.Find.Execute
Selection.Find.Execute
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.InsertBreak Type:=wdPageBreak
End Sub

Qui doit pouvoir encore être simplifiée et améliorée...

--
Tisane

Avatar
Daniel
J'ai tenté de modifier ma macro l'appliquer à l'intégralité des fichiers
présents dans un dossier, mais rien ne se passe.

Voici ce que j'ai :

Public Sub RemplacementGlobal()

Dim MonDocument
Dim MonRepertoire
Dim NbDocuments As Integer

MonRepertoire = Options.DefaultFilePath(wdDocumentsPath) "C:LMS2007Tok"

MonDocument = Dir(MonRepertoire & "*.tok")
i = 1
While MonDocument <> "" And i <= NbDocuments
i = i + 1
Documents.Open (MonRepertoire & "" & MonDocument)
ActiveWindow.View.ShowFieldCodes = True
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
'modifier police et élargir marges
Selection.WholeStory
Selection.Font.Name = "Courier New"
Selection.Font.Size = 6
Selection.PageSetup.TopMargin = CentimetersToPoints(1.95)
Selection.PageSetup.RightMargin = CentimetersToPoints(0.95)
Selection.PageSetup.LeftMargin = CentimetersToPoints(0.95)
'SautPage
Selection.Find.ClearFormatting
With Selection.Find
.Text = "KUW"
.Replacement.Text = ""
End With
Selection.Find.Execute
Selection.Find.Execute
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.InsertBreak Type:=wdPageBreak
Selection.Fields.Update
Documents(1).Close wdSaveChanges
MonDocument = Dir
Wend
End Sub

Y a-t-il une bonne âme qui pourrait démêler ce problème qui n'est pas à ma
portée :-)

Merci d'avance.

"Tisane" a écrit dans le message de
news:
Bonjour Daniel,

Je désire écrire une petite macro permettant d'insérer un saut de page
lorsque le système rencontre un texte précis se trouvant dans un fichier
.txt, mais uniquement lorsqu'il rencontre ce texte la deuxième fois et
non


la première fois.
Le problème pour moi, c'est que je ne m'y connais pas suffisamment pour
l'écrire.


Si tu autoenregistres la macro, cela donne à peu près ceci (le fichier
.txt

est ouvert dans Word bien sûr) :

Sub SautPage()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Ton_Texte"
.Replacement.Text = ""
End With
Selection.Find.Execute
Selection.Find.Execute
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.InsertBreak Type:=wdPageBreak
End Sub

Qui doit pouvoir encore être simplifiée et améliorée...

--
Tisane




Avatar
Tisane

J'ai tenté de modifier ma macro l'appliquer à l'intégralité des fichiers
présents dans un dossier, mais rien ne se passe.
[...]

MonDocument = Dir(MonRepertoire & "*.tok")
[...]


Qu'est-ce que c'est que *.tok ???
Tes fichiers ne portent pas l'extension .txt ?

--
Tisane

"Daniel" <*enlever ceci° a écrit (suite) :
Public Sub RemplacementGlobal()
Dim MonDocument
Dim MonRepertoire
Dim NbDocuments As Integer
MonRepertoire = Options.DefaultFilePath(wdDocumentsPath) > "C:LMS2007Tok"
MonDocument = Dir(MonRepertoire & "*.tok")
i = 1
While MonDocument <> "" And i <= NbDocuments
i = i + 1
Documents.Open (MonRepertoire & "" & MonDocument)
ActiveWindow.View.ShowFieldCodes = True
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
'modifier police et élargir marges
Selection.WholeStory
Selection.Font.Name = "Courier New"
Selection.Font.Size = 6
Selection.PageSetup.TopMargin = CentimetersToPoints(1.95)
Selection.PageSetup.RightMargin = CentimetersToPoints(0.95)
Selection.PageSetup.LeftMargin = CentimetersToPoints(0.95)
'SautPage
Selection.Find.ClearFormatting
With Selection.Find
.Text = "KUW"
.Replacement.Text = ""
End With
Selection.Find.Execute
Selection.Find.Execute
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.InsertBreak Type:=wdPageBreak
Selection.Fields.Update
Documents(1).Close wdSaveChanges
MonDocument = Dir
Wend
End Sub

Y a-t-il une bonne âme qui pourrait démêler ce problème qui n'est pas à ma
portée :-)

Merci d'avance.

"Tisane" a écrit dans le message de
news:
Bonjour Daniel,

Je désire écrire une petite macro permettant d'insérer un saut de page
lorsque le système rencontre un texte précis se trouvant dans un
fichier
.txt, mais uniquement lorsqu'il rencontre ce texte la deuxième fois et
non


la première fois.
Le problème pour moi, c'est que je ne m'y connais pas suffisamment pour
l'écrire.


Si tu autoenregistres la macro, cela donne à peu près ceci (le fichier
.txt

est ouvert dans Word bien sûr) :

Sub SautPage()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Ton_Texte"
.Replacement.Text = ""
End With
Selection.Find.Execute
Selection.Find.Execute
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.InsertBreak Type:=wdPageBreak
End Sub

Qui doit pouvoir encore être simplifiée et améliorée...

--
Tisane





Avatar
Circé
Bonjour Daniel

J'ai envie de dire : Houla !... ;)

Tout d'abord, ne mélange pas tous les problèmes. Je comprends que ta
macro doit être exécutée sur tous les documents d'un répertoire ?
Si c'est ça, on s'en occupe après avec la batchmacro magique
d'anacoluthe...

Pour ce qui est de l'enregistreur de macro, Geo te dirait qu'il est ton
ami, mais... pas toujours !
Et si 6 minutes suffisent pour enregistrer une macro, il en faut un peu
plus pour réfléchir et l'écrire correctement ! ;)

Essaie cette macro sur un fichier :

Sub daniel()
Dim myrange As Range
Set myrange = ActiveDocument.Range
myrange.Font.Name = "courier new" 'change la police
With myrange.PageSetup 'change la mise en page
.TopMargin = CentimetersToPoints(1.95)
.RightMargin = CentimetersToPoints(0.95)
.LeftMargin = CentimetersToPoints(0.95)
End With

'recherche le 2e mot KUW et insère un saut de page avant
For mot = 1 To 2
Selection.Find.ClearFormatting
With Selection.Find
.Text = "KUW"
.Forward = True
End With
Selection.Find.Execute
Next mot

Selection.Paragraphs.PageBreakBefore = True

End Sub

Si cette macro convient, télécharge la batchmacro d'anacoluthe ici :
http://faqword.free.fr/download.php?lng=fr&pgs6

Lis bien le mode d'emploi.
Cette batchmacro permettra de choisir tous les documents sur lesquels
doit être exécutée ta macro.

N'hésite pas à revenir si tu rencontres des problèmes. Il y a sur ce
forum des fortiches en vba ! ;)

Circé
http://faqword.free.fr



Daniel a pensé très fort :
J'ai tenté de modifier ma macro l'appliquer à l'intégralité des fichiers
présents dans un dossier, mais rien ne se passe.

Voici ce que j'ai :

Public Sub RemplacementGlobal()

Dim MonDocument
Dim MonRepertoire
Dim NbDocuments As Integer

MonRepertoire = Options.DefaultFilePath(wdDocumentsPath) > "C:LMS2007Tok"

MonDocument = Dir(MonRepertoire & "*.tok")
i = 1
While MonDocument <> "" And i <= NbDocuments
i = i + 1
Documents.Open (MonRepertoire & "" & MonDocument)
ActiveWindow.View.ShowFieldCodes = True
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
'modifier police et élargir marges
Selection.WholeStory
Selection.Font.Name = "Courier New"
Selection.Font.Size = 6
Selection.PageSetup.TopMargin = CentimetersToPoints(1.95)
Selection.PageSetup.RightMargin = CentimetersToPoints(0.95)
Selection.PageSetup.LeftMargin = CentimetersToPoints(0.95)
'SautPage
Selection.Find.ClearFormatting
With Selection.Find
.Text = "KUW"
.Replacement.Text = ""
End With
Selection.Find.Execute
Selection.Find.Execute
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.InsertBreak Type:=wdPageBreak
Selection.Fields.Update
Documents(1).Close wdSaveChanges
MonDocument = Dir
Wend
End Sub

Y a-t-il une bonne âme qui pourrait démêler ce problème qui n'est pas à ma
portée :-)

Merci d'avance.

"Tisane" a écrit dans le message de
news:
Bonjour Daniel,

Je désire écrire une petite macro permettant d'insérer un saut de page
lorsque le système rencontre un texte précis se trouvant dans un fichier
.txt, mais uniquement lorsqu'il rencontre ce texte la deuxième fois et non
la première fois.
Le problème pour moi, c'est que je ne m'y connais pas suffisamment pour
l'écrire.






Avatar
Anacoluthe
Bonjour !

'Daniel' nous a écrit ...
Y a-t-il une bonne âme qui pourrait démêler ce problème qui n'est pas à ma
portée :-)


Je pense au contraire que c'est à votre portée car votre code
n'est pas si mauvais et n'est pas celui d'un grand débutant.

Essayez de le corriger en vous aidant des réponses précédentes.
C'est toujours plus profitable et gratifiant de réussir
avec son propre code... ;-)

Quelques remarques
- Complétez le type de vos données déclarées
Dim MonRepertoire As String
- Votre plus grosse erreur est
MonRepertoire = Options.DefaultFilePath(wdDocumentsPath) "C:LMS2007Tok"
les deux signe = n'ont pas le même sens
le premier est une affectation
MonRepertoire = "C:LMS2007Tok"
le deuxième est un test d'égalité
le tout donne que MonRepertoire est un booléen Faux ou Vrai
- Votre boucle avec DIR est correcte et peut même vous éviter
d'utiliser la batchmacro proposée par Circé si cette méthode
vous convient (= vos fichiers tok sont toujours dans "C:LMS2007Tok")
- Vous avez parlé d'un document TXT (avec une extension maison .tok)
attention : il n'y a pas de saut de page dans un TXT !
donc vous devez enregistrer le résultat dans un .DOC
- L'ouverture de votre .tok peut demander une conversion txt

Bon courage

Anacoluthe
« Le principal est de débuter. »
- Georges Charles HUYSMANS

Avatar
Daniel
Bonjour à toutes et tous !
Le béotien est de retour...

Merci pour tes encouragements, Anacoluthe. Je persévèrerai, donc !

J'ai commencé à modifier le code et comme prévu, je cale.
Lorsque le système rentre dans le boucle While, il en ressort directement et
passe à la fin de la macro.
Je pense qu'il ne trouve pas les fichiers, pourtant il ne cale pas sur les
lignes indiquant l'emplacement des fichiers.

Voilà où j'en suis.
Encore merci pour votre patience avec les débutants !

Daniel


Sub Daniel_test()
Dim myrange As Range
Dim MonDocument As String
Dim MonRepertoire As String
Dim NbDocuments As Integer

MonRepertoire = Dir("C:LMS2007Tok")
MonDocument = Dir(MonRepertoire & "*.tok")
i = 1
While MonDocument <> "" And i <= NbDocuments
i = i + 1
Documents.Open (MonRepertoire & "" & MonDocument)
ActiveWindow.View.ShowFieldCodes = True
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting

Set myrange = ActiveDocument.Range
myrange.Font.Name = "courier new" 'change la police
myrange.Font.Size = 6
With myrange.PageSetup 'change la mise en page
.TopMargin = CentimetersToPoints(1.95)
.RightMargin = CentimetersToPoints(0.95)
.LeftMargin = CentimetersToPoints(0.95)
End With

'recherche le 2e mot KUW et insère un saut de page avant
For mot = 1 To 3
Selection.Find.ClearFormatting
With Selection.Find
.Text = "KUW"
.Forward = True
End With
Selection.Find.Execute
Next mot

Selection.Paragraphs.PageBreakBefore = True
ActiveDocument.Save
ActiveDocument.Close
Wend
End Sub

"Anacoluthe" a écrit dans le message de
news:
Bonjour !

'Daniel' nous a écrit ...
Y a-t-il une bonne âme qui pourrait démêler ce problème qui n'est pas à
ma


portée :-)


Je pense au contraire que c'est à votre portée car votre code
n'est pas si mauvais et n'est pas celui d'un grand débutant.

Essayez de le corriger en vous aidant des réponses précédentes.
C'est toujours plus profitable et gratifiant de réussir
avec son propre code... ;-)

Quelques remarques
- Complétez le type de vos données déclarées
Dim MonRepertoire As String
- Votre plus grosse erreur est
MonRepertoire = Options.DefaultFilePath(wdDocumentsPath) > "C:LMS2007Tok"
les deux signe = n'ont pas le même sens
le premier est une affectation
MonRepertoire = "C:LMS2007Tok"
le deuxième est un test d'égalité
le tout donne que MonRepertoire est un booléen Faux ou Vrai
- Votre boucle avec DIR est correcte et peut même vous éviter
d'utiliser la batchmacro proposée par Circé si cette méthode
vous convient (= vos fichiers tok sont toujours dans "C:LMS2007Tok")
- Vous avez parlé d'un document TXT (avec une extension maison .tok)
attention : il n'y a pas de saut de page dans un TXT !
donc vous devez enregistrer le résultat dans un .DOC
- L'ouverture de votre .tok peut demander une conversion txt

Bon courage

Anacoluthe
« Le principal est de débuter. »
- Georges Charles HUYSMANS



Avatar
Geo

Lorsque le système rentre dans le boucle While, il en ressort directement et
passe à la fin de la macro.
Je pense qu'il ne trouve pas les fichiers, pourtant il ne cale pas sur les
lignes indiquant l'emplacement des fichiers.


NbDocuments est égal à zéro par défaut,
donc la condition i< NbDocuments
est toujours = False
Amha cette condition ne sert à rien.
Quand on débute et longtemps longtemps après on devrait beaucoup
utiliser soit debug.Print qui permet d'afficher des valeurs dans la
fenêtre d'exécution.
Une autre technique est de dérouler le code en pas à pas (F8)
Et de faire afficher les valeurs qu'on veut toujours dans la même
fenêtre.
Par exemple :
? i
répond : 1
Enfin il y a la fenêtre espion qui a un nom fort sympathique et un
usage tout aussi sympathique.

VBE offre de nombreux moyens pour la mise au point des programmes, il
faut investir du temps là-dessus on s'y retrouve.

--
A+