trova



  • trova
    di mandoz (utente non iscritto) data: 22/11/2014 09:36:15

    un saluto a tutti

    premesso che il comando trova funziona egregiamente, ecco la mia richiesta.
    per semplicità mi servirebbe un codicino che, legato ad un pulsante, mi aprisse una finestra dove inserire il testo da ricercare (cerca in cartella di lavoro).
    la ricerca dovrebbe ignorare maiuscolo/minuscolo e molto importante, ricercare anche parziali di testo.
    es. in una cella ho il testo 2014-025 se cerco 14-0 dovrebbe trovarlo.

    se il testo da ricercare non esiste ..... mi risponda quello che volete voi.

    la ricerca dovrebbe lavorare sulle colonne A - B e se possibile, sulle linguette dei fogli.

    grazie.



  • di Lucas87 data: 22/11/2014 10:56:56

    Ciao
    Prova questo
     
    valo = InputBox("Cerca in cartella di lavoro:")
    If valo <> "" Then
        For Each sh In Worksheets
            If InStr(1, sh.Name, valo, vbTextCompare) > 0 Then
                sh.Select
                MsgBox "Il valore è stato trovato nell'etichetta del foglio."
                Exit Sub
            End If
            Set fin = sh.Range("a:b").Find(What:=valo, LookAt:=xlPart, MatchCase:=False)
            If Not fin Is Nothing Then
                sh.Select
                fin.Select
                MsgBox "Il valore è stato trovato all'interno del foglio."
                Exit Sub
            End If
        Next
    End If



  • di Lucas87 data: 22/11/2014 13:37:11

    Questo è migliorato...continua la ricerca fino a quando non si arriva al risulto voluto
     
    valo = InputBox("Cerca in cartella di lavoro:")
    If valo <> "" Then
        For Each sh In Worksheets
            If InStr(1, sh.Name, valo, vbTextCompare) > 0 Then
                sh.Select
                MsgBox "Il valore è stato trovato nell'etichetta del foglio."
                Exit Sub
            End If
            Set fin = sh.Range("a:b").Find(What:=valo, LookAt:=xlPart, MatchCase:=False)
            If Not fin Is Nothing Then
                Do
                    sh.Select
                    fin.Select
                    If MsgBox("Valore trovato all'interno del foglio." & vbCrLf & "Continuare la ricerca?", vbYesNo) = vbNo Then
                        Exit Sub
                    End If
                    Set fin = sh.Range("a:b").FindNext(fin)
                Loop
                Exit Sub
            End If
        Next
        MsgBox "Valore non trovato."
    End If



  • di mandoz (utente non iscritto) data: 22/11/2014 21:32:49

    grazie lucas.
    funziona alla grande. ho un'altra richiesta.
    se ho più codici all'interno della cartella di lavoro non me li trova..... o più correttamente trova solo il primo
    domanda:
    è possibile far si che la ricerca prosegua su tutti i fogli della cartella di lavoro?



  • di Lucas87 data: 23/11/2014 14:06:30

    Ciao
    Con l'ultima modifica non mi sono accorto che la ricerca veniva fatta in un solo foglio.
    Prova il codice sotto, dovrebbe andare bene
    Avvisa se il risultato si trova sull'etichetta o sul foglio e chiede se continuare o meno.
    Ora termina quando raggiunge l'ultimo foglio; si può fare in modo che continui la ricerca fino a quando non si indica di terminarla.
     
    valo = InputBox("Cerca in cartella di lavoro:")
    If valo <> "" Then
        For Each sh In Worksheets
            If InStr(1, sh.Name, valo, vbTextCompare) > 0 Then
                sh.Select
                cont = True
                If MsgBox("Il valore è stato trovato nell'etichetta del foglio." & vbCrLf & "Continuare la ricerca?", vbYesNo) = vbNo Then
                    Exit Sub
                End If
            End If
            Set fin = sh.Range("a:b").Find(what:=valo, lookat:=xlPart, MatchCase:=False)
            If Not fin Is Nothing Then
                firstaddress = fin.Address
                cont = True
                Do
                    sh.Select
                    fin.Select
                    If MsgBox("Valore trovato all'interno del foglio." & vbCrLf & "Continuare la ricerca?", vbYesNo) = vbNo Then
                        Exit Sub
                    End If
                    Set fin = sh.Range("a:b").FindNext(fin)
                Loop While Not fin Is Nothing And fin.Address <> firstaddress
            End If
        Next
        If cont = True Then
            MsgBox "Ricerca terminata."
        Else
            MsgBox "Valore non trovato."
        End If
    End If



  • di mandoz (utente non iscritto) data: 24/11/2014 21:06:20

    Eccezionale . Grandissimo
    grazie. tutto ok.

    ancora una domanda... se in futuro volessi modificare le colonne dove ricercare in_____ cerca in tute le colonne____ come posso variare la stringa



  • di Lucas87 data: 24/11/2014 21:08:23

    Sostituendo
    Range("a:b")
    con
    Cells



  • di mandoz (utente non iscritto) data: 24/11/2014 21:11:48

    ri_grazie

    Ciao