Selection.Find.Replacement.Text avec sauts de lignes et tabulations > 255

Bonjour à tous,

Je cherche à remplacer un texte compris entre deux expressions précises pour le remplacer par un autre qui contient des saut de ligne et des tabulations.

Je sais supprimer le premier et je sais intégré le second avec le format. Le problème c'est que mon second texte ne s'intègre pas à l'endroit du premier car j'ai plusieurs fois l'occurrence du mot me permettant de me positionner.

Voici mes codes actuels :

Dim strFirstWord As String
    Dim strLastWord As String
    Dim objDoc As Document
    Dim objWord As Object

    Set objDoc = ActiveDocument
    strFirstWord = InputBox("Entrez le premier mot:", "Premier mot")
    strLastWord = InputBox("Entrez le dernier mot : ", " Last Word ")
        With Selection
        .HomeKey Unit:=wdStory
            With Selection.Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .Text = strFirstWord & "*" & strLastWord
            .Replacement.Text = ""
            .MatchWildcards = True
            .Execute Replace:=wdReplaceAll
            End With
        End With
        Set objDoc = Nothing
        Set objWord = Nothing

    With Selection.Find
        .ClearFormatting
        .Text = "COUVER_06:"
    End With
If Selection.Find.Execute Then
        Selection.Select

 End If
    Selection.EndKey Unit:=wdLine
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.Font.Size = 12
    Selection.TypeParagraph
    Selection.TypeText Text:="Seules peuvent être engagées dans cette opération :"
    Selection.TypeParagraph
    Selection.TypeText Text:="- les Terres Arables hormis :"
    Selection.TypeParagraph
    Selection.TypeText Text:="          - les parcelles déclarées avec une culture de la catégorie Surfaces Herbacées temporaires et/ou jachère depuis plus de deux ans et"
    Selection.TypeParagraph
    Selection.TypeText Text:="          - les surfaces en jachère ;"
    Selection.TypeText Text:="- les cultures pérennes (sauf celles des catégories PPAM et Divers ;"
    Selection.TypeParagraph
    Selection.TypeText Text:="- les surfaces qui étaient engagées dans une MAE rémunérant la présence d'un couvert spécifique favorable à l'environnement, lors de la campagne PAC précédant la demande d'engagement."
    Selection.TypeParagraph
    Selection.TypeText Text:="Par ailleurs, seules sont éligibles les surfaces au-delà de celles comptabilisées au titre des 5 % des terres arables en surface d'intérêt environnemental dans le cadre du verdissement et des bandes enherbées rendues obligatoires, le cas échéant, dans le cadre des programmes d'action en application de la Directive Nitrates."
    Selection.TypeParagraph
    Selection.TypeText Text:="Une fois le couvert implanté, le couvert devra être en déclaré avec une culture issue de la catégorie Surfaces herbacées temporaires."
    Selection.TypeParagraph

Je ne sais pas utiliser

Selection.Find.Replacement.Text = "..."

pour y intégrer des sauts de lignes et des tabulations.

J'ai essayé de faire comme ça :

    Set objDoc = ActiveDocument
    strFirstWord = InputBox("Entrez le premier mot:", "Premier mot")
    strLastWord = InputBox("Entrez le dernier mot : ", " Last Word ")
    ReplacementWord = "Seules peuvent être engagées dans cette opération : ^p" _
    & "- les Terres Arables hormis :^p" _
    & "          - les parcelles déclarées avec une culture de la catégorie Surfaces Herbacées temporaires et/ou jachère depuis plus de deux ans et ^p" _
    & "          - les surfaces en jachère ;^p" _
    & "- les cultures pérennes (sauf celles des catégories PPAM et Divers ;^p" _
    & "- les surfaces qui étaient engagées dans une MAE rémunérant la présence d'un couvert spécifique favorable à l'environnement, lors de la campagne PAC précédant la demande d'engagement.^p" _
    & "Par ailleurs, seules sont éligibles les surfaces au-delà de celles comptabilisées au titre des 5 % des terres arables en surface d'intérêt environnemental dans le cadre du verdissement et des bandes enherbées rendues obligatoires, le cas échéant, dans le cadre des programmes d'action en application de la Directive Nitrates.^p" _
    & "Une fois le couvert implanté, le couvert devra être en déclaré avec une culture issue de la catégorie Surfaces herbacées temporaires.^p"
        With Selection
        .HomeKey Unit:=wdStory
            With Selection.Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .Text = strFirstWord & "*" & strLastWord
            .Replacement.Text = ReplacementWord
            .MatchWildcards = True
            .Execute Replace:=wdReplaceAll
            End With
        End With

Et ça fonctionne ! Mais uniquement si le nombre de caractères est inférieur à 255. Ce qui n'est pas mon cas...

Quelqu'un peut-il m'aider svp ?

bonjour,

Je ne sais pas si ça t'aidera beaucoup mais moi j'essaierai de mettre mes textes dans des variables... ou mieux : une fonction !

Sub TaMacro()
Selection.TypeParagraph
    Selection.TypeText Text:=MyText(1)
   MyText(2) & Chr(13) & MyText(3) & Chr(13) & _
   MyText(4) & Chr(13) & MyText(5) & Chr(13) & _
   MyText(6) & Chr(13) & MyText(7) & Chr(13) & MyText(8)
End Sub
Function MyText(i%)
   Dim S$
   Select Case i
   Case 1: S = "Seules peuvent être engagées dans cette opération :"
   Case 2: S = "- les Terres Arables hormis :"
   Case 3: S = "          - les parcelles déclarées avec une culture de la catégorie Surfaces Herbacées temporaires et/ou jachère depuis plus de deux ans et"
   Case 4: S = "- les surfaces en jachère ;"
   Case 5: S = "- les cultures pérennes (sauf celles des catégories PPAM et Divers ;"
   Case 6: S = "- les surfaces qui étaient engagées dans une MAE rémunérant la présence d'un couvert spécifique favorable à l'environnement, lors de la campagne PAC précédant la demande d'engagement."
   Case 7: S = "Par ailleurs, seules sont éligibles les surfaces au-delà de celles comptabilisées au titre des 5 % des terres arables en surface d'intérêt environnemental dans le cadre du verdissement et des bandes enherbées rendues obligatoires, le cas échéant, dans le cadre des programmes d'action en application de la Directive Nitrates."
   Case 8: S = "Une fois le couvert implanté, le couvert devra être en déclaré avec une culture issue de la catégorie Surfaces herbacées temporaires."
   MyText = S
End Function

A+

8exemple.docm (21.69 Ko)

Bonjour galopin01, merci pour ces éléments de réponse. J'ai essayé les deux et malheureusement ça ne fonctionne pas...

Je ne maîtrise pas trop les fonctions mais en faisant mon test, le message d'erreur sur les 255 caractères max est apparu.

Sub TaMacro()
    Dim strFirstWord As String '
    Dim strLastWord As String

    strFirstWord = "le 30 septembre" 'InputBox("Entrez le premier mot:", "Premier mot")
    strLastWord = "pratiques phytosanitaires." 'InputBox("Entrez le dernier mot : ", " Last Word ")
    With Selection
    .HomeKey Unit:=wdStory
        With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = strFirstWord & "*" & strLastWord
        .Replacement.Text = MyText(1) & Chr(13) & _
   MyText(2) & Chr(13) & MyText(3) & Chr(13)
        .MatchWildcards = True
        .Execute Replace:=wdReplaceAll
        End With
        End With

    Selection.TypeParagraph
    Selection.TypeText MyText(1) & Chr(13) & _
   MyText(2) & Chr(13) & MyText(3) & Chr(13) & _
   MyText(4) & Chr(13) & MyText(5) & Chr(13) & _
   MyText(6) & Chr(13) & MyText(7) & Chr(13) & MyText(8)
 End Sub
Function MyText(i%)
   Dim S$

   Select Case i
   Case 1: S = "Seules peuvent être engagées dans cette opération :"
   Case 2: S = "          - les Terres Arables hormis :"
   Case 3: S = "          - les parcelles déclarées avec une culture de la catégorie Surfaces Herbacées temporaires et/ou jachère depuis plus de deux ans et"
   Case 4: S = "          - les surfaces en jachère ;"
   Case 5: S = "          - les cultures pérennes (sauf celles des catégories PPAM et Divers ;"
   Case 6: S = "          - les surfaces qui étaient engagées dans une MAE rémunérant la présence d'un couvert spécifique favorable à l'environnement, lors de la campagne PAC précédant la demande d'engagement."
   Case 7: S = "Par ailleurs, seules sont éligibles les surfaces au-delà de celles comptabilisées au titre des 5 % des terres arables en surface d'intérêt environnemental dans le cadre du verdissement et des bandes enherbées rendues obligatoires, le cas échéant, dans le cadre des programmes d'action en application de la Directive Nitrates."
   Case 8: S = "Une fois le couvert implanté, le couvert devra être en déclaré avec une culture issue de la catégorie Surfaces herbacées temporaires."
   End Select
   MyText = S
End Function

Un peu plus d'aide ne serait pas de refus

Bonne journée !

En cherchant en anglais sur un moteur de recherche j'ai fini par trouver une solution.

Je la poste plutôt que de supprimer ce poste parce qu'elle sera surement utile à d'autres.

Le lien en anglais : https://gregmaxey.com/word_tip_pages/find_replace_long_string.html

Mon adaptation :

    Dim strFirstWord As String
    Dim strLastWord As String
    Dim oSourceDoc As Document

    Set oSourceDoc = Documents.Open(FileName:="\\fileruser2\Users\ben\Bureau\test.docx") 'chemin vers un fichier contenant le texte de remplacement
    Selection.WholeStory
    Selection.Copy
    oSourceDoc.Close

    strFirstWord = "le 30 septembre" 'InputBox("Entrez le premier mot:", "Premier mot")
    strLastWord = "pratiques phytosanitaires." 'InputBox("Entrez le dernier mot : ", " Last Word ")
    With Selection
    .HomeKey Unit:=wdStory
        With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = strFirstWord & "*" & strLastWord
        .Replacement.Text = "^c" 'correspond au contenu du presse papier
        .MatchWildcards = True
        .Execute Replace:=wdReplaceAll
        End With
        End With

Merci pour votre lecture !

Rechercher des sujets similaires à "selection find replacement text sauts lignes tabulations 255"