Remplacer un mot dans un texte avec replace ou non

0/5 (1 avis)

Vue 9 140 fois - Téléchargée 585 fois

Description

A la recherche de sources permettant de remplacer un mot dans un texte, j'en ai trouvé plusieurs dont un grand nombre vantaient les mérites de la fonction Replace...
Loin de mettre en doute cette fonction (que j'utilise d'ailleurs dans le source présent), elle souffre malgré tout d'un défaut.
Elle ne fait aucune distinction entre les mots et les syllabes. Donc si on veut supprimer "la" de "La ballade de la malade", on se retrouve avec " bal de de ma de" (autre exemple dans la capture)...
J'ai donc modifié une source pour comprendre ce que je viens de dire (si ce n'était pas assez clair) et proposer une solution pour contourner le problème.

Source / Exemple :


'REMPLACEMENT DU MOT PAR LA FONCTION REPLACE
Private Sub Command1_Click()
    res = vbNullString
    
    txt = Text1.Text
    
    mot = Text2.Text
    
    'Remplace toutes les occurences du mot recherché...
    'C'est ici qu'on voit les dégats lorsque le mot recherché est aussi une syllabe
    res = Replace(txt, mot, " ")
    
    Text3.Text = res
    
    If res = vbNullString _
    Then MsgBox "Cette phrase ne contient pas ce mot !", vbCritical, "Mot introuvable"

End Sub

'REMPLACEMENT DU MOT PAR UN AUTRE MOYEN QUE REPLACE
Private Sub Command2_Click()
    
    res = vbNullString
    
    txt = Text1.Text
    
    'Pour permettre la rechercher sur l'ensemble du texte...
    txt = Replace(txt, vbCrLf, " ¡ ")       'Alt+173 = point d'exclamation à l'envers
    txt = Replace(txt, vbCr, " ¿ ")         'Alt+168 = point d'interrogation à l'envers
                                            'Dans le texte, il n'y en a pas...
    
    mot = Text2.Text
    
    Dim MyTab() As String
    
    'Découpe le texte en morceau ; chaque morceau correspondant à un mot
    'Si les constantes vbCr et vbCrLf n'avaient pas été remplacées, la découpe ne
    'se serait pas faite correctement...
    MyTab = Split(txt, " ")
    
    'Pour chacun des mots du texte...
    For i = 0 To UBound(MyTab)
        'Si le mot en minuscule est différent du mot recherché (en minuscule)...
        If LCase(MyTab(i)) <> LCase(mot) Then
            '...alors conserve ce mot et l'ajoute à la chaine "res"
            res = res & MyTab(i) & " "
        End If
    Next i
    
    'Remet les vbCr et vbCrLf afin de retrouver le texte avec ses paragraphes...
    res = Replace(res, " ¡ ", vbCrLf)
    res = Replace(res, " ¿ ", vbCr)
    
    Text3.Text = res
    
    If res = vbNullString _
    Then MsgBox "Cette phrase ne contient pas ce mot !", vbCritical, "Mot introuvable"

End Sub

Private Sub Form_Load()
    Dim Texte1 As String
    Texte1 = "C'est sur la route du village que Danielle a rencontré son ami Jean."
    Texte1 = Texte1 & vbCrLf & "Elle ne l'avait plus vus depuis la semaine dernière."
    Texte1 = Texte1 & vbCrLf & "Celui-ci venait d'aller chercher son poisson à la pêcherie."
    Texte1 = Texte1 & vbCrLf & vbCrLf & "Je ne vous dirais pas la suite car cette histoire est personnelle."
    
    Me.Text1.Text = Texte1
    
    Me.Text2.Text = "son"
    Me.Text2.SelStart = 0
    Me.Text2.SelLength = Len(Me.Text2.Text)
    
    Me.Label4.FontSize = 12
    Me.Label4.FontBold = True
    Me.Label4.Caption = "Faites également le test avec 'elle', 'la'"

End Sub

Conclusion :


Attention, le zip utilise les fonctions Replace (et oui, quand même) et Split. Et d'après ce que j'ai pu lire sur ce site, elles sont disponibles qu'avec VB6. Désolé pour les autres.

Codes Sources

A voir également

Ajouter un commentaire Commentaire
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
8 nov. 2002 à 12:54
Salut,
J'ai une solution simplissime pour remplacer un mot et pas une syllabe
MaNouvelleChaine = Replace (MonAncienneChaine, " " & TexteAvant & " ", " " & TexteApres & " ")
En gros, tu remplace une chaine de caractère que tu répète avec la chaine de remplacement.
Tu fais pareil pour remplacer en début ou en fin de fin en préfixant ou en suffixant avec " ".

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.