Les traitements de textes conventionnels offrent dans le menu Edition, la fonction "Rechercher", avec diverses options, du style : vers le haut, vers le bas, en respectant la casse... C'est cette fonction qui est développée ici. Elle est adaptable à tous les programmes VB contenant un RichTextBox ou une simple zone de texte. Ce code pourra éventuellement être utile à l'un ou l'autre...
Source / Exemple :
'Déclaration obligatoire des variables
Option Explicit
'Variable contenant la chaîne de texte à chercher dans le texte source
Dim Txt_A_Chercher As String
'Variable contenant la position de départ du point d'insertion
Dim Position_Start As Long
'Variable contenant le texte source dans lequel il faudra chercher
Dim Txt_Source As String
'Variable contenant, au cours de la recherche, la position du point
'd'insertion à l'intérieur du texte source.
Dim Position_Interne As Long
'Variable contenant le texte à chercher mis en majuscules
'(utilisé si pas respect de la casse)
Dim Txt_A_Chercher_MAJ As String
'Variable contenant le texte source mis en majuscules
'(utilisé si pas respect de la casse)
Dim Txt_Source_MAJ As String
Private Sub Cmd_Find_Click()
'La variable de txt à chercher prend sa valeur
Txt_A_Chercher = Txt_Find.Text
'Lance la procédure "Trouve_Le"
Trouve_Le
'Donne focus à la RTBox
RTBox.SetFocus
End Sub
Sub Trouve_Le() ' = *** LA PROCÉDURE DE RECHERCHE ***
'Position_Start = là où se trouve le point d'insertion + 1 caractère
'(faut bien que ça avance)
Position_Start = RTBox.SelStart + 1
'Le TXT source, c'est le texte du RTBox
Txt_Source = RTBox.Text
'1/ LA CASSE : Si pas respect de la CASSE, les chaînes "à chercher"
'et "source" sont converties en majuscules. Ainsi, quelle que soit
'l'écriture du texte, aucune ambiguïté ne sera présente lors de la
'recherche.
'Value = 0 = Unchecked = pas respect de la casse
If Chk_Casse.Value = 0 Then
Txt_A_Chercher_MAJ = UCase(Txt_A_Chercher)
Txt_A_Chercher = Txt_A_Chercher_MAJ
Txt_Source_MAJ = UCase(Txt_Source)
Txt_Source = Txt_Source_MAJ
End If
'Value = 1 = Checked = respect de la casse
If Chk_Casse.Value = 1 Then
Txt_Source = Txt_Source
Txt_A_Chercher = Txt_A_Chercher
End If
'2/ OPTION VERS LE BAS / HAUT
'Si option Bas activée...
If Opt_Bas(1).Value = True Then
'C'est l'utilisation de la fonction InStr qui indique la position de la
'première occurence d'une chaîne à l'intérieur d'une autre chaîne.
'Syntaxe : InStr([start, ]string1, string2[, compare])
Position_Interne = InStr(Position_Start + 1, Txt_Source, Txt_A_Chercher)
'Si option Haut activée...
Else
'Recule par pas de 1 caractère
For Position_Interne = Position_Start - 1 To 0 Step -1
'Revenu au début du RTBox => sortie de boucle
If Position_Interne = 0 Then Exit For
'Si texte trouvé (fonction MID) => sortie de boucle.
'Syntaxe : Mid(string, start[, length])
'Pour déterminer le nombre de caractères contenus dans l'argument
'string, on utilise la fonction "Len".
If Mid(Txt_Source, Position_Interne, Len(Txt_A_Chercher)) = Txt_A_Chercher Then Exit For
Next
End If
'3/ TEXTE TROUVÉ ?
'a) Le texte est trouvé ...
If Position_Interne Then
'Point de départ de la sélection (mise en surbrillance)
RTBox.SelStart = Position_Interne - 1
'Longueur de txt à sélectionner (mettre en surbrillance)
RTBox.SelLength = Len(Txt_A_Chercher)
'Un beep si txt trouvé
Beep
'b) Le txt n'est pas trouvé ou retour au début du RTBox ...
Else
Dim Msg, Réponse
Msg = "Impossible de trouver : " & Chr(34) & Txt_A_Chercher & Chr(34)
Réponse = MsgBox(Msg, 0, App.Comments)
End If
End Sub
Private Sub Form_Load()
'A l'ouverture, Bouton "Chercher" = inactif.
Cmd_Find.Enabled = False
'Option "Recherche vers le Bas" = sélectionné.
Opt_Bas(1).Value = True
End Sub
Private Sub Txt_Find_Change()
'Si pas de texte à rechercher,Bouton "Chercher" = inactif.
If Txt_Find = "" Then
Cmd_Find.Enabled = False
'Si présence de texte à chercher, Bouton "Chercher" = actif.
Else
Cmd_Find.Enabled = True
End If
End Sub
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.