ricerca



  • ricerca
    di milena (utente non iscritto) data: 31/05/2016 16:56:13

    Salve,
    con la macro visibile nel Codice VBA sottostante, inserendo un Codice Fiscale, mi trova sulla colonna B del foglio1 di excel di 24000 rihe la posizione, il cognome e nome e i dati sensibili del soggetto e va a scriverli su un nuovo foglio di excel, che prende il suo nome.(sono in totale 12 righe)
    Purtroppo l'operazione ha esito favorevole solo nella ricerca del primo codice fiscale.
    Io mi ero illusa che funzionasse anche per le altre ricerche!!!
    Proseguendo nella ricerca, in un caso crea il foglio con cognome e nome, ma riporta tutti i dati della prima ricerca (quindi sbagliati) ; in un altro caso non trova nemmeno il codice fiscale(.E' tutto visibile nel file allegato)
    Non riesco purtroppo a risolvere il problema.
    Mi potete aiutare ?
    Saluti cordiali
    Milena
     
    Option Explicit
    Option Compare Text
    Sub ricerca()
    Dim UR, R, CF, X, Test, Nome As String, Rg As Object
    CF = InputBox("Inserire codice Fiscale 16 caratteri", , 0)
    If Len(CF) = 16 Then
        Set Rg = Sheets("Foglio1").Range("B:B").Find(CF, LookIn:=xlValues, LookAt:=xlWhole)
        If Rg Is Nothing Then
            MsgBox "Nessuna codice Fiscale trovato  " & CF
            Exit Sub
        Else
            R = Rg.Row
            Nome = Sheets("Foglio1").Cells(R - 9, 2) & Sheets("Foglio1").Cells(R - 8, 2)
            If Nome = "" Then MsgBox "Manca Cognome&Nome": Exit Sub
            For X = 2 To Sheets.Count
                If Sheets(X).Range("B10") = CF Then MsgBox "Il codice Fiscale esiste già nel foglio " & Sheets(X).Name: Exit Sub
            Next X
            For X = 2 To Sheets.Count
                If Sheets(X).Range("B1") & Sheets(X).Range("B2") = Nome And Sheets(X).Range("B10") <> CF Then
                    MsgBox "Non posso creare due fogli " & Nome & " uguali" & vbCrLf & "anche se il codice Fiscale è diverso " & CF
                    Exit Sub
                End If
            Next X
            ActiveWorkbook.Worksheets.Add
            ActiveSheet.Name = Nome
            Sheets("Foglio1").Range("A" & R - 9 & ":B" & R + 2).Copy
            Sheets(Nome).Range("A1").PasteSpecial
            Sheets(Nome).Move After:=Sheets(Worksheets.Count)
            MsgBox "Creato foglio  " & Nome
        End If
    Else
        MsgBox "Numero caratteri codice Fiscale errati"
    End If
    End Sub
    
    



  • di Raffaele_53 data: 01/06/2016 00:09:04

    Forse perchè i dati inseriti in colonna A/B sono formule?
    Copia/incolla speciale valori che trova tutto...

    Questa piu lenta per formule
     
    Option Explicit
    Option Compare Text
    Sub ricerca2()
    Dim sh1 As Worksheet: Set sh1 = Worksheets("Foglio1") ' da cambiare casomai
    Dim Ur, R, CF, X, Y, Nome As String
    Ur = sh1.Range("A" & Rows.Count).End(xlUp).Row
    CF = InputBox("Inserire codice Fiscale 16 caratteri", , 0)
    If Len(CF) = 16 Then
        For Y = 10 To Ur
            If sh1.Cells(Y, 2).Value = CF Then
                Nome = sh1.Cells(Y - 9, 2) & sh1.Cells(Y - 8, 2)
                If Nome = "" Then MsgBox "Manca Cognome&Nome": Exit Sub
                    For X = 2 To Sheets.Count
                        If Sheets(X).Range("B10").Value = CF Then MsgBox "Il codice Fiscale esiste già nel foglio " & Sheets(X).Name: Exit Sub
                    Next X
                    For X = 2 To Sheets.Count
                        If Sheets(X).Range("B1") & Sheets(X).Range("B2") = Nome And Sheets(X).Range("B10") <> CF Then
                            MsgBox "Non posso creare due fogli " & Nome & " uguali" & vbCrLf & "anche se il codice Fiscale è diverso " & CF
                            Exit Sub
                        End If
                    Next X
                    ActiveWorkbook.Worksheets.Add
                    ActiveSheet.Name = Nome
                    sh1.Range("A" & Y - 9 & ":B" & Y + 2).Copy
                    Sheets(Nome).Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
                    Sheets(Nome).Move After:=Sheets(Worksheets.Count)
                    MsgBox "Creato foglio  " & Nome
           End If
           Y = Y + 11
        Next Y
    Else
        MsgBox "Numero caratteri codice Fiscale errati"
    End If
    Set sh1 = Nothing
    End Sub



  • di Cucù data: 01/06/2016 10:11:26

    cit"Purtroppo l'operazione ha esito favorevole solo nella ricerca del primo codice fiscale.
    Io mi ero illusa che funzionasse anche per le altre ricerche!!! "

    In che senso?

    Il codice che hai inserito prevedo una istruzione di tipo "Find" è quindi ovvio che trovato il primo codice fiscale utile poi termini il ciclo...
    Se vuoi che la ricerca continui su tutte le righe puoi utilizzare il codice proposta da raffaele, che saluto" anche se a parer mio poco performante visto le 24K righe oppure utilizzare istruzione di tipo "Find - Next" o ancora meglio una collection_
    Ciao Cucù


  • ricerca
    di milena (utente non iscritto) data: 01/06/2016 12:49:46

    OK, molto bene, funziona benissimo, complimenti!!!
    Un ringraziamento e un cordiale saluto
    Milena