Recherche un mot, une phrase, ... dans un richtextbox ou une zone de texte

Description

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

Codes Sources

A voir également

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.