Excel - Userform recherche de donnees

Résolu/Fermé
ANNA - 1 juil. 2009 à 11:07
ANNA LAFLEUR Messages postés 5 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 23 juillet 2009 - 23 juil. 2009 à 15:05
salut à tous,

Une amie m'a donné un fichier Excel qui comporte un exemple de Userform de recherche de données dans une feuille.

Je tente désespérément d'adapter le code mais je n'y arrive pas, j'ai donc besoin de votre aide !!!

OUVREZ LE FICHIER POUR MIEUX COMPRENDRE LA SUITE...
http://www.cijoint.fr/cjlink.php?file=cj200906/cijNZe1r3x.xls

il y a 4 textbox, et je voudrais n'en garder qu'une qui recherche uniquement dans la colonne 7 (G).

En gardant le même système de liste en dessous.


Merci de votre aide je suis sur que c'est pas trop compliqué mais je ne comprends pas j'ai tout essayé cela ne fonctionne pas!

ANNA
A voir également:

19 réponses

Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
1 juil. 2009 à 13:32
je ne connais pas ton nouveau classeur.

voilà ce qu'il faut modifier....

partie initialisation du userform
seul le textbox1 sera visible.

Private Sub UserForm_Initialize()
With Sheets("base")
Me.Label1.Caption = .Cells(1, 7).Value
Me.Label2.Visible = False
Me.Label3.Visible = False
Me.Label4.Visible = False
Me.TextBox2.Visible = False
Me.TextBox3.Visible = False
Me.TextBox4.Visible = False
'Me.Label2.Caption = .Cells(1, 2).Value
'Me.Label3.Caption = .Cells(1, 3).Value
'Me.Label4.Caption = .Cells(1, 4).Value
End With
End Sub

partie textbox

Private Sub TextBox1_Change()
'Call chercher(TextBox1.Value, 1) 'mis en commentaire
Call chercher(TextBox1.Value, 7) ' pour rechercher sur la colonne 7

End Sub

partie procedure de recherche



Public Sub chercher(rech, c) ' recherche d'une chaine
Dim sel As Object
Dim valide As Boolean
Dim i As Integer
Dim l As Long
Dim n As Integer
l = 2: n = 0
recherche.ListBox1.Clear
With Sheets("base")
If rech = "" Then Exit Sub
Do
Set sel = .Cells.Find(What:=rech, After:=.Cells(l, c), _
LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
If sel Is Nothing Then Exit Do
If sel.Column <> c Then Exit Do
If sel.Row <= l Then Exit Do
l = sel.Row
valide = True

'partie suivante mis en commentaire ************
' For i = 1 To 4
' If recherche.Controls("TextBox" & i).Value <> "" _
' And InStr(1, LCase(.Cells(l, i).Value), LCase(recherche.Controls("TextBox" & i).Value)) = 0 Then valide = False
' Next i

'fin de section mis en commentaire ************
'si le control est le textbox1 avec un vide on fait rien
' si la colnne est vide ( en G) on fait rien
' ce qui donne...
If recherche.Controls("TextBox" & 1).Value <> "" _
And InStr(1, LCase(.Cells(l, 7).Value), LCase(recherche.Controls("TextBox" & 1).Value)) = 0 Then valide = False


'si le controle est ok on fait la concaténation des 4 colonne avec "&"
If valide Then
' ici on met en forme la recherche les lignes avec .cells(l,2).value ecrivent les valeurs de la colonne B
recherche.ListBox1.AddItem _
(.Cells(l, 7).Value & " " & _
.Cells(l, 2).Value & " " & _
.Cells(l, 3).Value & " " & _
.Cells(l, 4).Value)
recherche.ListBox1.List(n, 2) = sel.Row
n = n + 1
End If
Loop
End With
End Sub
4
olive60 Messages postés 253 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 21 décembre 2010 27
1 juil. 2009 à 18:08
J'avais pas vu ton post entièrement bidouilleur... je reteste
1
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
1 juil. 2009 à 11:49
bonjour,
j'ai fait le tour du programme rapidement
il est clair.
par contre ta demande ne l'est pas la colle G est vide.
tu dis
il y a 4 textbox, ( c'est vrai il font référence à ABCD nom prenon age profession) et je voudrais n'en garder qu'une ( moi je dirais rend les invisibles ou vérouille les à l'initialisation ) qui recherche uniquement dans la colonne 7 (G). ( qu'i ya -t-il dans cette colonne ? )


et le quel il faut garder le nom le prénom l'age la profession?
Explique ce que tu veux.
0
Merci Bidouilleur,

Effectivement j'ai oublié de préciser une info majeure : j'ai copié le Userform, et les codes associés dans un classeur personnel.

J'ai bien entendu changé dans le code le nom de la feuille. Mais pour ce qui est du paramétrage de la recherche en tant que telle, j'ai plus de mal.

J'espère être plus claire... :-)
0

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

Posez votre question
Merci de ta réponse Bidouilleur.

Je vais essayer dans l'après midi et je te tiendrai au courant...

Merci

Anna
0
Bidouilleur, forumeurs,

le fait de modifier uniquement :

Me.Label1.Caption = .Cells(1, 7).Value

... ne modifie que le Label du textbox (?)

voici mon classeur pour le lequel j'essaie d'adapter le code du fichier transmis dans mon premier post.
http://www.cijoint.fr/cjlink.php?file=cj200907/cijDvJRBtH.xlsm

J'espère que qqun pourra m'aider c'est très important pour moi...

A votre dispo pour pour plus d'infos biensur

Merci Anna
0
olive60 Messages postés 253 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 21 décembre 2010 27
1 juil. 2009 à 18:10
Anna ce qui me trouble c'est que dans ton fichier perso tu as plus d'un mot dans les cellules.. Alors que dans le fichier exemple ya q'un seul mot dans les cellules.. je vais tester ca m'interesse
0
Yeeesss p*tain apparemment comme olive6 j'avais pas "déroulé" tout ton post!

Un grand merci à toi Bidouilleur parce que la c'est pas de la bidouille c'est du grand art! et ca marche du tonnerre!

Tu m'as même mis des explications dans le code, t'es un chef!

MERCI MERCI MERCI
0
Bon c'est re-moi...

J'avais pas pensé à un truc...

Tu penses que c'est possible d'avoir deux Textbox qui recherchent dans la même plage?

Du genre si je tappe dans la tb1 : mickael
dans la tb2 : Jackson

il me trouve la cellule dans la quelle se trouve les deux mots "Mickael" et "Jackson" dans un texte?

Merci si tu peux m'aider

ANNA
0
en fait ce n'est pas un bon exemple.

disons que je tappe dans

le tb1 : salade
le tb2 : bonne

j'aimerais qu'il trouve la cellule dans la quelle j'ai la phrase du genre : "ma salade verte est très bonne"

mais aussi la cellule "ma salade verte n'etait pas très bonne ce soir"

merci merci merci

Anna
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
1 juil. 2009 à 21:58
bonjour ANNA, olive60,

je vais t'étonner....
Devine pourquoi je tai dit qu'il faut utiliser...
Me.Label2.Visible = False
Me.Label3.Visible = False
Me.Label4.Visible = False
à l'initialisation.....
Ben si! j'étais certain que cette demande viendrait par la suite...
mais je dois reconnaître que ta demande est particulière et intéressante et intelligente... et il faut que je me penche sur le problème.
La procédure actuelle lance une recherche sur changement du textbox et reset la listbox.
je regarde et je te dis...
A+
0
Merciiii Bidouilleur!!
0
en fait je me dis que cela pourrait etre une solution :

le mot entré en tb 2 est recherché dans les resultats liés au mot du tb1...

il y aurait alors une "hierarchie" des mots clés entrés...

Je sais pas c'est une idée...
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
2 juil. 2009 à 08:42
Bonjour ANNA,
Donc j'ai regardé et j'ai trouvé....mais .. il ya un mais :-(

Combien veux-tu de textbox ?

Au fait tu pourras féliciter celui qui t'as donné cette macro (c'est bien écrit... bien analysé... intelligent) donc
Félicitations.

Réponds à cette question et je te dis comment faire.
Autre chose je ne suis pas chez moi donc si tu veux que je t'envoie le fichier donne-moi une adresse mail en MP
sinon je le posterai en clair ici.

A+
R
0
ANNA LAFLEUR Messages postés 5 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 23 juillet 2009 1
23 juil. 2009 à 10:22
coucou, bon je sais que tu m'as déjà bien aidée...

En utilisant ce beau code qui le simplifie vraiment la vie je me suis rendue compte que lorsque j'active un filtre sur une des colonne de mon tableau, la macro ne cherche plus correctement les valeurs entrées dans les textbox.

On dirait qu'elle s'arrete à la moitié du tableau.. Enfin elle ne va pas jusqu'au bout! Pourquoi donc???
(quand je tappe un mot par exemple qui se trouve dans 6 cellule ma colonne, et bien elle ne va en trouver que 3)

Merci... si tu as deux minutes à me consacrer ;-)
bonne journée
Anna
0
ANNA LAFLEUR Messages postés 5 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 23 juillet 2009 1
23 juil. 2009 à 10:35
En fait pour être plus précise, on dirait que la recherche s'arrête dès lors que des lignes sont cachées par le filtre. Dès que la macro arrive sur un ligne cachée, la recherche semble s'arrêter...
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
23 juil. 2009 à 12:10
c'est normal!

met ça au début


Public Sub chercher(rech, c) ' recherche d'une chaine
Dim sel As Object
Dim valide As Boolean
Dim i As Integer
Dim l As Long
Dim n As Integer
Dim x As Long
Dim returnValue As Boolean
l = 2: n = 0 ' l=2 on commence en ligne 2
recherche.ListBox1.Clear ' on efface à chaque passage
returnValue = Worksheets("FAQ_Q&A List").FilterMode
If returnValue Then
Selection.AutoFilter
End If
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
23 juil. 2009 à 13:05
une petite explication quand même...

quand tu utilises la méthode .Find et qu'il y a un filtre
l'ensemble des cellules cachées ne sont pas "vues" tout comme avec CTRL + F (rechercher dans Excel)

donc 2 solutions
1 ) on retire le filtre manuelement
2) on le fait en automatique.

pour la méthode #2
cela donne :


Dim returnValue As Boolean
l = 2: n = 0 ' l=2 on commence en ligne 2
recherche.ListBox1.Clear ' on efface à chaque passage
returnValue = Worksheets("FAQ_Q&A List").FilterMode
If returnValue Then
Selection.AutoFilter

.....

Bonne journée
0
ANNA LAFLEUR Messages postés 5 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 23 juillet 2009 1
23 juil. 2009 à 15:05
Merci beaucoup Bidouilleur pour ton aide (ici et par mail)! je ne m'y suis pas encore plongée mais je te tiendrai au courant bientôt...

Merci encore c'est vraiment très gentil!

Anna
0