Word Valeur cible remplacée

Marine_blatz

XLDnaute Nouveau
Bonjour,

quel code utiliser si je veux faire ceci

Remplacer le nombre dans "vitesse 17" ou "vitesse XX" en fonction des docs par "vitesse PROVISOIRE" ?

je veux que ma macro cible le texte "vitesse + XX (le nombre à deux chiffre qui suit quel qu'il soit)" et remplace le tout par "vitesse provisoire"

Quelqu'un peut-il écrire un petit code svp c'est pour du Word ?
 

p56

XLDnaute Occasionnel
Bonjour,
Pour ce faire, on peut utiliser les regex. Voir mise en œuvre dans le docm joint
Ici ce code est lancé à l'ouverture du doc
VB:
Sub Verif_Vitesse()
Dim Prgrf As Paragraph
Dim reg As VBScript_RegExp_55.RegExp, Match As VBScript_RegExp_55.Match
Dim Matches As VBScript_RegExp_55.MatchCollection

    Set reg = New VBScript_RegExp_55.RegExp
    reg.Pattern = "(vitesse)( )(\d{2})"
    reg.Global = True
       
    For Each Prgrf In ThisDocument.Paragraphs
        If InStr(Prgrf.Range.Text, "vitesse") Then
            Set Matches = reg.Execute(Prgrf.Range.Text)
            For Each Match In Matches
                Remplacer_Txt Match.Value, "vitesse provisoire"
            Next Match
        End If
    Next Prgrf
End Sub


Sub Remplacer_Txt(S1 As String, S2 As String)
    With ThisDocument.Content.Find
        .Text = S1
        .Forward = False
        .Execute
        If .Found Then .Parent.Text = S2
    End With
End Sub
 

Pièces jointes

  • XXXXXXXXX-220113-XX.docm
    21.1 KB · Affichages: 8
Dernière édition:

Marine_blatz

XLDnaute Nouveau
J'ai un problème lors de l'exécution cela me met ce message.
Cordialement Marine

TEST.PNG
 

p56

XLDnaute Occasionnel
Alors passez en liaison tardive
VB:
Sub Verif_Vitesse() ' Liaison tardive
Dim Prgrf As Paragraph, nb As Integer
Dim reg As Object, Match As Object, Matches As Object

    Set reg = CreateObject("vbscript.regexp")
    ' etc ...
 

p56

XLDnaute Occasionnel
Pour moi le bug est dans la demande. Si la question avait été plus précise on aurait tous gagné du temps.
Pour une recherche/remplace dans l'entête c'est du genre :
VB:
' référence cochée : Microsoft vbscript regular expression 5.5
Sub Verif_Vitesse()
Dim Prgrf As Paragraph
Dim reg As VBScript_RegExp_55.RegExp, Match As VBScript_RegExp_55.Match
Dim Matches As VBScript_RegExp_55.MatchCollection

    Set reg = New VBScript_RegExp_55.RegExp
    reg.Pattern = "(vitesse)( )(\d{2})"
    reg.Global = True
    For Each Prgrf In ThisDocument.Sections(1).Headers(1).Range.Paragraphs
        If InStr(Prgrf.Range.Text, "vitesse") Then
            Set Matches = reg.Execute(Prgrf.Range.Text)
            For Each Match In Matches
                Remplace_dans_Header 1, 1, Match.Value, "vitesse provisoire"
            Next Match
        End If
    Next Prgrf
End Sub


Sub Remplace_dans_Header(Sct As Byte, Hdr As Byte, S1 As String, S2 As String)
    With ThisDocument.Sections(Sct).Headers(Hdr).Range.Find
        .Text = S1
        .Forward = False
        .Execute
        If .Found Then .Parent.Text = S2
    End With
End Sub

(Et si vous n'avez toujours pas trouvé comment activer la bonne réf, passez en liaison tardive)
Et bien sûr à adapter en fonction de la complexité de votre entête (cf saut de section éventuel par exemple)
 

Discussions similaires

Statistiques des forums

Discussions
314 626
Messages
2 111 294
Membres
111 093
dernier inscrit
Yvounet