Sostieni Excel VBA con una donazione! Con la tua donazione potrai contribuire al mantenimento del servizio.
Le donazioni sono eseguite con PayPal, il modo più facile, comodo e sicuro per pagare online.
Paypal accetta anche carta di credito o carte prepagate.

Copiare da un file ad un altro

  • FILE ALLEGATI:
  • Copiare da un file ad un altro (excel 2010) di robertout (Utente non iscritto) data: 08/12/2016 11:15:21 



    Scusate, ma non riesco a trovare la mia discussione già postata, nonostante abbia fatto la registrazione.
    Dunque la ripropongo.
    Cerco di essere il più preciso possibile.
    Nel file Prova1 (che allego) devo trovare TUTTI gli articoli con Codice = “PROVA” (nell’esempio sono 4 righe) SENZA RIORDINARLI ALFANUMERICAMENTE e copiare i valori che ci sono in queste 4 righe (CdFornitore, Referenza, Descrizione) in 4 nuove righe del file Prova2 (che all’inizio sarà vuoto).
    Vorrei escludere una lettura del tipo che allego.
    Infatti il file Prova1 (quello vero) è composto da piu’ di 13.000 righe ! vorrei trovare il metodo piu’ veloce possibile perche’ prima di questa routine si sviluppa una elaborazione molto lunga che dura gia’ parecchi minuti.
    Spero di essere stato esauriente.

    Roberto
    EXCEL 2010

     
    Sub Macro1()
    ' Macro1 Macro
    '
    Windows("Prova1.xlsx").Activate
    DaScegliere = "PROVA"
    For V = 1 To WorksheetFunction.CountA(Range("C:C"))
    If Cells(V, 3).Value = DaScegliere Then
        Range(Cells(V, 1), Cells(V, 4)).Select
        Selection.Copy
        Windows("Prova2.xlsx").Activate
        UR = WorksheetFunction.CountA(Range("A:A"))
        Range(Cells(UR + 1, 1), Cells(UR + 1, 4)).Select   'vado alla prima riga vuota
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Windows("Prova1.xlsx").Activate
    End If
    Next V
    Application.CutCopyMode = False
    Cells(1, 1).Select
    End Sub
    
    
  • di alfrimpa (Utente esperto) data: 08/12/2016 12:50:31 



    Ciao Roberto

    Il file non risulta allegato.

    Per ora sono fuori e non ho il pc ma se non risponde qualcuno prima appena rientro provo a vedere

    Alfredo
  • di Albatros54 (Utente esperto) data: 09/12/2016 15:56:32 



    Apri il file "Prova1", che ai postato, nel modulo1 incolla il codice sotto,rpima di lanciare la routine accertati che sia selezionato il foglio"ReferenzeProduttore", la routine non fa altro che selezionare i dati che corrispondono al dato cercato,"PROVA", creano un nuovo worksbooks e incollano i dati nel foglio1, naturalmente la devi adattare alle tue esigenze.
    ciao
    albatros54  
     
    Sub seleziona()
        Dim MySheet As Worksheet
        Dim MyRange As Range
        Dim UList As Collection
        Dim UListValue As Variant
        Dim i As Long
        Set MySheet = ActiveSheet
        If ActiveSheet.AutoFilterMode = False Then
            ActiveSheet.Range("A1").AutoFilter
    
        End If
    
        Set MyRange = Range(MySheet.AutoFilter.Range.Columns(3).Address)
        Set UList = New Collection
        On Error Resume Next
        For i = 2 To MyRange.Rows.Count
            UList.Add MyRange.Cells(i, 1), CStr(MyRange.Cells(i, 1))
        Next i
        MyRange.AutoFilter Field:=3, Criteria1:="PROVA"
        MySheet.AutoFilter.Range.Copy
        Workbooks.Add.Worksheets(1).Paste
        Application.CutCopyMode = False
        MySheet.AutoFilter.ShowAllData
        MySheet.Select
    End Sub
  • di robertout (Utente non iscritto) data: 10/12/2016 11:59:32 



    Grazie mille Albatros54,
    la routine funziona perfettamente, tuttavia l'istruzione:
    If ActiveSheet.AutoFilterMode = False Then
    ActiveSheet.Range("A1").AutoFilter
    non funziona perchè se per caso il foglio ha già impostato i filtri l'istruzione anzichè saltare l'IF lo esegue lo stesso e quindi ha l'effetto di togliere i filtri e non di metterli, andando poi in errore alla riga:
    Set MyRange = Range(MySheet.AutoFilter.Range.Columns(3).Address)
    Come mai non riconosce il True, ritenendolo sempre False?
    Ho anche un altro dubbio: dovendo ripetere l'operazione di filtraggio e quindi copia nel nuovo foglio per circa 750 voci (750 volte salto da un file all'altro e filtro e copio e accodo i dati), non sarà troppo lenta l'elaborazione?
    Cosa ne pensi?
    Grazie ancora
    Robertout
    Excel 2010
  • di Albatros54 (Utente esperto) data: 10/12/2016 14:35:17 



    Cit..If ActiveSheet.AutoFilterMode = False Then
    ActiveSheet.Range("A1").AutoFilter

    sicuramente lo vede sempre false, perchè' ne foglio Tabelle, i dati sono importati da un database di Access.
    Se tu fai girare il codice nell'altro foglio il tutto funziona.
    Ciao
    albatros54
  • di robertout (Utente non iscritto) data: 10/12/2016 14:45:38 



    Ok. Grazie 1000,00
    Robertout
  • torna su

Sostieni Excel VBA con una donazione! Con la tua donazione potrai contribuire al mantenimento del servizio.
Le donazioni sono eseguite con PayPal, il modo più facile, comodo e sicuro per pagare online.
Paypal accetta anche carta di credito o carte prepagate.