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

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87