Fonction cherche et selectionne ds un textbox

Soyez le premier à donner votre avis sur cette source.

Vue 5 250 fois - Téléchargée 522 fois

Description

Slt si joint une petite fonction que je me suis faite pour rechercher et selectionner une chaine de caractéres dans un textbox :

J'ai joint une capture et un exemple d'utilisation de la fonction(source)

Source / Exemple :


'Dans un Module

Public Nb As Integer
'Fonction pour recherche et selectionner un text dans un textbox
Public Function ChercheEtSelect(source As TextBox, Txt As String, Optional RespetMajMin As Boolean = True)
If Nb = 0 Then Nb = 1 'le premier caractére de la textbox
If Nb >= Len(source) Then Nb = 1  'Si on a parcouru tous le textbox alors on recommence

For i = Nb To Len(source) 'boucle

    If RespetMajMin = True Then
    
        If Mid(source, i, Len(Txt)) = Txt Then ' si on rencontre le text recherche
        'Pas de respet Min/maj
        source.SetFocus 'Prend le focus
        source.SelStart = i - 1 'debut de la selection
        source.SelLength = (Len(Txt)) 'longueur de la selection
        Nb = (i + Len(Txt)) 'position = i+longeur de txt
        Exit Function
        End If
    Else
    
        If Mid(LCase(source), i, Len(Txt)) = LCase(Txt) Then ' si on rencontre le text recherche
        source.SetFocus 'Prend le focus
        source.SelStart = i - 1 'debut de la selection
        source.SelLength = (Len(Txt)) 'longueur de la selection
        Nb = (i + Len(Txt)) 'position = i+longeur de txt
        Exit Function
        End If
    

End If
If i = Len(source) Then Nb = 1: MsgBox "Fin de la recherche"

Next i
End Function

'Pour utiliser la fonction

ChercheEtSelect Text1, "Vbfrance", False
'Cherche le texte Vbfrance dans Text1 sans Respect des Min/maj

ChercheEtSelect Text1, "Vbfrance", true
'Cherche le texte Vbfrance dans Text1 avec Respect des Min/maj

'Ps: a chaque lancement de la fonction, c'est le texte suivant qui est recherché, a la fin de la recheche dans text1 une msgbox s'affiche, et au prochain lancement, la recherche repart du début!!

Conclusion :


Voila, Jespére que ca va servir a quelqu'un aussi!!!! Laissez moi un commentaire ou une suggestion d'évolution de la fonction!!!!!!

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
5
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
8 mai 2005

une simple question, j'aimerai lui trouver une reponse
est il possible de faire le meme chose avec un textbox
contenant le text a rechercher et un webbrowser contenant un document html sans appeler la method findtext de IE.

merci
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
4
Effectivement meaculpa, c'est franchement plus rapide!!! donc Utiliser la fonction de NoMitsu, On peu pas étre le meuilleur a chaque fois lol. Merci ca m'aura appris a utiliser Instr!!!!!
Messages postés
721
Date d'inscription
dimanche 10 juin 2001
Statut
Membre
Dernière intervention
27 mars 2011
7
Ouais, j'ai fait le meme test et y'a pas photo, Instr est vraiment bcp plus rapide... Sinon, l'idée n'était pas trop mal
Messages postés
2
Date d'inscription
vendredi 25 avril 2003
Statut
Membre
Dernière intervention
26 août 2003

it excuses you know how gustaria to know to me if me podrias to recommend a pagina to learn VBA. please the urgent nesecito, my name is Diego sevilla.mi mail is dsevilla_cruz@hotmail.com I wait for your aid.
Messages postés
122
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 février 2011

Salut, le code marche inpec mais n'est pas tres rapide a cause de la boucle for next

pour exemple g fait un test (avec un athlon XP 1600+ et 512Mo de DDR) avec ta fonction sur une recherche qui contenait 20500 caratere il ma falu 23 secondes alors que si on remplace la boucle par instr on obtien avec la meme config et le meme nombre de ligne 0 seconde pour trouver la chaine.

voila un petit bout de code a pofiner qui devrais te permetre d'optimiser les performances:

Public Sub RechercheTxt(Source As TextBox, Txt As String, Optional NoDiffMajMin As Boolean = False)
Dim DebutStr As Integer

Select Case NoDiffMajMin
Case True 'Pas de respet Min/maj
If Source.SelStart 0 And Source.SelLength 0 Then
DebutStr = InStr(Source.SelStart + 1, UCase(Source.Text), UCase(Txt))
Else
DebutStr = InStr(Source.SelStart + Source.SelLength, UCase(Source.Text), UCase(Txt))
End If
Case False 'Respet Min/maj
If Source.SelStart 0 And Source.SelLength 0 Then
DebutStr = InStr(Source.SelStart + 1, Source.Text, Txt)
Else
DebutStr = InStr(Source.SelStart + Source.SelLength, Source.Text, Txt)
End If
End Select


If DebutStr = 0 Then MsgBox "Fin de la recherche": Exit Sub

Source.SelStart = DebutStr - 1
Source.SelLength = Len(Txt)
Source.SetFocus
End Sub

Elle sutilise comme ta fonction.
A++ et bonne continuation

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.