Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Ricerca testo su "foglio2" con risultato su "foglio1" - Excel 2010

  1. #1
    davidorix non è in linea Novello
    Ciao a tutti esperti, maghi, stregoni e non di Excel.
    Come da titolo molto stringato.. devo realizzare uno strumento di ricerca all'interno di Excel.
    Ho 2 fogli di lavoro. Nel primo, c'è un pulsante "CERCA" e nel secondo foglio determinati dati suddivisi in NOME COGNOME etc etc.
    Nel forum, avevo trovato una macro (di seguito)

    Sub CercaTesto()
    Dim trovato As Boolean
    Dim I As Long

    TextToFind = InputBox("Cosa vuoi cercare?")

    For I = 1 To Sheets.Count
    Set ricerca = Sheets(I).Cells.Find(TextToFind, LookIn:=xlValues, LookAT:=xlWhole)
    If Not ricerca Is Nothing Then
    Sheets(I).Select
    ricerca.Activate
    trovato = True
    End If
    Next I
    If trovato = False Then
    MsgBox "Testo non trovato!", vbExclamation
    End If

    End Sub
    Questa macro funziona perfettamente, ricerca qualsiasi cosa tu immetti. Però c'è un problema: se, per esempio, tra i dati cliente ci sono due "Andrea", la macro te ne seleziona solamente una.
    Io vorrei che, dopo aver effettuato la ricerca, il risultato compaia sotto il pulsante cerca, con tutti i record; se ci sono 3 Andrea appariranno 3 Andrea e così via discorrendo.
    Io non sono molto esperto di Excel e spero di essere stato abbastanza chiaro.

    Grazie
    Ultima modifica di davidorix; 21-12-2012 16:25 
    ℹ️ Leggi di più su davidorix ...

  2. #2
    GiuseppeMN non è in linea Scribacchino
    Buona sera, davidorix;
    personalmente ricordo di aver risolto, a suo tempo, con un contatore e una matrice del tipo: Public Stringa(NumeroRicorrenze, PosizioneRicorrenza, Fogli_Lavoro).
    Dove NumeroRicorrenze e PosizioneRicorrenza avranno lo stesso valore (valore presunto per eccesso del numero di ricorrenze ipotizzate nella ricerca) e Fogli_Lavoro sarà il numero di Fogli nei quali eseguire la ricerca.
    In questo modo si riesce ad avere nel FoglioRicerca il seguente prospetto:
    Colonna "A" → Numero progressivo dei Record trovati
    Colonna "B" → Posizione del Record nel Foglio di lavoro
    Colonna "C" → Nome del foglio di lavoro

    Nel caso Tu ritenga possa essere una soluzione accettabile per le Tue esigenze, possiamo vedere assieme come strutturare il codice VBA.

    A disposizione.

    Buona serata.

    Giuseppe

  3. #3
    GiuseppeMN non è in linea Scribacchino
    Buona sera, davidorix;
    la macro che hai postato funziona perfettamente, come hai giustamente detto Tu.
    Rimane il problema delle ricorrenze; per ricorrenze intendo i Record che, all'interno dello stesso Foglio di Lavoro, contengono lo stesso valore.
    Quello che proponevo era appunto la possibilità di avere l'elenco di tutti i Record a prescindere dal fatto che siano univoci o meno.
    Proponevo inoltre di avere il riferimento della posizione di ogni Record trovato all'interno dei vari Fogli di Lavoro; questo permette di individuare più facilmente il Record nel proprio Foglio di Lavoro.

    Dimentico spesso di precisare che utilizzo Excel 2000, ma questo non dovrebbe essere un problema insormontabile.

    A disposizione.

    Giuseppe

  4. #4
    davidorix non è in linea Novello
    OK. Adesso ho capito cosa intendevi
    Non sono per niente esperto di VBA, ma almeno adesso so cosa devo cercare
    In questo caso, devo fare un'altra macro, o scrivere tutto in quella postata precedentemente?
    ℹ️ Leggi di più su davidorix ...

  5. #5
    GiuseppeMN non è in linea Scribacchino
    Il codice che avevo impostato per le mie esigenze era piuttosto diverso.
    Per strutturare la matrice aiuterebbe capire su quanti fogli impostare la ricerca; per le ricorrenze possiamo pensare ad un valore di 50 (50 nominativi uguali per ogni foglio ritengo sia ragionevole). Considera che i valori della matrice possono essere tranquillamente modificati in corso d'opera. Considera anche che più i valori della matrice sono piccoli
    più si risparmiano risorse.

    Se ti è possibile fammi sapere su quanti fogli desideri effettuare la ricerca.

    Io avevo previsto un Foglio Cerca dedicato all'elenco dei Record trovati.

    A disposizione.

    Giuseppe

  6. #6
    davidorix non è in linea Novello
    Io ho 2 fogli, quello principale e quello con i dati. Ma da quello che ho capito questa macro cerca in tutto il progetto di lavoro. Il progetto racchiude dati in costante modifica cioè, vengono aggiunti di continuo clienti.
    ℹ️ Leggi di più su davidorix ...

  7. #7
    GiuseppeMN non è in linea Scribacchino
    Sono d'accordo, la ricerca viene eseguita su tutti i fogli e su tutta l'area di lavoro di ognuno.
    Il numero dei fogli mi serviva solo per evitare di strutturare la matrice in modo eccessivo.

    Domani mattina sono impegnato, vedo di darti qualche indicazione per impostare il codice entro questa sera o, al massimo, entro domani.

    Buona serata.

    Giuseppe

  8. #8
    davidorix non è in linea Novello
    Giuseppe, stasera è venerdì e domani è sabato. Non ti mette a lavorà stasera e non ti preoccupare Tu sei gentilissimo ma non voglio obbligarti a stare a casa
    ℹ️ Leggi di più su davidorix ...

  9. #9
    GiuseppeMN non è in linea Scribacchino
    Buona sera davidorix;
    ho cercato di semplificare il più possibile; per questo motivo ho ritenuto opportuno modificare il mio codice iniziale.
    Considerando che il problema, nel Tuo caso, è molto più semplice rispetto alla mio vecchio problema, credo che l'uso della matrice non sia più necessario.
    Risparmiamo risorse ottenendo lo stesso scopo.
    Il codice che Ti propongo è il seguente:

    Option Explicit
    --------------------------------------------------------------------------------------------------
    Sub Trova()
    Dim I As Byte, Z As Byte
    Dim TextToFind As String, Zona As String
    
    Application.ScreenUpdating = False
        Zona = "A1:Z50000"  '   Definisce la zona di ricerca
             Z = 0
        
        TextToFind = InputBox("Cosa vuoi cercare?")
        If TextToFind = "" Then End
        
        Sheets("Cerca").Select
        Cells.ClearContents
        Range("D3").Select
        Cells(1, 1) = "La ricerca di ''" & TextToFind & "'', ha dato i seguenti risultati:"
        Cells(2, 1) = "Rec"
        Cells(2, 2) = "Posizione"
        Cells(2, 3) = "Foglio di lavoro"
        Cells(2, 4) = "Record"
        For I = 1 To Sheets.Count - 1
            Sheets(I).Select
            Range(Zona).Interior.ColorIndex = xlNone
            With ActiveSheet.Range(Zona)
                Set C = .Find(TextToFind, LookIn:=xlValues)
                If Not C Is Nothing Then
                    firstAddress = C.Address
                    Do
                        C.Select
                        Z = Z + 1
                        Range("Cerca!A" & Z + 2) = Z
                        Range("Cerca!B" & Z + 2) = ActiveCell.Address
                        Range("Cerca!C" & Z + 2) = Sheets(I).Name
                        Range("Cerca!D" & Z + 2) = ActiveCell                    
                        Set C = .FindNext(C)
                    Loop While Not C Is Nothing And C.Address <> firstAddress
                End If
            End With
        Next I
    Application.ScreenUpdating = True
        Sheets("Cerca").Select
        Range("E3").Select
    End Sub
    
    Come puoi vedere, ho aggiunto un campo, la colonna "D", questo perchè l'ImputBox accetta i caratteri jolly.
    Mi spiego meglio, se la stringa da ricercare è, ad esempio "Andre*" verranno selezionati tutti i Record con desinenza "Andre"; quindi, oltre ad Andrea potrà essere selezionato Andreina piuttosto che Andreatta. Ovviamente se la Tua stringa sarà Andrea, verranno selezionati solo i record corrispondenti ad Andrea.

    Come puoi notare ho definito l'area di ricerca (Zona) compresa tra A1 e Z50000; il mio consiglio è quello di valutare se questa zona è congrua o ridondate.
    Ovviamente più la zona è circoscritta, più sarà veloce l'esecuzione. Considera comunque che la ricerca in queste condizioni mi ha richiesto tre secondi e ha selezione più di trenta record nei tre Fogli di Lavoro.

    Ho testato il codice con tre Fogli più il Foglio di riepilogo "Cerca" dove vengono registrati tutti i Record trovati.

    Non mi voglio dilungare nello specificare ogni riga del Codice; se lo ritieni opportuno sono comque a disposizione.

    Buona serata.

    Giuseppe

  10. #10
    davidorix non è in linea Novello
    Buongiorno Giuseppe.
    La sto testando in questo momento. Ti faccio sapere appena fatto

    GRAZIE MILLE ))
    ℹ️ Leggi di più su davidorix ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Risposte: 1
    Ultimo Post: 20-07-2020, 16:26
  2. Risolto: LibreOffice "BASE" - Connessione a db MYSQL "drive JDBC non caricati" non li vede
    Da CMCS nel forum LibreOffice, OpenOffice e altro
    Risposte: 5
    Ultimo Post: 30-07-2014, 12:45
  3. Risposte: 5
    Ultimo Post: 03-04-2014, 18:05
  4. [Excel] Macro aggiungi testo "xxx" in cella "A1"
    Da dighitosz nel forum Microsoft Excel
    Risposte: 3
    Ultimo Post: 26-02-2013, 08:40
  5. togliere delle fastidiose """""""
    Da cubateam nel forum Microsoft Word
    Risposte: 10
    Ultimo Post: 21-06-2007, 20:06