Excel - Userform recherche de donnees

Résolu
ANNA -  
ANNA LAFLEUR Messages postés 7 Statut Membre -
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
Configuration: Windows XP
Firefox 3.5

19 réponses

  1. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  2. olive60 Messages postés 273 Statut Membre 27
     
    J'avais pas vu ton post entièrement bidouilleur... je reteste
    1
  3. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  4. ANNA
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ANNA
     
    Merci de ta réponse Bidouilleur.

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

    Merci

    Anna
    0
  7. 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
    0
  8. olive60 Messages postés 273 Statut Membre 27
     
    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
  9. ANNA
     
    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
  10. ANNA
     
    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
  11. 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
    0
  12. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  13. ANNA
     
    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
  14. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  15. ANNA LAFLEUR Messages postés 7 Statut Membre 1
     
    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
  16. ANNA LAFLEUR Messages postés 7 Statut Membre 1
     
    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
  17. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  18. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  19. ANNA LAFLEUR Messages postés 7 Statut Membre 1
     
    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