Condividi:        

Copiare valori da un foglio ad un altro in base a numero pro

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

Copiare valori da un foglio ad un altro in base a numero pro

Postdi Alea » 23/01/12 13:30

Buon giorno a tutti
ho questo problema da risolvere:
Da un foglio chiamato CB-TECH devo copiare dei dati (sempre gli stessi) in un file chiamato ELENCO.
Nel file "Elenco" (foglio chiamato "2012" ... ho 10 fogli con gli ultimi 10 anni) a partire dalla cella/riga A3 ho dei numeri progressivi.
quindi in A3 -> 01
A4 -> 02
A5 -> 03
ecc.
Immagine

Le celle che devo copiare (solo il valore) sono:
Dal Foglio1 del file CB-TECH
- H3 in colonna A
- I3 1 in colonna B
Dal Foglio2 del file CB-Tech
- D1 in colonna C
- G1 in colonna D
- C2 in colonna E
- G2 in colonna F
- K11 in colonna G
- K12 in colonna H
- K13 in colonna I
- K14 in colonna J

Ad esempio:
compilo il mio file per preparare l' OFFERTA chiamato CB-TECH;
una volta terminato devo copiare alcuni dati (quelli scritti prima) nel file chiamato ELENCO inserendoli nella prima riga libera.

Non so se ho spiegato bene il mio problema.
Grazie intanto
Ciao
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Sponsor
 

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi ricky53 » 23/01/12 14:12

Ciao,
i dati da copiare vanno copiati (con le condizioni che hai scritto) nel foglio il cui "nome" è uguale all'anno della data in cui si opera?

Confermi che Il nome del foglio è solo "2012", poi ci sarà il "20132 , ecc. ?

All'inizio hai scritto
Da un foglio chiamato CB-TECH devo copiare dei dati (sempre gli stessi)
Sicuramente intendevi dire "FILE" e non foglio visto che dopo citi Foglio1 e Foglio2
Dal Foglio1 del file CB-TECH
...
Dal Foglio2 del file CB-Tech
...
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. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Alea » 23/01/12 14:39

Ciao ricky
grazie per l'interessamento e.....

hai ragione su entrambi i punti :D
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi ricky53 » 23/01/12 15:47

Ciao,
prova questo codice, che può essere migliorato, è un esempio da cui partire.
ATTENZIONE: I file devono essere stati aperti entrambi prima di eseguire la macro.
IMPORTANTE: Devi modificare i nomi dei file con i tuoi nomi effettivi!!!!

Codice: Seleziona tutto
Sub Copia_Dati()
    Dim WB_OUT As Workbook
    Dim WS1 As Worksheet, WS2 As Worksheet
    Dim UR As Long, Anno As String
   
    Application.ScreenUpdating = False
    Windows("ELENCO.xls").Activate
    Set WB_OUT = ActiveWorkbook
    Anno = Format(Year(Date), "0000")
    Set WB_OUT = ActiveWorkbook
    Anno = Format(Year(Date), "0000")
    UR = Sheets(Anno).Range("A" & Rows.Count).End(xlUp).Row + 1
   
    Windows("CB-Tech.xls").Activate
    Set WS1 = Sheets("Foglio1"): Set WS2 = Sheets("Foglio2")
 
' H3-I3 su "A..-B.."
    WS1.Range("H3:I3").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

' D1 su "C.."
    WS2.Range("D1").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' G1 su "D.."
    WS2.Range("G1").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 4).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' C2 su "E.."
    WS2.Range("C2").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 5).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' G2 su "F.."
    WS2.Range("G2").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' K11-K14 su "G..-J.."
    WS2.Range("K11:K14").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 7).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
   
    Application.ScreenUpdating = False

    MsgBox "La copia dei dati da un file all'altro è stata effettuata"
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. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Alea » 23/01/12 16:24

Ottima grazie mille ricky...

ma se io ti dicessi che il file ELENCO si trova sempre nella stessa cartella , non è che c'è la possibilità di non doverlo avere aperto per eseguire la macro?.

il percorso sarebbe questo: G:\OFFERTE\ELENCO

grazie
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Alea » 23/01/12 16:35

Trovato
Codice: Seleziona tutto
 ChDir "G:\OFFERTE\ELENCO"
    Workbooks.Open Filename:="G:\OFFERTE\ELENCO\Elenco.xls"

e alla fine della macro
Codice: Seleziona tutto
Windows("Elenco.xls").Activate
    ActiveWorkbook.Save
    ActiveWindow.Close
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi ricky53 » 23/01/12 17:13

Ciao,
bene mi fa piacere esserti stato utile.
Come avevo scritto poteva essere migliorato e ... tu l'hai fatto.

Buon prosegiumento.
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. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Alea » 05/03/12 16:58

Ciao ricky
avrei da chiederti un piccolo aggiornamento a questa macro se possibile.
Ho la necessità di aggiungere un criterio, e cioè:

se nel foglio "Ref" alla cella B160 c'è scritto "0" (zero) o "A" allora esegui la macro, altrimenti no e mi scrivi un messaggio che i dati sono già stati caricati.

La macro che sto utilizzando è questa:
Codice: Seleziona tutto
Sub AggiornaELENCO()
    Dim WB_OUT As Workbook
    Dim WS1 As Worksheet, WS2 As Worksheet
    Dim UR As Long, Anno As String
   
    Application.ScreenUpdating = False
    nome = ThisWorkbook.Name
    ChDir "G:\OFFERTE\ELENCO"
    Workbooks.Open Filename:="G:\OFFERTE\ELENCO\Elenco.xls"
    Set WB_OUT = ActiveWorkbook
    Anno = Format(Year(Date), "0000")
    Set WB_OUT = ActiveWorkbook
    Anno = Format(Year(Date), "0000")
    UR = Sheets(Anno).Range("A" & Rows.Count).End(xlUp).Row + 1
   
    Windows(nome).Activate
    Set WS1 = Sheets("QGL10.03b"): Set WS2 = Sheets("Riepilogo")

' H3-I3 su "A..-B.." - numero/anno OFFERTA
    WS1.Range("H3:I3").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

' D1 su "C.." - Codice Progetto
    WS2.Range("D1").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' G1 su "D.." - Data
    WS2.Range("G1").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 4).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' C2 su "E.." - Denominazione
    WS2.Range("D2").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 5).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' G2 su "F.." - Località
    WS2.Range("G2").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' K11-K14 su "G..-J.." Tabella contatti
    WS2.Range("K11:K14").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 7).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
   
    Application.ScreenUpdating = False

   
    Windows("Elenco.xls").Activate
    ActiveWorkbook.Save
    ActiveWindow.Close

   
    MsgBox "La copia dei dati è stata effettuata"
End Sub


grazie mille ciao
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Anthony47 » 05/03/12 23:46

Ricky e' sempre benvenuto, ma ci provo io...
In un' altra macro:
Codice: Seleziona tutto
Sub Pippo()
If Sheets("Ref").Range("B160")=0 Or Sheets("Ref").Range("B160")="A" then
Call AggiornaELENCO
Else
Msgbox("Dati gia' caricati")
End if
End Sub

L' utente adesso lancera' Pippo, che eventualmente richiama la vecchia (e buona) AggiornaELENCO

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Alea » 06/03/12 08:04

Grazie mille Anthony.
adesso la provo ma da come l'ho interpretata dovrebbe essere ottima per le mie esigenze.
Ciao
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Alea » 09/03/12 16:45

Che rompi scatole che sono....
Mi sono accorto purtroppo che questa macro, se la lancio più volte di fila, mi copia i dati più volte. Esiste un modo per fargli capire che se questi dati ci sono già allora non devi più copiare?
Probabilmente dovrei creare un codice "tipo" l'ultimo di Anthony. Ma dove dovrei inserirlo?
Grazie
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi ricky53 » 09/03/12 17:27

Ciao,
Anthony ci scambiamo le risposte ...
prova con questa modifica
Codice: Seleziona tutto
Sub Pippo()
If Sheets("Ref").Range("B160")=0 Or Sheets("Ref").Range("B160")="A" then
   Call AggiornaELENCO
   Sheets("Ref").Range("B160") = "XXX" ' <<------------ Aggiunta
Else
   Msgbox("Dati gia' caricati")
End if
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. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Alea » 12/03/12 08:07

Grazie mille....
Tutto ok.
Ciao
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi ricky53 » 12/03/12 12:04

Ciao,
bene,
alla prossima e buon proseguimento.
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. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Flash30005 » 13/03/12 00:04

Ma scusate se nella cella B160 la macro inserisce delle XXX
Codice: Seleziona tutto
Sheets("Ref").Range("B160") = "XXX" ' <<------------ Aggiunta


Farà una sola volta l'aggiornamento e non lo ripete più ne oggi ne mai
se non viene eliminata la stringa "XXX" era questo lo scopo?

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi ricky53 » 13/03/12 01:01

Ciao,
io mi sono basato su quanto era stato scritto da Alea
se nel foglio "Ref" alla cella B160 c'è scritto "0" (zero) o "A" allora esegui la macro, altrimenti no e mi scrivi un messaggio che i dati sono già stati caricati.

Avendo io inserito "XXX" facevo verificare "l'altrimenti no"
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. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Alea » 13/03/12 08:28

Chiedo scusa ragazzi.
L'altro giorno ho provato molto velocemente e mi sono accorto che effettivamente la soluzione non è quella che pensavo. Quello che intendevo aggiungere a questa macro:
Codice: Seleziona tutto
Sub AggiornaELENCO()
If Sheets("Ref").Range("B160") = 0 Or Sheets("Ref").Range("B160") = "A" Then
Call Aggiorna
Else
MsgBox ("Dati gia' caricati")
End If
End Sub

era la possibilità di fare un controllo sul file elenco nel caso in cui avessi già aggiornato i dati.
Adesso infatti non copia più a prescindere i dati anche se ho cancellato la riga:
Codice: Seleziona tutto
Sheets("Ref").Range("B160") = "XXX" ' <<------------ Aggiunta
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Flash30005 » 13/03/12 10:45

Secondo me dovresti chiarire quando vorresti aggiornare e quando devi evitare di aggiornare nuovamente

Penso che se ora apri il file dovrai aggiornarlo
ma se continui ad aggiornare l'aggiornamento non debba avvenire
però se chiudi il file e lo riapri, vorresti che l'aggiornamento avvenga (?)

In questo caso devi inserire il codice in ThisWorkbook_Open
questa riga
Codice: Seleziona tutto
Sheets("Ref").Range("B160").value = 0

ripristinando anche la riga che hai tolto nella macro

Ad ogni apertura del file l'aggiornamento avrà successo

Se invece vuoi che non si aggiorni a parità di data (ad esempio oggi lo apri 10 volte l'aggiornamento deve avvire fino a che non cambia data)
allora devi inserire al posto della riga che hai tolto nella macro
questa riga codice
Codice: Seleziona tutto
Sheets("Ref").Range("B160") = Date ' <<------------ Aggiunta


e in thisworkbook_open
insierirai queste righe codice
Codice: Seleziona tutto
If Sheets("Ref").Range("B160").value <> Date then ' <<------------ Aggiunta
Sheets("Ref").Range("B160").value = 0 ' <<------------ Aggiunta
endif ' <<------------ Aggiunta


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Alea » 13/03/12 13:32

Flash30005 ha scritto:Secondo me dovresti chiarire quando vorresti aggiornare e quando devi evitare di aggiornare nuovamente

Il file funziona in questo modo:
1. una macro apre il file elenco, controlla nella colonna A qual'è il primo numero progressivo disponibile e inserisce nel file CB-TECH nella cella H3 il numero.
2. La macro "AggiornaELENCO", al momento, fa un controllo del tipo: se in B!&= c'è scritto "0" o "A" allora esegui la macro Aggiorna altrimenti no
3. La macro aggiorna copia alcuni dati dal file CB-TECH nel file Elenco.
4. Quello che succede adesso facendo partire questa macro:
Codice: Seleziona tutto
Sub AggiornaELENCO()
If Sheets("Ref").Range("B160") = 0 Or Sheets("Ref").Range("B160") = "A" Then
Call Aggiorna
Else
MsgBox ("Dati gia' caricati")
End If
End Sub


Sub Aggiorna()
    Dim WB_OUT As Workbook
    Dim WS1 As Worksheet, WS2 As Worksheet
    Dim UR As Long, Anno As String
   
    Application.ScreenUpdating = False
    nome = ThisWorkbook.Name
    ChDir "G:\OFFERTE\ELENCO"
    Workbooks.Open Filename:="G:\OFFERTE\ELENCO\Elenco.xls"
    Set WB_OUT = ActiveWorkbook
    Anno = Format(Year(Date), "0000")
    Set WB_OUT = ActiveWorkbook
    Anno = Format(Year(Date), "0000")
    UR = Sheets(Anno).Range("A" & Rows.Count).End(xlUp).Row + 1
   
    Windows(nome).Activate
    Set WS1 = Sheets("QGL10.03b"): Set WS2 = Sheets("Riepilogo")

' H3-I3 su "A..-B.." - numero/anno OFFERTA
    WS1.Range("H3:I3").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

' D1 su "C.." - Codice Progetto
    WS2.Range("D1").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' G1 su "D.." - Data
    WS2.Range("G1").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 4).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' C2 su "E.." - Denominazione
    WS2.Range("D2").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 5).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' G2 su "F.." - Località
    WS2.Range("G2").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
' K14-K17 su "G..-J.." Tabella contatti
    WS2.Range("K14:K17").Copy
    WB_OUT.Sheets(Anno).Cells(UR, 7).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
   
    Application.ScreenUpdating = False

   
    Windows("Elenco.xls").Activate
    ActiveWorkbook.Save
    ActiveWindow.Close

   
    MsgBox "La copia dei dati è stata effettuata"
End Sub

è che se per caso io lancio più volte la macro AggiornaELENCO, i dati da copiare vengono copiati più volte. Visto che ho associato la macro ad un tasto può capitare che mi dimentico di averlo premuto e allora mi trovo nel file elenco più righe uguali.
Quello che serve sarebbe un controllo da fare nella colonna A del file elenco che verifica se i dati sono già stati copiati o meno. La cella principale, sulla quale si può fare questo controllo è H3 nel foglio QGL10.03b del file CB-TECH corrispondente alla colonna A del file elenco.
Forse così sono riuscito a spiegare meglio.
Grazie per la pazienza e scusatemi se non sono stato più chiaro prima.
Ciao
Alea
Utente Senior
 
Post: 145
Iscritto il: 24/07/06 14:12

Re: Copiare valori da un foglio ad un altro in base a numero

Postdi Flash30005 » 13/03/12 14:31

Non avendo i file non posso verificare né analizzare dove intervenire.
In molti casi (i più complicati) dove non ho dei riferimenti precisi e affidabili
adotto, come aggiornamento, la cancellazione di tutto ciò che avevo trascritto e riscrivo di nuovo
Questo sistema è molto valido quando le righe non sono molte (che superano migliaia di righe), come credo sia il tuo caso

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Copiare valori da un foglio ad un altro in base a numero pro":


Chi c’è in linea

Visitano il forum: raimea e 40 ospiti