Cautare in list

Informatii despre cum se utilizeaza Microsoft Excel 2003. Calcule, Formule, Functii, Tabele pivot, Analiza datelor, etc
radu_moflea
Mesaje: 286
Membru din: Mar Ian 19, 2010 7:36 pm
Localitate: Bucuresti

Cautare in list

Mesaj de radu_moflea » Mar Feb 23, 2010 6:15 pm

Salutare,

Cum pot sa caut mai usor in list , tastand doar prima litera dintr-un cuvant, si sa apara cuvintele incepand cu litera respectiva?

Multumesc.

Dr. Cloud
Mesaje: 3327
Membru din: Mar Oct 02, 2012 11:19 am

Re: Cautare in list

Mesaj de Dr. Cloud » Mar Feb 23, 2010 6:44 pm

Daca te referi la o lista de tip Data Validation, atunci nu poti face acest lucru.

radu_moflea
Mesaje: 286
Membru din: Mar Ian 19, 2010 7:36 pm
Localitate: Bucuresti

Re: Cautare in list

Mesaj de radu_moflea » Mar Feb 23, 2010 6:56 pm

Multumesc pt. raspuns.
Nasol :( .

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: Cautare in list

Mesaj de Dr.Windows » Mar Feb 23, 2010 8:19 pm

Dar ca sa nu fii cimplet dezamagit pot sa-ti spun ca se poate face "ceva"... dar nu in data validation.

Mai exact in fisierul atasat ai un exemplu de cautare incrementala, rezultatul fiind intors in celula activa (codul nu este foarte optimizat pentru ca e facut "ad-hoc"... ;) ).
Cum functioneaza - in zona D1:D4 colorata si cu galben vor fi datele din lista de cautat, iar "fereastra de cautare" se activeaza in exemplul atasat la combinatia CTRL+I (se poate modifica cu ce vrei tu) si apare urmatoare fereatra:
ExcelIncrementalSearch.jpg
Pe masura ce tastezi textul de cautat in texboxul "cauta textul", lista de valori se va restrange cu valorile care corespund cautarii, apoi cu tastele sageti te poti deplasa in lista, lar la apasarea tastei ENTER valoarea selectata va fi introdusa in celula activa.

Textul din spatele codului este dupa cum urmeaza:

1. in UserForm1:

Cod: Selectaţi tot

Private Sub cmdLoadList_Click()
    LoadList
End Sub


Private Sub cmdExit_Click()
    UserForm1.Hide
End Sub

Private Sub ListBox1_Click()
    UserForm1.Label1.Caption = UserForm1.ListBox1.Value
End Sub

Private Sub ListBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 13 Then
        'MsgBox "Selected: " & UserForm1.ListBox1.Value
        ActiveCell.Value = UserForm1.ListBox1.Value
        UserForm1.Hide
    End If
    
End Sub

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    UserForm1.ListBox1.Clear
    
    For Each oneString In myCollection
        If UCase(Mid(oneString, 1, Len(Me.TextBox1.Value))) = UCase(TextBox1.Value) Then
            UserForm1.ListBox1.AddItem oneString
        End If
    Next oneString
    
    UserForm1.ListBox1.SetFocus
    UserForm1.TextBox1.SetFocus
End Sub

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = vbEnter Then
        MsgBox "Enter"
    End If
    
End Sub
Iar in Module1 unde este partea de incarcare lista si macroul de "activare cautare incrementala":

Cod: Selectaţi tot

Public myCollection As New Collection
Sub LoadList()
    Dim oneCell As Range
    Dim oneString As Variant
     
    For Each oneCell In Range(Range("d1"), Range("d10").End(xlUp))
        On Error Resume Next
            myCollection.Add Item:=oneCell.Value, key:=oneCell.Value
        On Error GoTo 0
    Next oneCell
     
    With UserForm1.ListBox1
        For Each oneString In myCollection
            .AddItem oneString
        Next oneString
    End With

End Sub


Sub IncrementalSearch()
    LoadList
    UserForm1.TextBox1.Value = ""
    UserForm1.TextBox1.SetFocus
    UserForm1.Show
End Sub
Sper sa-ti foloseasca... ;)

L.E.: NOTA: Vedeti ca mai "incolo" gasiti o versiune actualizata si mai generica de cautare incrementala - versiunea initiala a ramas aici doar pentru "referinte"...
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Ultima oară modificat Mar Aug 17, 2010 6:14 pm de către Anonymous, modificat de 2 ori în total.
Motiv: Adaugare notificare pentru versiunea mai noua

radu_moflea
Mesaje: 286
Membru din: Mar Ian 19, 2010 7:36 pm
Localitate: Bucuresti

Re: Cautare in list

Mesaj de radu_moflea » Mar Feb 23, 2010 9:28 pm

Esti tare :D .
Daca vrei, poti sa-mi spui 2 cuv. despre acesta "cautare incrementala".

Multumesc.

radu_moflea
Mesaje: 286
Membru din: Mar Ian 19, 2010 7:36 pm
Localitate: Bucuresti

Re: Cautare in list

Mesaj de radu_moflea » Mar Feb 23, 2010 9:47 pm

Poate sa inlocuiasca un list din data validation, si sa fie si dinamica? :?:

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: Cautare in list

Mesaj de Dr.Windows » Mie Feb 24, 2010 1:34 pm

Sa inlocuiasca Data Validation sigur NU, asa cum a spus si Alexx, dar poate "dubla" data validation - mai exact folosit exact asa cum este modelul de mai sus poti ca pentru o celula sa ai data validation si optiunea "suplimentara" de "cautare incrementala" iar utilizatorul poate alege sa caute pana se plictiseste in lista lunga de la Data Validation sau apasa "combinatia magica" si poate cauta in ACEEASI lista putin mai repede...

La ce anume te referi cand spui ca vrei ca lista sa sa fie "dinamica"?... lista se incarca in baza unui range, care poate fi si unul "denumit" iar modificarile in lista se preiau imediat, sau mai exact la urmatoarea apelare a ferestrei asa ca si din punctul asta poate fi considerata o "lista dinamica".

Daca o vrei si mai dinamica, in sensul ca ai mai multe coloane cu Data Validation dar cu liste diferite, cred ca se poate modifica functia sa detecteze din ce range se face data validation pentru a incarca acel range...

Totul depinde de ce anume vrei sa faci mai exact... cum vrei sa o folosesti...

Avatar utilizator
cristi_lazarro
Mesaje: 841
Membru din: Mie Noi 04, 2009 5:57 pm

Re: Cautare in list

Mesaj de cristi_lazarro » Vin Apr 02, 2010 11:36 am

in 2007 cu ce combinatie de taste se activeaza fereastra?

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: Cautare in list

Mesaj de Dr.Windows » Vin Apr 02, 2010 11:46 am

cristi_lazarro scrie:in 2007 cu ce combinatie de taste se activeaza fereastra?
Pai asa cum scrie si mai sus - in exemplul meu se activeaza cu CTRL+I to poti sa atasezi macroul la ce combinatie vrei... :P

Avatar utilizator
cristi_lazarro
Mesaje: 841
Membru din: Mie Noi 04, 2009 5:57 pm

Re: Cautare in list

Mesaj de cristi_lazarro » Vin Apr 02, 2010 11:52 am

nu ma refer la macro-uri ci, la fereastra in care trebuie sa-mi introduc lista

cred ca de ceva nu ma prind.........asa e?

Scrie răspuns

Înapoi la “Intrebari despre Excel 2003”