Excel Forum Per condividere esperienze su Microsoft Excel

Userform cerca testo in tutti i fogli

  • Messaggi
  • OFFLINE
    linolene
    Post: 2
    Registrato il: 21/01/2017
    Città: ARTENA
    Età: 52
    Utente Junior
    2016
    00 24/01/2019 11:42
    Buongiorno a tutti e grazie a colui che molto probabilmente riderà sotto i baffi, nel caso li abbia.
    Il fatto è il seguente; ho assemblato o meglio scopiazzato una userform la quale cerca un valore in tutti i fogli, restituisce l'indicazione di dove è il valore e ti ci porta sopra.
    il fatto è che non ha delle variabili ossia se inserisco bordolese mi da tutte le celle che contengono bordolese, ma se inserisco bordolese 75 (per creare una ricerca più mirata non parte la ricerca.
    Altra cosa è che individuata la cella di destinazione vorrei che si evidenziasse (in giallo) non che cambiasse il colore del fondo, per trovarla subito.
    Grazie ancore se qualcuno vorrà aiutarmi, dato che sto impazzendo.
    allego file alleggerito.
  • OFFLINE
    dodo47
    Post: 2.109
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 24/01/2019 13:31
    ciao
    dov'è bordolese 75 nel tuo documento ?



    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    linolene
    Post: 2
    Registrato il: 21/01/2017
    Città: ARTENA
    Età: 52
    Utente Junior
    2016
    00 24/01/2019 13:50
    Ciao, per esempio, la cella B11:

    VNSBORDSTDE 750;TS-;MB-;VI- BORDOLESE ECOVA / CC.750 T.SUGH. MB

    se io scrivo bordolese lui trova una serie di bordolesi,

    se io scrivessi bordolese 75 (in realta CC.750)
    lui non trova nulla

    cioè non accetta gli spazzi e non è una ricerca intuitiva ma matematica ... mi sono espresso bene?

  • OFFLINE
    dodo47
    Post: 2.110
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 24/01/2019 16:25
    ciao
    si, ti sei espresso bene. Il problema risiede nella modalità di ricerca che la macro adotta, pertanto i tuoi "spazi" non vengono considerati come "qualsiasi cosa ci sia tra bordolese e 75", ma "bordolese spazio 75".

    Prova ad utilizzare la seguente modifica:
    (per quanto riguarda l'evidenziazione spiega meglio cosa vuoi, non ho capito)
    saluti

    Private Sub Cerca_Click()
    
        Dim i As Long
        Dim testo As String
        Dim a As Integer
        Dim x As Long
        Dim y As Long
        Dim uriga As Integer
        Dim ucolonna As Integer
        Dim mTxt As Variant
        Application.ScreenUpdating = False
    
        ListBox1.Clear
        testo = ""
        mTxt = Split(TextBox1, " ")
        For i = 0 To UBound(mTxt)
            testo = testo & "*" & mTxt(i)
        Next i
        testo = testo & "*"
        a = 0
    
        For i = 1 To Worksheets.Count
    
            With Worksheets(i).UsedRange
                uriga = .Rows.Count + .Row - 1
                ucolonna = .Columns.Count + .Column - 1
            End With
    
            For x = 1 To uriga
                For y = 1 To ucolonna
                    If Worksheets(i).Cells(x, y) Like testo Then
                        ListBox1.AddItem Sheets(i).Name
                        ListBox1.List(a, 1) = Sheets(i).Cells(x, y).Row
                        ListBox1.List(a, 2) = Sheets(i).Cells(x, y).Column
                        ListBox1.List(a, 3) = Sheets(i).Cells(x, y).Value
                        a = a + 1
                    End If
                Next y
            Next x
        Next i
    
        Application.ScreenUpdating = True
    
    End Sub



    [Modificato da dodo47 24/01/2019 16:27]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    linolene
    Post: 3
    Registrato il: 21/01/2017
    Città: ARTENA
    Età: 52
    Utente Junior
    2016
    00 24/01/2019 16:36
    Grazie Dodo47 per il tuo aiuto,
    ma ho modificato la sub nell'userform e non trova nulla!
    ossia il codice è:

    Private Sub Cerca_Click()

    Dim i As Long
    Dim testo As String
    Dim a As Integer
    Dim x As Long
    Dim y As Long
    Dim uriga As Integer
    Dim ucolonna As Integer
    Dim mTxt As Variant
    Application.ScreenUpdating = False

    ListBox1.Clear
    testo = ""
    mTxt = Split(TextBox1, " ")
    For i = 0 To UBound(mTxt)
    testo = testo & "*" & mTxt(i)
    Next i
    testo = testo & "*"
    a = 0

    For i = 1 To Worksheets.Count

    With Worksheets(i).UsedRange
    uriga = .Rows.Count + .Row - 1
    ucolonna = .Columns.Count + .Column - 1
    End With

    For x = 1 To uriga
    For y = 1 To ucolonna
    If Worksheets(i).Cells(x, y) Like testo Then
    ListBox1.AddItem Sheets(i).Name
    ListBox1.List(a, 1) = Sheets(i).Cells(x, y).Row
    ListBox1.List(a, 2) = Sheets(i).Cells(x, y).Column
    ListBox1.List(a, 3) = Sheets(i).Cells(x, y).Value
    a = a + 1
    End If
    Next y
    Next x
    Next i

    Application.ScreenUpdating = True

    End Sub

    Private Sub CommandButton1_Click()

    ListBox1.Clear
    TextBox1 = ""
    TextBox1.SetFocus

    End Sub

    Private Sub Fine_Click()

    Unload UsrCercaValori

    End Sub

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

    Dim a As Integer
    Dim fog As String
    Dim rig As Long
    Dim col As Long

    a = ListBox1.ListIndex
    fog = ListBox1.List(a, 0)
    rig = ListBox1.List(a, 1)
    col = ListBox1.List(a, 2)
    Sheets(fog).Activate
    ActiveSheet.Cells(rig, col).Select
    Cancel = True
    Unload UsrCercaValori


    End Sub

    Private Sub ListBox2_Click()

    End Sub

    Private Sub UserForm_Initialize()

    ListBox2.ColumnHeads = False
    ListBox2.RowSource = ("XFA1:XFD1")

    End Sub

    -- non mi gira!
    dove sbaglio?
  • OFFLINE
    linolene
    Post: 4
    Registrato il: 21/01/2017
    Città: ARTENA
    Età: 52
    Utente Junior
    2016
    00 24/01/2019 16:38
    per quanto riguarda l'altro aspetto, quando doppio clic sul risultato all'interno della listbox, quindi mi porta nel foglio nella cella da me ricercata, vorrei evidenziarla (ho problemi con la vista). Grazie ancora
  • OFFLINE
    linolene
    Post: 5
    Registrato il: 21/01/2017
    Città: ARTENA
    Età: 52
    Utente Junior
    2016
    00 24/01/2019 16:50
    Fermi tutti, evidentemente avevo commesso un errore, Funziona!
    Grazie Dodo47! se mi risolvi di evidenziare la cella di destinazione io sto a posto... grazie ancora
  • OFFLINE
    dodo47
    Post: 2.111
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 24/01/2019 18:33
    Re:
    linolene, 24/01/2019 16.38:

    per quanto riguarda l'altro aspetto, quando doppio clic sul risultato all'interno della listbox, quindi mi porta nel foglio nella cella da me ricercata, vorrei evidenziarla (ho problemi con la vista). Grazie ancora



    Si, ma hai detto:
    ..."vorrei che si evidenziasse (in giallo) non che cambiasse il colore del fondo....

    quindi cosa vuoi che avvega?, si deve colorare il testo in giallo?? Ma sarà ancon meno leggibile (a mio avviso)

    saluti




    [Modificato da dodo47 24/01/2019 18:34]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    linolene
    Post: 6
    Registrato il: 21/01/2017
    Città: ARTENA
    Età: 52
    Utente Junior
    2016
    00 24/01/2019 19:03
    chiarisco, io ho problemi di vista, quando clicco sulla riga dentro la ListBox vengo dirottato nella cella corrispondente. ora proprio perchè non ci vedo bene mi perdo la cella dove sono stato dirottato, in quanto poco visibile:
    cosa si può fare per evidenziare questa cella? o riga!
    in modo che subito la riconosco!
    Grazie per la pazienza
  • OFFLINE
    dodo47
    Post: 2.112
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 24/01/2019 20:12
    ciao
    tu hai detto di non cambiare il colore di sfondo.

    Quindi se escludiamo questo, oppure la bordatura dell'intera riga, non saprei come altro evidenziare la riga/celle.

    Se aumentiamo il carattere, si vede meglio ma si rischia che il testo della cella di cui si aumenta il carattere, vada a capo, imbrogliando ancor più la faccenda.

    Tieni presente una cosa: se optiamo per il colore di sfondo, prima si devono cancellare tutti i colori che eventualmente esistono nel foglio e poi si evidenzia la sola riga interessata che pertanto sarà l'unica colorata del foglio.

    In ultimo si potrebbe rendere lampeggiante la cella....ma nel momento che il lampeggio smette, la perderesti di vista.

    Tutto ciò premesso, ti suggerisco di dirmi tu in quale modo vuoi che la cella sia evidenziata (fai delle prove) e, una volta trovato il modo migliore per te, me lo dici e cerchiamo di risolvere.

    Cari saluti.



    [Modificato da dodo47 24/01/2019 20:20]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    linolene
    Post: 7
    Registrato il: 21/01/2017
    Città: ARTENA
    Età: 52
    Utente Junior
    2016
    00 24/01/2019 20:44
    eccoci, tu dici la bordatura della riga, attualmente la bordadutura

    è solo della cella, se fosse tutta la riga diverrebbe certamente più
    visibile.


    ma che pensi tu di questa userform?
  • OFFLINE
    dodo47
    Post: 2.113
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 25/01/2019 15:41
    Ciao
    la user e i relativi codici sono ben fatti, poi dipende se uso che ne devi fare è consono alle tue necessità.

    Prima di provare a risolvere la faccenda dell'evidenziazione ho necessità di sapere la reale struttura dei tuoi fogli.

    Intanto, per facilitare il compito, è opportuno che tu trasformi la tabella del primo foglio in un range normale (quindi eliminare la tabella e lasciare i dati così come sono glia altri fogli).

    Poi dovresti specificare se i vari fogli hanno una stessa struttura (cosa che non mi sembra).

    Il tutto serve per individuare in ciascun foglio qual è l'ultima riga piena, in quanto, per evidenziare una determinata riga, prima è indispensabile togliere le precedenti bordature.

    Spero di essermi spiegato.

    saluti


    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    linolene
    Post: 8
    Registrato il: 21/01/2017
    Città: ARTENA
    Età: 52
    Utente Junior
    2016
    00 25/01/2019 21:53
    Buonasera Domenico,
    il primo foglio è un estratto di vendite dell'anno precedente,
    con il quale rispetto a nuovi listini mi baso per i prezzi nuovi,
    ho seguito il tuo consiglio, ho tolto la formattazione tabella (mi è costato un casino, mi ha creato un foglio con di 1045600 righe 25 mega, comunque risolto); gl'altri otto fogli, sono tutti listini, fitti fitti ma non grandi. utilizzando il tasto cerca sul primo foglio mi ha risolto una ricerca da brivido. tu dimmi ed io faccio.

  • OFFLINE
    dodo47
    Post: 2.114
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 26/01/2019 10:04
    ciao
    ripeto: abbiamo la necessità di poter rilevare l'ultima riga con valori di ciascun foglio (qualsiasi sia la colonna).

    Questo perchè, prima di bordare la riga interessata, bisogna togliere le precedenti bordature.

    Comunque, facciamo una prova, vedi se ti sta bene l'allegato: ho apportato diverse modifiche ai codici ed aggiunto un evento sulla selezione dei fogli che cancella le bordature precedenti.

    Saluti



    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    linolene
    Post: 9
    Registrato il: 21/01/2017
    Città: ARTENA
    Età: 52
    Utente Junior
    2016
    00 26/01/2019 13:25
    Buongiorno Domenico,
    se ho capito bene:
    la struttura e quella in foto,


    L'ultima riga con valore di ciascun foglio sono:


    foglio1 riga 1120

    foglio2 riga 458

    foglio3 riga 255

    foglio4 riga 30

    foglio5 riga 28

    foglio6 riga 490

    foglio7 in costruzione (come si fa?)

    foglio8 riga 112

    foglio9 riga 136

    foglio10 riga 24

    il file di esempio, immagino come ti aspettavi, non va.
    Grazie ancora!
    PS. ma vuoi che ti invio il mio file in un luogo sicuro? dati sensibili!

  • OFFLINE
    by sal
    Post: 5.623
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 26/01/2019 15:56
    Bordature Celle
    Ciao, si potrebbe usare un ciclo Sheets.count per pulire i bordi, per passare tutti i fogli e lanciare

    Cells.Borders.LineStyle = xlNone


    non ha importanza la lunghezza delle righe, nel caso mentre si passano i fogli si potrebbe anche ricavare la lunghezza delle righe.

    Ciao By Sal [SM=x423051]

    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    dodo47
    Post: 2.116
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 26/01/2019 16:25
    Re:
    linolene, 26/01/2019 13.25:


    il file di esempio, immagino come ti aspettavi, non va.



    No, non me lo aspettavo anche perchè a me funziona perfettamente.

    cosa non va?

    ( x By Sal: è quello che ho messo nel mio codice:
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Cells.Borders.LineStyle = xlNone
    End Sub
    )


    [Modificato da dodo47 26/01/2019 16:28]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    linolene
    Post: 10
    Registrato il: 21/01/2017
    Città: ARTENA
    Età: 52
    Utente Junior
    2016
    00 26/01/2019 18:16
    è incredibile!
    il tuo file è giusto la bordatura rossa è a prova di ceco,

    ho inserito come da jpg, ma non va!


    provo a smanettare, qualcuno dice scacherare!