Trova successivo



  • Trova successivo
    di alessia (utente non iscritto) data: 27/01/2014 11:03:45

    Buongiorno a tutti,
    Ho un piccolo problema che non riesco a risolvere e avrei bisogno di un Vostro aiuto che per voi esperti sicuramente sarà molto semplice..


    Allora.Se scrivo nella textbox di ricerca chiamata "TxtNome" posso effettuare una ricerca Cliente non necessariamente inserendo tutto il contenuto della cella es B2.
    Esempio: nella colonna B sono riportati i nomi e cognomi dei clienti. Inserendo questa istruzione If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then
    mi permette di inserire nel campo di ricerca anche solo il cognome "Rossi" non necessariamente tutto il contenuto della cella es. "Rossi Mario". Fin qui tutto bene.
    questo sotto è il codice in questione;

    Private Sub cmdIniziaRicerca_Click()

    Dim ctrl As Control
    Dim lCampo As Long
    Dim lRif As Long
    Dim c As Range
    Dim rng As Range
    Dim lUltRiga As Long

    lCampo = 0

    With Me

    With .frSelezionaCampo

    For Each ctrl In .Controls
    If ctrl.Value = True Then
    lCampo = Mid(ctrl.Name, _
    4, Len(ctrl.Name))
    End If
    Next

    End With

    If .txtRicerca <> "" And lCampo <> 0 Then

    lUltRiga = sh.Range( _
    "A" & Rows.Count).End(xlUp).Row
    Set rng = sh.Range("A2:E" & lUltRiga)

    For Each c In rng.Range( _
    Cells(1, lCampo), _
    Cells(lUltRiga, lCampo))
    'If c.Value = .txtRicerca.Text Then
    If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then ' effettua la ricerca del cognome/nome oppure del solo cognome

    lRif = 4 - lCampo
    '.txtID.Value = sh.Cells(c.Row, 1).Value
    .txtNome.Value = sh.Cells(c.Row, 2).Value
    .txtIndirizzo.Value = sh.Cells(c.Row, 3).Value
    .txtCivico.Value = sh.Cells(c.Row, 4).Value
    .txtComune.Value = sh.Cells(c.Row, 5).Value
    .txtProvincia.Value = sh.Cells(c.Row, 6).Value
    .txtTelefono.Value = sh.Cells(c.Row, 7).Value
    .txtCellulare.Value = sh.Cells(c.Row, 8).Value
    .txtEmail.Value = sh.Cells(c.Row, 9).Value
    .txtSito_Internet.Value = sh.Cells(c.Row, 10).Value
    .txtRuolo.Value = sh.Cells(c.Row, 11).Value
    .txtC_F.Value = sh.Cells(c.Row, 12).Value
    .txtReferente_1.Value = sh.Cells(c.Row, 13).Value
    .txtRecapito_1.Value = sh.Cells(c.Row, 14).Value
    .txtReferente_2.Value = sh.Cells(c.Row, 15).Value
    .txtRecapito_2.Value = sh.Cells(c.Row, 16).Value
    .txtReferente_3.Value = sh.Cells(c.Row, 17).Value
    .txtRecapito_3.Value = sh.Cells(c.Row, 18).Value
    .txtRagione_Sociale.Value = sh.Cells(c.Row, 19).Value
    .txtIndirizzo_2.Value = sh.Cells(c.Row, 20).Value
    .txtCivico_2.Value = sh.Cells(c.Row, 21).Value
    .txtComune_2.Value = sh.Cells(c.Row, 22).Value
    .txtProvincia_2.Value = sh.Cells(c.Row, 23).Value
    .txtTelefono_2.Value = sh.Cells(c.Row, 24).Value
    .txtCellulare_2.Value = sh.Cells(c.Row, 25).Value
    '.txtEmail_2.Value = sh.Cells(c.Row, 26).Value
    .txtPartitaIva.Value = sh.Cells(c.Row, 27).Value
    .txtServizio.Value = sh.Cells(c.Row, 28).Value
    .txtDurata_contratto.Value = sh.Cells(c.Row, 29).Value
    .txtDatacontratto.Value = sh.Cells(c.Row, 30).Value
    .txtDatacessazione.Value = sh.Cells(c.Row, 31).Value
    .txtRinnovocontratto.Value = sh.Cells(c.Row, 32).Value
    .txtPassword.Value = sh.Cells(c.Row, 33).Value
    .txtNote.Value = sh.Cells(c.Row, 34).Value
    .txtFatturazione.Value = sh.Cells(c.Row, 35).Value
    lRigaAttiva = c.Row
    lRigaValoreTrovato = c.Row
    Exit For
    End If
    Next
    Else
    msgbox "Nessun dato inserito o nessun campo di ricerca selezionato.", _
    vbCritical, "Attenzione..."


    End If

    End With

    Set ctrl = Nothing
    Set c = Nothing
    Set rng = Nothing

    End Sub



    Il problema è questo:
    Ho un tasto che mi trova il risulato successivo "Trova Successivo" ma questo funziona solo se nel campo di Ricerca io scrivo il cognome e nome.
    Cerco di spiegarmi meglio. Se effettuo una ricerca in questo modo es. "Rossi Mario" mi trova il primo risultato e pigiando sul Tasto "Trova Successivo" mi trova l'altro/i Rossi Mario.
    Se invece nella ricerca scrivo solo il cognome "Rossi" la ricerca viene fatta regolarmente ma quando pigio il tasto "Trova Successivo" non va avanti.
    Invece deve andare avanti dandomi gli altri clienti "Rossi". es. Rossi Mario, Rossi Michele ecc....

    Sto facendo varie prove ma non ne esco fuori. Cosa mi sfugge? Cosa Sbaglio?
    qui sotto inserisco il codice del trova successivo dove ho il problema.

    Private Sub cmdTrovaSuccessivo_Click()

    Dim ctrl As Control
    Dim lCampo As Long
    Dim lRif As Long
    Dim c As Range
    Dim rng As Range
    Dim lUltRiga As Long

    lCampo = 0

    With Me

    With .frSelezionaCampo

    For Each ctrl In .Controls
    If ctrl.Value = True Then
    lCampo = Mid(ctrl.Name, _
    4, Len(ctrl.Name))
    End If
    Next

    End With

    If .txtRicerca <> "" And lCampo <> 0 Then

    lUltRiga = sh.Range( _
    "A" & Rows.Count).End(xlUp).Row
    Set rng = sh.Range("A" & _
    lRigaValoreTrovato + 1 _
    & ":C" & lUltRiga)

    For Each c In rng.Range( _
    Cells(1, lCampo), _
    Cells(lUltRiga, lCampo))
    ' If c.Value = .txtRicerca.Text Then
    'If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then
    If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then

    lRif = 4 - lCampo
    '.txtID.Value = sh.Cells(c.Row, 1).Value
    .txtNome.Value = sh.Cells(c.Row, 2).Value '& "*" & txtNome & "*" una delle prove che sto facendo
    .txtIndirizzo.Value = sh.Cells(c.Row, 3).Value
    .txtCivico.Value = sh.Cells(c.Row, 4).Value
    .txtComune.Value = sh.Cells(c.Row, 5).Value
    .txtProvincia.Value = sh.Cells(c.Row, 6).Value
    .txtTelefono.Value = sh.Cells(c.Row, 7).Value
    .txtCellulare.Value = sh.Cells(c.Row, 8).Value
    .txtEmail.Value = sh.Cells(c.Row, 9).Value
    .txtSito_Internet.Value = sh.Cells(c.Row, 10).Value
    .txtRuolo.Value = sh.Cells(c.Row, 11).Value
    .txtC_F.Value = sh.Cells(c.Row, 12).Value
    .txtReferente_1.Value = sh.Cells(c.Row, 13).Value
    .txtRecapito_1.Value = sh.Cells(c.Row, 14).Value
    .txtReferente_2.Value = sh.Cells(c.Row, 15).Value
    .txtRecapito_2.Value = sh.Cells(c.Row, 16).Value
    .txtReferente_3.Value = sh.Cells(c.Row, 17).Value
    .txtRecapito_3.Value = sh.Cells(c.Row, 18).Value
    .txtRagione_Sociale.Value = sh.Cells(c.Row, 19).Value
    .txtIndirizzo_2.Value = sh.Cells(c.Row, 20).Value
    .txtCivico_2.Value = sh.Cells(c.Row, 21).Value
    .txtComune_2.Value = sh.Cells(c.Row, 22).Value
    .txtProvincia_2.Value = sh.Cells(c.Row, 23).Value
    .txtTelefono_2.Value = sh.Cells(c.Row, 24).Value
    .txtCellulare_2.Value = sh.Cells(c.Row, 25).Value
    '.txtEmail_2.Value = sh.Cells(c.Row, 26).Value
    .txtPartitaIva.Value = sh.Cells(c.Row, 27).Value
    .txtServizio.Value = sh.Cells(c.Row, 28).Value
    .txtDurata_contratto.Value = sh.Cells(c.Row, 29).Value
    .txtDatacontratto.Value = sh.Cells(c.Row, 30).Value
    .txtDatacessazione.Value = sh.Cells(c.Row, 31).Value
    .txtRinnovocontratto.Value = sh.Cells(c.Row, 32).Value
    .txtPassword.Value = sh.Cells(c.Row, 33).Value
    .txtNote.Value = sh.Cells(c.Row, 34).Value
    .txtFatturazione.Value = sh.Cells(c.Row, 35).Value
    lRigaAttiva = c.Row
    lRigaValoreTrovato = c.Row
    Exit For
    End If
    Next
    Else
    msgbox "Nessun dato inserito o nessun campo di ricerca selezionato.", _
    vbCritical, "Attenzione..."
    End If

    End With

    Set ctrl = Nothing
    Set c = Nothing
    Set rng = Nothing

    End Sub

    Grazie a tutti anticipatamente....


  • scossa
    di scossa data: 27/01/2014 11:34:27

    questa istruzione:

    If c.Value Like "*" & txtNome & "*" & txtNome & "*"

    non ha molto senso, a runtime sarebbe:

    If c.Value Like "*Rossi*Rossi*"



  • di alessia (utente non iscritto) data: 27/01/2014 11:56:19

    Ciao Scossa,
    Grazie per la tua risposta.
    Allora, questa riga inserita nel primo codice di ricerca;

    If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then

    mi effettua la ricerca voluta. Posso effettuare la ricerca sia per cognome/nome oppure inserendo solo il cogmone.

    Io ciò che non riesco a fare e nel secondo codice inserito nel post, dove mi deve trovare l'altro Rossi. Chiaramente Rossi è solo un esempio ma di cliente sono tanti. Quindi non posso inserire la ricerca mirata a Rossi Mario.
    Ritengo che sia una piccola modifica nel secondo codice che a me sfugge.
    Il secondo codice deve funzionare dandomi altro risultato dello stesso cognome.
    Grazie.....



  • di scossa data: 27/01/2014 12:01:00

    Ciao,

    cit.: "If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then
    mi effettua la ricerca voluta. Posso effettuare la ricerca sia per cognome/nome oppure inserendo solo il cogmone."

    Come fa a cercare DUE valori diversi se metti due volte la STESSA variabile (txtNome)??

    Comunque ti consiglio di alleghera il file, altrimenti credo nessuno si metta a crearlo ex-novo per aiutarti .....



  • di scossa data: 27/01/2014 12:09:50

    errata: alleghera
    corrige: allegare



  • di alessia (utente non iscritto) data: 27/01/2014 12:15:30

    Ti sembrerà strano, ma dalle tante prove che ho fatto funziona. Il solo problema è nella seconda fase "trova successivo".
    Il file è tutto pieno di dati. Le userform lo stesso . Un casino.... cancellare tutto..... Se proprio non è possibile vedo quello che posso fare....
    Vedo se trovo un vecchio file..... Grazie Scossa. Ti faccio sapere al più presto
    By Alessia



  • di alessia (utente non iscritto) data: 27/01/2014 12:41:35

    Ciao Scossa,
    Ti ho allegato il file. Come potrai notare, se effettui una ricerca per nome e cognome
    il tasto trova successivo Funziona. Se invece digiti solo il cognome, trovato il primo, il tasto trova successivo non va avanti.
    Username/Password per accedere alla rubrica è la stessa: ale
    per entrare nel foglio del Database è : alessia
    Grazie



  • di scossa data: 27/01/2014 13:51:56

    cit. alessia: "Ti sembrerà strano, ma dalle tante prove che ho fatto funziona."

    Io non ho detto che non funziona, ho detto che non ha senso, visto che "*" & txtNome & "*" è più che sufficiente (tutto quello che segue il secondo asterisco viene ignorato).

    Riguardo a "Come fa a cercare DUE valori diversi se metti due volte la STESSA variabile (txtNome)??"
    credevo che utilizzassi (come sarebbe d'obbligo in un archivio fatto bene) due campi separati per cognome e nome.

    Ora veniamo alle tirate di orecchie:

    Private Sub CommandButton1_Click()
    Application.Quit
    End Sub

    Private Sub CommandButton3_Click()
    Application.Quit
    End Sub

    L'istruzione Application.Quit andrebbe eliminata dal VBA ma, sembra impossibile, è invece l'istruzione che più piace a chi comincia ad usare il VBA (evidentemente da un senso di potere!).
    Se il file è per tuo uso personale puoi fare quello che vuoi, ma se lo dai ad altri per quale motivo ti arroghi il diritto di far chiudere tutto Excel anziché limitatri a chiudere il tuo file? Chi lo usa potrebbe avere un altro file aperti su cui ha perso molto tempo, e se sbaglia a rispondere all'alert si trova ad aver perso tutto il SUO lavoro per un tuo sfizio!!!

    Seconda tirata di orecchie: ho guardato il codice molto superficialmente, ma mi spieghi la necessità di eseguire OGNI SECONDO la sub ColorText()?

    Infine la soluzione al tuo quesito:


     
    In Private Sub cmdTrovaSuccessivo_Click() sostituisci
    
    If c.Value =  .txtRicerca.Text  Then
    
    con
    
    If c.Value Like "*" & .txtRicerca.Text & "*" Then



  • di alessia (utente non iscritto) data: 27/01/2014 20:45:14

    Ciao Scossa, hai ragione sono andata in panico.
    Infatti, riflettendo sarebbe stato meglio dividere in celle differenti il Cognome e Nome.
    Per le tirate di orecchie ci sono tutte...ahahahahah, me le prendo.
    Per quanto riguarda la Application.quit hai pienamente ragione.
    Attualmente questo file lo sto usando solo io. In seguito lo userà mio padre ed un dipendente.
    Infatti, succede molto spesso di avere altri file excel aperti.
    Ho provato ad inserire questa riga per la chiusura: ActiveWorkbook.Close SaveChanges:=False
    l'unica cosa che mi rimane aperto Excel vuoto. Direi che è un pò antipatico andarlo a chiudere manualmente.
    Accetto tuoi consigli.
    Per ultimo quesito credo che tu faccia riferimento alla TextBox chiamata "txtPassword" il valore all'interno
    di questa textbox mi lampeggia, il perchè? deve attirare per primo la mia attenzione.
    Accetto tuoi consigli.
    Grazie per il tempo che mi stai dedicando.
    P.s. vedi avevo la soluzione sotto gli okki ma non la vedevo. Grazie a te ho risolto il problema per il trova successivo.
    By Alessia



  • di scossa data: 27/01/2014 21:44:05

    cit.: "Ho provato ad inserire questa riga per la chiusura: ActiveWorkbook.Close SaveChanges:=False
    l'unica cosa che mi rimane aperto Excel vuoto. Direi che è un pò antipatico andarlo a chiudere manualmente."
    A parte che è meglio usare
    ThisWorkbook.Close SaveChanges:=False

    non devi pensare che si utilizzi Excel solo con il tuo file, ma che normalmente, chi usa excel per lavoro, lo apre la mattina alle 8 e lo chiede a fine giornata lavorativa ......

    cit.:"Per ultimo quesito credo che tu faccia riferimento alla TextBox chiamata "txtPassword" il valore all'interno
    di questa textbox mi lampeggia, il perchè? deve attirare per primo la mia attenzione."
    Ripeto quanto già espresso: se certe "ca..vola..tine" le fai sul tuo pc sono affari tuoi, ma se il file lo dovesse usare uno che col pc ci deve lavorare, ti fischierebbero le orecchie per tutto il giorno.... se vuoi che attiri la tua attenzione mettici un bello sfondo giallo fisso, che le cose lampeggianti dopo 4 secondi danno solo fastidio.




  • di alessia (utente non iscritto) data: 28/01/2014 12:26:31

    Ciao Scossa,
    Ho usato il tuoi consigli effettivamente avevi ragione... banale dirlo.....
    1- ThisWorkbook.Close SaveChanges:=False
    2- ho eliminato il lampeggiare della Textbox
    Grazie 1000 per il tuo preziosissimo aiuto.....
    Non saprei se chiederti o meno un altro aiuto, oppure aprire una nuova discussione. Fammi sapere grazie.



  • di scossa (utente non iscritto) data: 28/01/2014 13:39:15

    cit. alessia: "Non saprei se chiederti o meno un altro aiuto, oppure aprire una nuova discussione. Fammi sapere grazie."

    Questo è un forum pubblico, l'aiuto si chiede a tutti e non ad un utente specifico; eviterai di precluderti l'aiuto di altri utenti e risulterai anche più "simpatica" (personalmente trovo fastidiose le richieste rivolte al singolo - che sia io od un altro - e credo che questo valga anche per gli altri "volontari" del forum).

    Detto questo è più corretto aprire una nuova discussione e, su questa, spuntare la casella "discussione risolta".



  • di alessia (utente non iscritto) data: 28/01/2014 14:08:20

    Grazie Scossa,
    non sapevo come comportarmi.
    Chiedo scusa a tutti se ho sbagliato.
    Grazie 1000