Recherche avec textbox

cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 - 24 janv. 2008 à 14:39
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 24 janv. 2008 à 22:45
bonjour
voila ,je fais une recherche à l'aide d'un textbox
Private Sub TextBox9_Change()

Dim Plage As Range, cell As Range
Dim Recherche As String, Adresse As String
Dim Ligne As Integer, N As Integer
Dim C As Range
ListBox2.Clear
N = 0
Recherche = TextBox9.Value
Range("B2").Select
Ligne = Sheets(1).Range("B" & "65536").End(xlUp).Row
Set Plage = Sheets(1).Range("b" & "1:" & "B" & Ligne)
With Plage
Set C = .Find(Recherche)
If Not C Is Nothing Then
Adresse = C.Address
Do
If UCase(Recherche) = UCase(Left(C, Len(Recherche))) Then
ListBox2.AddItem C.Offset

End If
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> Adresse
End If
End With

End Sub

j'ai bien les données qui s'affiche dans la listbox2,et quand je click sur une données j'ai les infos qui s'affichent dans les textboxs avec se code
Private Sub ListBox2_Click() 'MODE RETOUR VALEUR RECHERCHEE
Dim Recherche As String
Dim L As Integer
Dim Plage As Range
Dim cell As Range
Dim maille As Boolean
Recherche = ListBox2.Value
L = ThisWorkbook.Sheets("Database").Range("A65536").En d(xlUp).Row
Set Plage = ThisWorkbook.Sheets("Database").Range("A2:E" & L)
For Each cell In Plage
If cell.Value = Recherche Then
LRecherche = cell.Row
End If
Next cell
MaskEdBox1 = WsBase.Range("A" & LRecherche)
TextBox1 = WsBase.Range("B" & LRecherche)
TextBox2 = WsBase.Range("C" & LRecherche)
decl = WsBase.Range("D" & LRecherche)
TextBox5 = WsBase.Range("E" & LRecherche)
End Sub
mais j'ai un probleme quand j'ai plusieurs fois le meme nom,il n'affiche pas les infos,et je peut avoir plusieurs fois le meme nom.
voyez vous un probleme dans se code ?
merci
petchy

<!-- / message -->
<!-- sig -->

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 janv. 2008 à 16:48
Salut
Surement dû au fait que tu réinitialise le début de recherche en tête de feuille et pas à partir de l'emplacement actuel.
Quand ta recherche trouve une cellule, il la stocke dans LRecherche, mais il continue la recherche.
S'il en trouve d'autres, il ecrasera la première.
Il va donc falloir :
- Soit stopper la recherche sur le premier trouvé et imaginer de pouvoir reprendre ensuite la boucle
- Soit mémoriser toutes les positions trouvées

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
24 janv. 2008 à 18:19
Re
ok,mais comment memoriser les positions
sinon,si en validant les donnée vers ma feuille j'incrémente un N° automatique,est ce que ça ira mieux.
petchy
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
24 janv. 2008 à 22:45
Plutôt que
ListBox2.AddItem C.Offset
mets
ListBox2.AddItem C.Value

Aussi, quand tu écris
Set C = .Find(Recherche)
pense à utiliser les paramètres LookIn : =xlValues ou xlFormulas et LookAt:=xlWhole ou xlPart selon les besoins. J'ai remarqué que lorsqu'on utilise Ctrl-F et qu'on change les différentes options, celles-ci se répercutent sur la fonction Find. Les derniers paramètres sont conservés sauf si explicitement déterminés lors de l'appel...

Maintenant, si tu as plusieurs fois le même nom, et que tu veuilles utiliser des textbox, il te faudrait des boutons "Précédent" et "Suivant", sinon je ne vois pas comment tu pourrais y arriver... Autrement, tu pourrais utiliser une Listbox ou une grille pour afficher les données de tous les noms trouvés, ce qui serait plus simple, d'après moi.

Pour stocker les noms, si nécessaire, tu peux utiliser un tableau dynamique dans lequel tu charges les données nécessaires pour retrouver chaque nom déjà trouvés. Ce pourrait être l'index de la ligne simplement (C.Row)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous