VBA rechercher dans une colonne

lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010 - 20 juin 2006 à 13:50
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010 - 21 juin 2006 à 16:21
Bonjour
j'ai un petit probleme de recherche, j'utilise la fonction fin() mais le probleme c'est que si ce que je recherche existe plusieur fois il ne m'en retourne qu'un,
comment faire pour avoir toues les résusltats dans un listbox?
peut-on compter les résultat valide?
merci de votre aide

12 réponses

drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
20 juin 2006 à 14:17
Bonjour,

cette boucle ajoute dans un listbox les éléments de la colonne A jusqu'à ce qu'il n'y a plus de valeur. Rajoute une condition pour préciser ce que tu veux retrouver dans le listbox et cela devrai marcher

dim tableau as string
i = 1
Do
ReDim Preserve tableau(1 To i)
tableau(i) = Range("A" & i).Value
listbox1.AddItem tableau(i)
i = i + 1
Loop Until (Range(("A" & i)).Value) = "" Or IsEmpty(Range(("A" & i)).Value)

 Drikce 06
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
20 juin 2006 à 14:24
d'accord merci je vais regardé ton code et l'adapter,
merci beaucoup
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
20 juin 2006 à 14:25
^merci beaucoup, je vais adapter ton code,

merci merci merci :)
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
20 juin 2006 à 21:45
je n'arrive toujours pas a faire mon module de recherche, un petit indice de plus ? :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
20 juin 2006 à 21:54
Salut,

As tu un exemple concret ? Par exemple quelques lignes de données, dans quelles colonnes sont stockées tes données ainsi qu'une recherche.

Je reviens demain matin si tu as posté l'exemple, je t'aiderai sans problème.

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
20 juin 2006 à 22:48
oui bien sur,
alors j'ai une colonne A qui contient des prenoms, par exemple:
morgan
margaux
kevin
tibault
morgan
toto
kevin
momo

voila ensuite j'ai créé un userform1 avec un textbox et un bouton pour validé, la textbox sert a récupérer le mot rechercher, quand on clique sur le bouton ca ouvre l'userform2 avec un une list box simple( on comence doucement lol)
mais je n'arrive pas a faire la recherche, je voudrai qu'il s'affiche dans la list box les célule qui réponde au critère, par exemple si on recherche "mor" ca renvoi ligne 1 morgan et ligne 2 morgan, et si on cherche mo ca renvoir morgan,morgan,momo.
j'ai essayé de faire un code mais ca ne marche pas j'ai un message d'erreur:

Private Sub UserForm_Initialize()
chercher = UserForm1.TextBox1.Value
MsgBox chercher
Dim limit, supp, i, j As Long


limit = 10000 'on limite a 10000 lignes


'on cherche en commençant par 10000 jusqua ce que la colone ne soit plus égale a rien
While Feuil1.Cells(limit, 1) = ""
limit = limit - 1
Wend


ok = Feuil1.Columns(1).Find("" & chercher, ligne, , , xlByRows, xlNext).Value
MsgBox ok
UserForm2.ListBox1.AddItem ok


If ok <> "" Then
j = 1
While j < limit
ligne = "A" & j
'msgBox ligne
ok = Feuil1.Columns(1).FindNext(ligne)
MsgBox ok
j = j + 1
UserForm2.ListBox1.AddItem ok
Wend
End If

End Sub
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 juin 2006 à 06:59
Salut, je te propose ceci :

Private Sub UserForm_Initialize() <= pas dans le Initialize, ds Bouton click car il faut attendre la valeur du TextBox pour la recherche

Private Sub CommandButton1_Click()
Dim chercher As String, NomTemp As String
Dim AncienneLigne As Long, NouvelleLigne As Long

chercher = TextBox1.Text
Range("A1").Select
Cells.Find(What:=chercher, After:=ActiveCell, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate

NomTemp = Selection.Value
UserForm2.ListBox1.AddItem NomTemp

Do
AncienneLigne = ActiveCell.Row
Cells.FindNext(After:=ActiveCell).Activate
NouvelleLigne = ActiveCell.Row
If NouvelleLigne < AncienneLigne Or NouvelleLigne = AncienneLigne Then Exit Do
NomTemp = Selection.Value
ListBox1.AddItem NomTemp
Loop
End Sub

Voilà, tester et approuvé (par moi). Je précise que ça ne cherche pas que dans la colonne A mais dans toutes les cellules de la feuille sélectionnée.

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
21 juin 2006 à 07:20
merci pour ton code je vais voir ca ce matin.
mais juste 1-2 truc que je comprene :)
 pour les recherche avec find on est obliger d'activer les céllules apparament non?
ensuite tu marque : NomTemp = Selection.Value
Selection.Value c'est le text de la cellule active c'est bien ca?
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 juin 2006 à 07:38
De rien,

Effectivement la cellule qui contient le résultat est activée.
Du coup, pour récupérer la valeur (Value) de la cellule sélectionnée, on fait Selection.Value que je place dans une variable (NomTemp) pour le placement dans la ListBox.

Juste un p'tit truc, tu as déclaré dans ton code :
Dim limit, supp, i, j As Long Sache que seul 'j' est de type Long.
Voici la bonne syntaxe :
Dim limit As Long, supp As Long, i As Long, j As Long

@++ et bonne prog !

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
21 juin 2006 à 11:12
    a d'accord je pensez que lorsque l'on faisait Dim limit, supp, i, j As Long    ça déclarer toutes les variable en long
merci pour ton aide mortalino.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 juin 2006 à 12:19
De rien, c'est cadeau ça fait plaisir !

Pour te rassurer, je me suis fait avoir au début, je pensais qu'il fallait les déclarer comme ceci aussi.

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
21 juin 2006 à 16:21
j'ai essayre de faire un code un peu dans ton genre mais sans passer par les cellule active. ( je viens de php et j'ai pas l'habitude de ça)
voici mon code:

chercher = TextBox1.Text
ligneu = Feuil1.Columns(1).Find("" & chercher, [A2], , , xlByRows, xlNext).Row
msg = Feuil1.Cells(ligneu, 1)
UserForm1.ListBox1.AddItem msg

Do
vl = ligneuligneu Feuil1.Columns.FindNext(After :vl).Row
If ligneu < vl Or ligneu = vl Then Exit Do
msg = Feuil1.Cells(ligneu, 1)
UserForm1.ListBox1.AddItem msg
Loop

Mais j'ai un soucis dans ma boucle avec la fonction FindNext qui bugue et je ne sais pas pourquoi.
dites moi ou est mon erreur si vous la voyez :)

merci merci
0
Rejoignez-nous