Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

macro copia dati tra 2 fogli

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

macro copia dati tra 2 fogli

Postdi apocrimata75 » 21/05/12 16:06

Ciao ragazzi, scusate la richiesta ma avrei bisogno del vs aiuto.
all'interno del file xxx (office 2010 con attivazione macro), ho 2 fogli (foglio1 e foglio2).
Dovrei copiare i dati contenuti da b2:e2 del foglio2 e copiarli nella prima cella vuota della colonna (c4:c104) del foglio1.
come posso fare?
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 181
Iscritto il: 28/05/11 13:22

Sponsor
 

Re: macro copia dati tra 2 fogli

Postdi ricky53 » 21/05/12 16:27

Ciao,
ovviamente i dati in colonna "C" sono tutti contigui senza celle vuote tra una riga e l'altra!

I dati verrano copiati nella prima riga vuota, in colonna "C" a partire dalla colonna "C" e fino alla colonna ""F" !

Confermi?

In caso affermativo potresti utiliizare le seguenti istruzioni
Codice: Seleziona tutto
    Sheets("Foglio1").Range("B2:E2").Copy
    Sheets("Foglio2").Range("C" & Range("C" & Rows.Count).End(xlUp).Row + 1).PasteSpecial
    Application.CutCopyMode = False
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 21/05/12 16:36

si ma devo aggiungere alcuni dati:
la funzione incolla deve essere "incolla valori", .
i dati vanno inseriti in una tabella (con le intestazioni inizia da c3) a partire dalla prima cella vuota della colonna da c3 a c104.
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 181
Iscritto il: 28/05/11 13:22

Re: macro copia dati tra 2 fogli

Postdi ricky53 » 21/05/12 16:50

Ciao,
prova questo codice
Codice: Seleziona tutto
Sub Copia_Valori()
    Dim UR As Integer
    UR = Sheets("Foglio2").Range("C" & Rows.Count).End(xlUp).Row + 1
    If UR < 3 Then
        UR = 3
    End If
    Sheets("Foglio1").Range("B2:E2").Copy
    Sheets("Foglio2").Range("C" & UR).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub


Ma devi copiare dal Foglio2 sul Foglio1 ???

Io ti ho scritto le istruzioni per copiare dal Foglio1 sul Foglio 2 ... in caso inverti i nomi dei fogli in tutte le istruzioni !!!
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 21/05/12 19:34

Grazie ricky53, funziona perfettamente. Scusa ma approfitto delle tue capacità: vorrei che la macro si attivasse automaticamente ogni tot minuti che imposto io, è possibile?
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 181
Iscritto il: 28/05/11 13:22

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 21/05/12 20:18

Codice: Seleziona tutto
Application.OnTime Now + TimeValue("00:00:20"),


ho provato ad usare questa ma non funziona

Sotto trovi la mia macro funzionante (dopo le tue istruzioni), vorre far passare 20 secondi dopo l'istruzione ActiveWorkbook.RefreshAll

Codice: Seleziona tutto
Sub aggiornamento()
'
' aggiornamento Macro
'

'
    ActiveWorkbook.RefreshAll
    Dim UR As Integer
    UR = Sheets("Prono").Range("C" & Rows.Count).End(xlUp).Row + 1
    If UR < 3 Then
        UR = 3
    End If
    Sheets("Prono (2)").Range("c4:m4").Copy
    Sheets("Prono").Range("C" & UR).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub


EDIT Flash ore 12:20 - Inserito codice macro nel tag Code per facilitare la lettura (come consigliato da Anthony)
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 181
Iscritto il: 28/05/11 13:22

Re: macro copia dati tra 2 fogli

Postdi ricky53 » 21/05/12 23:29

Ciao,
se vuoi far trascorrere 20 secondi tra un'istruzione e l'altra utilizza questo codice
Codice: Seleziona tutto
Application.Wait (Now + TimeValue("0:00:20"))


Se invece vuoi richiamare o eseguire una macro dopo nn secondi allora è necessario agire in altro modo.
Cosa ti occorre?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: macro copia dati tra 2 fogli

Postdi ricky53 » 21/05/12 23:51

Caio,
ecco un esempio di chiamata (effettuata per "tre" volte) della stessa macro
Codice: Seleziona tutto
Public mTempo As Date

Sub Avvia()
    Sheets("Foglio1").Cells(1, 1) = 0
    Macro_Eseguita_più_Volte
End Sub

Sub Macro_Eseguita_più_Volte()
    mTempo = Now + TimeSerial(0, 0, 5)
    Application.OnTime mTempo, "Macro_Eseguita_più_Volte"
   
' Servono a fermare l'esecuzione dop "3" chiamate. Tu puoi modificare in  base a quello che ti occorre
    Sheets("Foglio1").Cells(1, 1) = Sheets("Foglio1").Cells(1, 1) + 1
    If Sheets("Foglio1").Cells(1, 1) >= 3 Then
        Call Ferma_Esecuzione(mTempo)
    End If
   
End Sub

Sub Ferma_Esecuzione(mTempo)
    Application.OnTime mTempo, "Macro_Eseguita_più_Volte", , False
    MsgBox "Fine Elaborazione"
End Sub
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 22/05/12 06:18

Grazie ricky, nel frattempo avevo fatto questo: nelle celle g2, h2, i2 imposto (o volevo impostare) rispettivamente ore, minuti e secondi tra una macro e l'altra, poi ho avvia timer e stop timer per farle partire e stopparle, come ti sembrano?

Ricky potresti metterci mano? o provo ad inserire quelle che mi hai mandato?

Codice: Seleziona tutto
Sub avvia_timer()
'
' avvia_timer Macro
'

'
    Tempo = Now + TimeSerial(Cells(2, 7), Cells(2, 8), Cells(2, 9)) ' (ore,minuti,secondi)
Application.OnTime EarliestTime:=Tempo, Procedure:="aggiornamento", Schedule:=True
End Sub

Sub Macro3()
On Error Resume Next
Application.OnTime EarliestTime:=Tempo, Procedure:="aggiornamento", Schedule:=False
End Sub

Sub aggiornamento()
'
' aggiornamento Macro
'

'
    ActiveWorkbook.RefreshAll
    Dim UR As Integer
    UR = Sheets("Prono").Range("C" & Rows.Count).End(xlUp).Row + 1
    If UR < 3 Then
        UR = 3
    End If
    Sheets("Prono (2)").Range("c4:m4").Copy
    Sheets("Prono").Range("C" & UR).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub


EDIT Flash ore 12:20 - Inserito codice macro nel tag Code per facilitare la lettura (come consigliato da Anthony)
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 181
Iscritto il: 28/05/11 13:22

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 22/05/12 08:35

Il problema che riscontro è che la prima volta esegue la macro, ma poi non la ripete dopo i tot minuti inseriti nella cella 2,7 (h2).
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 181
Iscritto il: 28/05/11 13:22

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 22/05/12 09:58

Codice: Seleziona tutto
Sub aggioauto()
'
' aggioauto Macro
'

    ActiveWorkbook.RefreshAll
    Application.Wait (Now + TimeValue("0:00:20"))
    Dim UR As Integer
    UR = Sheets("Prono").Range("C" & Rows.Count).End(xlUp).Row + 1
    If UR < 3 Then
        UR = 3
    End If
    Sheets("Prono (2)").Range("c4:m4").Copy
    Sheets("Prono").Range("C" & UR).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
avvia_timer
End Sub


Sub avvia_timer()
'
' avvia_timer Macro
'

'
    Tempo = Now + TimeSerial(Cells(2, 7), Cells(2, 8), Cells(2, 9)) ' (ore,minuti,secondi)
Application.OnTime EarliestTime:=Tempo, Procedure:="aggioauto", Schedule:=True
End Sub

Sub Macro3()
On Error Resume Next
Application.OnTime EarliestTime:=Tempo, Procedure:="aggioauto", Schedule:=False
End Sub


queste sono le macro, ora aggiornauto funziona, però non riesco a bloccarla (macro3 dovrebbe bloccarla ma non lo fa).

EDIT Flash ore 12:20 - Inserito codice macro nel tag Code per facilitare la lettura (come consigliato da Anthony)
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 181
Iscritto il: 28/05/11 13:22

Re: macro copia dati tra 2 fogli

Postdi ricky53 » 22/05/12 16:57

Ciao,
rileggi il codice che ti ho inviato
il 21/05/12 23:51
ed applicalo a quanto hai scritto tu, attenzione alla chiamata alla macro "Ferma_Esecuzione" devi passarle un parametro tu nel tuo codice non l'hai fatto e ... PROVA
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 22/05/12 17:14

Grazie ricky53 per l'aiuto. siccome mi servirebbe che la macro fosse ripetuta più volte a distanza di un certo tempo da me stabilito e non dal numero di volte di ripetizione. è possibile farlo sulle mie macro postate?
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 181
Iscritto il: 28/05/11 13:22

Re: macro copia dati tra 2 fogli

Postdi patel » 22/05/12 19:31

la macro di ricky53 è completa, modifica la riga
If Sheets("Foglio1").Cells(1, 1) >= 3 Then
sostituendo a 3 un numero abbastanza alto e poi la la riga
mTempo = Now + TimeSerial(0, 0, 5)
impostando un numero di secondi diverso da 5
patel
Utente Senior
 
Post: 120
Iscritto il: 24/04/12 16:03

Re: macro copia dati tra 2 fogli

Postdi ricky53 » 22/05/12 22:59

Ciao,
hai già avuto un chiarimento sull'utilizzo del mio esempio e dovresti farcela.
Ti fornisco qualche altre informazione.


In questa istruzione
mTempo = Now + TimeSerial(0, 0, 5)
devi impostare il tempo che vuoi trascorra tra una chiamata e l'altra. Nel mio esempio ho scelto 5 secondi.

Invece con il "controllo" seguente
If Sheets("Foglio1").Cells(1, 1) >= 3 Then
fai fermare l'esecuzione della macro
Io ho messo "3" solo per esempio.
Volendo puoi cambiare MANUALMENTE il valore della cella "A1" scrivendo un valore maggiore di quello del "controllo" (il mio "3" o un altro tuo valore) e ... la macro si fermerà dopo aver eseguito l'ultimo ciclo.

Adesso è più chiaro come operare?

Spero di "SI" in caso ... sono QUI
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 23/05/12 08:15

Vi posto quello ke ho fatto:
per far partire la macro aggioauto (ke dovrebbe ripetersi ogni 15 minuti)

Codice: Seleziona tutto
Sub avvia()
'
' avvia Macro
'

'
Sheets("prono").Cells(1, 1) = 0
aggioauto
End Sub

per bloccare la macro aggioauto

Sub ferma()
'
' ferma Macro
'

Application.OnTime mTempo, "aggioauto", , False
MsgBox "Fine Elaborazione"
End Sub


macro x l'aggiornamento dei dati


Sub aggioauto()
'
' aggiornamento Macro
'

'
    mTempo = Now + TimeSerial(0, 1, 0)
    Application.OnTime mTempo, "aggioauto"
    ActiveWorkbook.RefreshAll
    Application.Wait (Now + TimeValue("0:00:20"))
    Dim UR As Integer
    UR = Sheets("Prono").Range("C" & Rows.Count).End(xlUp).Row + 1
    If UR < 3 Then
        UR = 3
    End If
    Sheets("Prono (2)").Range("c4:m4").Copy
    Sheets("Prono").Range("C" & UR).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    Sheets("prono").Cells(1, 1) = Sheets("prono").Cells(1, 1) + 1
    If Sheets("prono").Cells(1, 1) >= 99 Then
    Call ferma(mTempo)
    End If
End Sub


Si blocca subito su Sub aggioauto() e Call ferma(mTempo) evidenziati in giallo

EDIT Flash ore 12:20 - Inserito codice macro nel tag Code per facilitare la lettura (come consigliato da Anthony)
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 181
Iscritto il: 28/05/11 13:22

Re: macro copia dati tra 2 fogli

Postdi Anthony47 » 23/05/12 10:28

Perdona, se le competenze vba sono al momento poche sarebbe meglio che tu seguissi esattamente quello che ti viene suggerito senza provare a fare migliorie premature...

Nel tuo codice, se la macro "ferma" non si aspetta parametri, come pensi di poterla richiamare passandogli un "mTempo"?

N° 2: invece di passarci del codice che non fa quello che hai in mente sarebbe meglio spiegarci quello che hai in mente, cosi' almeno possiamo usare il nostro tempo per suggerimenti utili e non per cercare di capire la richiesta.

N°3, per favore segnala come "Code" il codice che inserisci nei messaggi, altrimenti la lettura peggiora (seleziona il testo, premi il tasto Code sopra il box di inserimento del messaggio).

Cio' detto...
Se il tuo bisogno e' di far eseguire la macro per un tot di volte, comunque fintanto che A1 di Prono viene compilato anche a mano con un valore di 99 o superiore, ti bastera' sondare questa condizione PRIMA di rischedulare la macro, cosi' non avrai bisogno della Sub ferma.
INOLTRE devi tener presente che quando la macro si attivera' automaticamente e' possibile che tu stia lavorando su altri fogli, o altri file; quindi il codice della Sub aggioauto deve fare riferimento esplicito a quale Workbook e Worksheet essa deve operare; scrivere ActiveWorkbook vuol dire sfidare la sorte.
INFINE devi considerare che l' istruzione WAIT e' una trappola, perche' e' vero che essa aspetta i secondi che gli dici di aspettare, ma essa assorbe la quasi totalita' della cpu disponibile cosi' che e' possibile che dopo quella wait altri processi di cui aspettavi la fine in realta' non hanno nemmeno avuto l' occasione di essere cominciati. Meglio sostituire con un loop che include DoEvents.

Cio' detto credo che questo codice possa servire

Codice: Seleziona tutto
Sub avvia()
' avvia Macro

Sheets("prono").Cells(1, 1) = 0
aggioauto
End Sub


Sub aggioauto()
' aggiornamento Macro
'
ThisWorkbook.RefreshAll     '<< Modificata
'Application.Wait (Now + TimeValue("0:00:20"))   '<< Cancellata
'wait 20 seconds    '<< Aggiunte Do /Loop
myTim = Timer
Do
DoEvents: If Timer > myTim + 10 Or Timer < myTim Then Exit Do
Loop
'
Dim UR As Integer
UR = ThisWorkbook.Sheets("Prono").Range("C" & Rows.Count).End(xlUp).Row + 1 
If UR < 3 Then
UR = 3
End If
With ThisWorkbook
'    .Sheets("Prono (2)").Range("c4:m4").Copy
    .Sheets("Prono").Range("c4:m4").Copy
    .Sheets("Prono").Range("C" & UR).PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
    .Sheets("prono").Cells(1, 1) = .Sheets("prono").Cells(1, 1) + 1
End With
'onTime reschedule
If Sheets("prono").Cells(1, 1) < 99 Then
    mTempo = Now + TimeSerial(0, 0, 10)
    Application.OnTime mTempo, "aggioauto"
End If
'
End Sub

Se invece vuoi avere la possibilita' di interrompere una macro gia' pianificata allora devi seguire cio' che ti disse Ricky:
-avere una variabile "Public" usata per contenere l' orario della prossima rischedulazione. Una variabile Public deve essere definita in testa al modulo, prima di ogni macro.
-compilare questa variabile e usarla sia per la rischedulazione (es Application.OnTime mTempo, "aggioauto") che per l' annullamento (es Application.OnTime mTempo, "aggioauto", , False)

Fai sapere.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13885
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 23/05/12 10:55

anthony ti ho mandato un mp. Posso inviarti il file?
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 181
Iscritto il: 28/05/11 13:22

Re: macro copia dati tra 2 fogli

Postdi patel » 23/05/12 12:19

i problemi si risolvono sul forum, non tramite mp, la soluzione interessa tutti noi.
patel
Utente Senior
 
Post: 120
Iscritto il: 24/04/12 16:03

Re: macro copia dati tra 2 fogli

Postdi apocrimata75 » 23/05/12 15:18

Ok.
Windows 7 - Office 2010
apocrimata75
Utente Senior
 
Post: 181
Iscritto il: 28/05/11 13:22

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "macro copia dati tra 2 fogli":


Chi c’è in linea

Visitano il forum: tex willer e 11 ospiti