Macro copia dati a blocchi



  • Macro copia dati a blocchi
    di Pascà60 (utente non iscritto) data: 19/02/2015 12:53:42

    Buon giorno a tutti. Premetto che non conosco il linguaggio VBA e che quando mi serve una macro la creo con il registratore di Excel 2010.
    Ho necessità di copiare dei dati a blocchi (Range D12:G18, D21:G27, D30:G34 e così via) da un file ad un altro sempre nelle stesse celle (D12:G18, D21:G27, ecc.). Mentre le colonne sono sempre 4 da D a G, le righe che compongono ogni blocco variano da 1 a più di 40. I blocchi sono più di 80 ed i dati sono il risultato di sommatorie, quindi devo fare copia ed incolla valori.
    Sono riuscito a creare, con il registratore di Excel e poi adattandola, una Macro (vedi codice allegato) con un pulsante. Il problema è che, oltre ad essere molto lunga, quando variano alcuni blocchi, per l’aggiunta o l’eliminazione di righe, sono costretto a variare tutti i riferimenti della macro, vanificandone l’utilità.
    E’ possibile un aiuto per sfoltirla e per una manutenzione futura più comoda e veloce?
    In una vecchia discussione, che non sono riuscito a ritrovare, qualcuno scrisse (non ricordo se Vecchio Frac o MisterX) che per copiare un Range non era necessario selezionarlo. Come si fa?
    Allego il file da cui copio i dati (foglio Impieghi)

     
        Range("D12:G18").Select
        Selection.Copy
        Windows("gte.xls").Activate
        Range("D12").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Windows("Totale II.xls").Activate
        Range("D21:G27").Select
        Selection.Copy
        Windows("gte.xls").Activate
        Range("D21").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Windows("Totale II.xls").Activate
        Range("D30:G34").Select
        Selection.Copy
        Windows("gte.xls").Activate
        Range("D30").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    
    "e così via per tutti gli altri blocchi da copiare".



  • di Pascà60 (utente non iscritto) data: 19/02/2015 12:57:48

    Non riesco ad allegare il file. Sul computer dell'ufficio non ho un programma per zipparlo.



  • di Pascà60 (utente non iscritto) data: 19/02/2015 15:41:42

    Salve ragazzi, sono riuscito ad allegare il file snellendolo un pò. Se qualcuno volesse darci un'occhiata.
    Grazie a tutti e buona serata.
    Pascà.



  • di lepat (utente non iscritto) data: 19/02/2015 16:20:18

    si fa così, ma non risparmi molto a meno che tu non trovi una regola per far variare gli indici in un for
     
    Range("D12:G18").Copy
        Windows("gte.xls").Activate
        Range("D12").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Windows("Totale II.xls").Activate
        Range("D21:G27").Copy
        Windows("gte.xls").Activate
        Range("D21").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Windows("Totale II.xls").Activate
        Range("D30:G34").Copy
        Windows("gte.xls").Activate
        Range("D30").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False