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.
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.