Condividi tramite

Macro Excel 2007 per copiare dati da determinate celle di un Foglio a determinate celle di un altro Foglio dello stesso File

Anonimo
2013-10-08T11:48:37+00:00

Salve a tutti sto cercando di creare un file di Excel con una sorta di maschera (non è una vera maschera è solo un foglio di inserimento dati) che, tramite l'uso di una macro attivata da un pulsante, copierà poi i dati immessi e li immagazzinerà nel foglio 2.

Sono riuscito a far si che con un pulsante si salvino i dati e con un altro poi li si cancellino tutti dal foglio 1 lasciando invariato il foglio 2.

Il mio problema sta nel fatto che quando inserisco dei nuovi dati e vado a "salvarli" (premo il pulsante con la macro salva che copia il contenuto delle celle, una per una, dal foglio1 al foglio2), copia i dati sovrascrivendo quelli salvati in precedenza.

Vorrei impostare la macro in modo che salvi (copi) una serie di dati su una riga diversa ogni volta in automatico senza sovrascrivere nulla, come posso fare? Non ho mai usato Visual Basic ma se mi siegate posso provarci!

Grazie in anticipo a chi avrà la cortesia di rispondermi.

Federico

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2013-10-08T14:46:04+00:00

La macro è stata registrata manualmente copiando cella per cella da quella che mi interessava del foglio1 a quella di destinazione nel foglio2

 

su visualbase la vedo così

 ...

Ciao Federico,

il problema delle macro ottenute con il registratore di macro è la 'staticità' e la complessità nell'intervenire per renderle dinamiche. Come, ad esempio, fare in modo che non incolli le celle copiate sempre nella riga 17 ma su una riga diversa mano a mano che sono aggiunte nuove righe.

Ti suggerisco qualche modifica per rendere il codice più snello, prima di aggiungere la riga variabile:

  • duplica la tua macro e chiamala con un altro nome, su quest'ultima andrai a fare le modifiche;
  • cancella tutte le righe che iniziano con ActiveWindow.ScrollColumn, che sono assolutamente inutili,
  • la copia avviene a gruppi di due celle, quindi separa con una riga bianca i vari blocchi di copia (solo per chiarezza), dopodiché:

questo gruppo di righe (che copia il range da B2:C2 del foglio MASCHERA in A17:C17 del Foglio1:

Sheets("MASCHERA INPUT").Select

Range("B2:C2").Select

Selection.Copy

Sheets("Foglio1").Select

Range("A17:B17").Select

ActiveSheet.Paste

può essere tranquillamente sostituito da questa riga:

Sheets("MASCHERA INPUT").Range("B2:C2").Copy Sheets("Foglio1").Range("A17:B17")

e così anche:

Sheets("MASCHERA INPUT").Select

Range("B8:C8").Select

Application.CutCopyMode = False

Selection.Copy

Sheets("Foglio1").Select

Range("C17:D17").Select

ActiveSheet.Paste

con

Sheets("MASCHERA INPUT").Range("B8:C8").Copy Sheets("Foglio1").Range("C17:D17")

e così via per tutti gli altri blocchi simili.

Se hai dei dubbi, prima di procedere, puoi verificare il funzionamento con una macro separata, ad esempio così:

Sub SalvaNuovo()

Sheets("MASCHERA INPUT").Range("B2:C2").Copy Sheets("Foglio1").Range("A17:B17")

Sheets("MASCHERA INPUT").Range("B8:C8").Copy Sheets("Foglio1").Range("C17:D17")

End Sub

Se ti va, quando hai terminato, puoi postare la nuova macro ottenuta, per lo step successivo.

Andrea.

La risposta è stata utile?

10+ persone hanno trovato utile questa risposta.
0 commenti Nessun commento

30 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-10-11T15:40:47+00:00

    Con lo stesso "escamotage" di nascondere le linked cell nella parte non visibile potrei usare un Controllo Modulo invece che il Controllo ActiveX visto che è più bello graficamente e visto che se imposto la protezione foglio mi blocca la compilazione degli ActiveX mentre non quella dei Controlli?

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2013-10-08T13:36:55+00:00

    Ciao Andrea e innanzi tutto grazie della cortesia.

    Scusami ma sono molto inesperto, già per impostare la macro ho proceduto a tentoni finché non sono riuscito ad ottenere un risultato simile a quello che cercavo, quindi se puoi riusciresti ad essere un po' più chiaro per uno del mio livello?

    Intendo dire, il codice che mi hai suggerito dove va inserito di preciso?

    E se materialmente la mia prima riga di inserimento dati va da A3 a BK, quale sarà la "formula" esatta?

    Grazie

    Ciao Federico,

    non so di preciso come avviene il processo di copia, perciò rimango sul vago.

    Se la copia avviene una cella alla volta:

    ' cella da copiare

    Sheets("FoglioDiPartenza").Range("C10").Copy

    ' cella di destinazione con riga fissa

    Sheets("FoglioDestinazione").Range("A3").PasteSpecial xlValues

    ' cella di destinazione con riga variabile

    lastRow = Worksheets("FoglioDestinazione").Cells(Rows.Count, "A").Row

    Sheets("FoglioDestinazione").Range("A" & lastRow).PasteSpecial xlValues

    Se la copia avviene per blocchi:

    ' blocco di celle da copiare

    Sheets("FoglioDiPartenza").Range("A10:BK10").Copy

    ' cella di destinazione con riga fissa

    Sheets("FoglioDestinazione").Range("A3").PasteSpecial xlValues

    ' cella di destinazione con riga variabile

    lastRow = Worksheets("FoglioDestinazione").Cells(Rows.Count, "A").Row

    Sheets("FoglioDestinazione").Range("A" & lastRow).PasteSpecial xlValues

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-10-08T13:16:23+00:00

    Ciao Andrea e innanzi tutto grazie della cortesia.

    Scusami ma sono molto inesperto, già per impostare la macro ho proceduto a tentoni finché non sono riuscito ad ottenere un risultato simile a quello che cercavo, quindi se puoi riusciresti ad essere un po' più chiaro per uno del mio livello?

    Intendo dire, il codice che mi hai suggerito dove va inserito di preciso?

    E se materialmente la mia prima riga di inserimento dati va da A3 a BK, quale sarà la "formula" esatta?

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-10-08T12:40:40+00:00

    Salve a tutti sto cercando di creare un file di Excel con una sorta di maschera (non è una vera maschera è solo un foglio di inserimento dati) che, tramite l'uso di una macro attivata da un pulsante, copierà poi i dati immessi e li immagazzinerà nel foglio 2.

    Sono riuscito a far si che con un pulsante si salvino i dati e con un altro poi li si cancellino tutti dal foglio 1 lasciando invariato il foglio 2.

    Il mio problema sta nel fatto che quando inserisco dei nuovi dati e vado a "salvarli" (premo il pulsante con la macro salva che copia il contenuto delle celle, una per una, dal foglio1 al foglio2), copia i dati sovrascrivendo quelli salvati in precedenza.

    Vorrei impostare la macro in modo che salvi (copi) una serie di dati su una riga diversa ogni volta in automatico senza sovrascrivere nulla, come posso fare? Non ho mai usato Visual Basic ma se mi siegate posso provarci!

    Grazie in anticipo a chi avrà la cortesia di rispondermi.

    Federico

    Ciao Federico,

    per determinare l'ultima riga occupata puoi adoperare questo codice:

    lastRow = Worksheets("Foglio2").Cells(Rows.Count, "A").Row

    adattando nome foglio e colonna sulla quale effettuare il controllo a necessità.

    Quindi, la prima riga libera nella quale memorizzare i tuoi dati diventerà;

    lastRow = lastRow + 1

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento