nuovo code



  • nuovo code
    di Pepe (utente non iscritto) data: 14/01/2014 23:03:52

    ciao ragazzi qualcuno mi da una mano a velocizzare questo codice? non gira proprio. Il mio obiettivo è questo:
    Ho due fogli OGGI e IERI vorrei confrontare che tutti i codici (PRESI UNIVOCAMENTE, perchè si ripetono più di una volta) che ho nella colonna E del file di ieri siano presenti nel file di oggi. Se qualcuno non è presente per me vuol dire che è un nuovo codice.

    QUelli invece che ci sono vorrei controllare che abbiano la stessa classe che come potete vedere si trova in colonna Z. se hanno cambiato classe vorrei segnare nel foglio "nuovo/vecchio" in una riga qualsiasi il codice e la classe la nuova e la vecchia. Il codice gira fino la prima parte il primo ciclo e mi trova tutti i nuovi codici. Poi però vorrei questo secondo step se i codici che ci stanno non hanno cambiato classe ma li si impianta! Considerate in media abbiamo 12000 righe

    Sapete aiutarmi? grazie mille
     
    Sub Nuovicode()
    
    't = Timer
    Set ws3 = Sheets("OGGI")
    Set ws1 = Sheets("IERI")
    Set ws2 = Sheets("NUOVO/VECCHIO")
    
    ur = ws3.Cells(ws3.Rows.Count, "A").End(xlUp).Row
    ur2 = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row
    
    Set Area2 = ws1.Range("E1:E" & ur2)
    
    Application.ScreenUpdating = False
    
    ws2.Range("D2:E5000").Clear
    
    ws3.Range("E1:E" & ur).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    ws1.Range("E1:E" & ur).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    Set Area1 = ws3.Range("E1:E" & ur).SpecialCells(xlCellTypeVisible)
    Set Area2 = ws1.Range("E1:E" & ur2) '.SpecialCells(xlCellTypeVisible)
     
    Set Rating1 = ws3.Range("Z1:Z" & ur).SpecialCells(xlCellTypeVisible)
    Set Rating2 = ws1.Range("Z1:Z" & ur2) '.SpecialCells(xlCellTypeVisible)
    
     R = 1
     For Each Cella In Area1
        'R = R + 1
         If Application.CountIf(Area2, Cella) = 0 Then
               R = R + 1
               ws2.Cells(R, 4) = Cella
               ws2.Cells(R, 5) = "Nuovo codice"
         End If
    Next Cella
    
    R = 1
    For i = 2 To ur
        For j = 2 To ur2
            If Area1(i, 1) = Area2(j, 1) Then
                If Rating1(i, 1) <> Rating2(j, 1) Then
                    R = R + 1
                    ws2.Cells(R, 7) = Cella
                    ws2.Cells(R, 8) = "Nuova classe"
                    ws2.Cells(R, 9) = Rating1(i, 1)
                    ws2.Cells(R, 10) = Rating2(j, 1)
                    
                End If
            End If
        Next j
    Next i
    
        If ws3.FilterMode Then
           ws3.ShowAllData
        End If
         If ws1.FilterMode Then
           ws1.ShowAllData
        End If
     
     Application.ScreenUpdating = True
     Set ws1 = Nothing
     Set ws3 = Nothing
     Set Area1 = Nothing
     Set Area2 = Nothing
     
     'MsgBox Timer - t
    End Sub
    



  • di patel data: 15/01/2014 08:27:19

    come faccio a testare il tuo codice se non alleghi il file ?





  • di Pepe (utente non iscritto) data: 15/01/2014 14:48:32

    Capisco. In questo momento purtroppo sono da un altro pc e non ho il file con me. Il problema cmq sta nel ciclo! l'operazione arriva a buon fine ma in tempi lunghetti parecchio. Il mio ragionamento è questo: ho filtrato i dati con una serie di filtri. Poi cerco il codice che ci sta in cella dello sheet5 in sheet6 se ci sta controllo che non abbia cambiato codice in cella 26, se questo è avvenuto me lo salvo e lo scrito nello sheet3. Ho cambiato i nomi perchè sono su un'altra macchina e stavo cercando di replicare. Hai qualche idea per velocizzare sta roba?
    Grazie!
     
     R = 1
        trovato = False
        For i = 2 To ur
            trovato = False
            If Sheet5.Cells(i, 5).EntireRow.Hidden = False Then
                
                For j = 2 To ur2 And trovato = False
                    If Sheet6.Cells(j, 5).EntireRow.Hidden = False Then
                        If Sheet5.Cells(i, 5) = Sheet6.Cells(j, 5) And Sheet5.Cells(i, 26) <> Sheet6.Cells(j, 26) Then
                            R = R + 1
                            Sheet3.Cells(R, 7) = Sheet5.Cells(i, 5)
                            trovato = True
                        End If
                    End If
                Next j
            End If
        Next i



  • di Grograman (utente non iscritto) data: 15/01/2014 15:04:58

    Oltre al file di esempio mancano le dichiarazioni delle variabili!



  • di Pepe (utente non iscritto) data: 15/01/2014 17:07:18

    :) Ovviamente era solo il pezzo di codice che mi dava problemi! Vorrei chiedervi un'altra cosa. se filtro e dopo voglio memorizzare solo le celle filtrate in una matrice () As variant. Faccio una roba del genere Sheet5.Range("E2:E"&righe_matrice).specialCells(xlCellTypeVisible) ma mi dice non è corrispondente.
    Ps in serata posto il file! adesso per cortesia potete risolvere questo dubbio?