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
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
A voir également:
- Excel - Userform recherche de donnees
- Liste déroulante excel - Guide
- Si et excel - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
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
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
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
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
1 juil. 2009 à 18:08
J'avais pas vu ton post entièrement bidouilleur... je reteste
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
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.
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.
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... :-)
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... :-)
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
Je vais essayer dans l'après midi et je te tiendrai au courant...
Merci
Anna
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
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
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
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
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
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
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
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
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
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
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
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+
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+
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...
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...
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
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
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
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
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
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
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
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...
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
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
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
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
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
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
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
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
Merci encore c'est vraiment très gentil!
Anna