Condividi:        

[Excel] Copiare un Foglio di lavoro su tanti altri file

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

[Excel] Copiare un Foglio di lavoro su tanti altri file

Postdi antom » 25/09/08 10:08

Salve a tutti.
Devo copiare 2 tab da un file in altri 400 (quattrocento). Data la grande quantità di file mi domdavo se era possobile effettuare questa operazione SENZA APRIRE I 400 FILE.
Chiaramente il Copia tab implica la presenza nelle formule il riferimento nei file destinazione del file origine (si capisce in italiano??? Scusate sono un pò stanca...)
Allora ho pensato che prima di salvare i file destinazione si potrebbe fare una ricerca nelle stringhe formule e sostituire ;[nomefileorigine] con ; in modo da riotterenere il riferimento corretto.

Spero di essermi fatta capire... :oops:

Le formule con i riferimenti ad altro tab (che si lega quindi al file) sono presenti nel range A3:A27, e la stringa da eliminare è [F_MACRO_VB.xls] (16 caratteri).

Grazie mille,
antom
antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26

Sponsor
 

Re: [Excel] modificare file chiuso.

Postdi Anthony47 » 25/09/08 11:26

antom ha scritto:Chiaramente il Copia tab implica la presenza nelle formule il riferimento nei file destinazione del file origine (si capisce in italiano??? Scusate sono un pò stanca...)

Sara' che sono stanco anche io ma la risposta e' "no, non per me" :D
Innanzitutto che cosa intendi con "tab"? Devi "copiare" dei dati da un file.xls (una cartella di lavoro excel) in altri 400 files.xls? O questi dati sono semplicemente collegati (cioe' richiamati) dai 400 files? Ti chiedi se sia possibile fare l' operazione "senza aprire i 400 files", ma poi dici che hai pensato di fare una certa cosa prima di salvare e chiudere i [400] files; mi sembrano ipotesi che non si collegano. Infine che cosa e' quel ";[nomefileorigine]" che pensi di eliminare.

Ce n' e' abbastanza per farti capire che ..non ho capito molte cose del problema. Dovresti quindi: 1) fare una pausa caffe' e 2) riprovare a descrivere il problema e, separatamente, la soluzione che hai in mente.

Ciao, ti aspettiamo.
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

[Excel] modificare file chiuso.

Postdi antom » 25/09/08 14:36

Ciao Anthony47!
Sei troppo divertente! :D
Spiego passo passo, anche per me.
Ho un file origine.xls e 400 file dest001.xls, dest002.xls, ...
origine.xls:
in foglio1 A3 ho un dato.
in foglio2 A3:A27 ho una formula del tipo SE(qualcosa;foglio1!A2;"")

destxxx.xls:
in foglio1 A3 ho un dato.

PROBLEMA 1. Devo copiare nei 400 file foglio2 del file origine.xls :eeh:
Esiste un modo per farlo in automatico tramite macro senza aprire i file destxxx.xls?


PROBLEMA 2. Sono sul file origine.xls. Clicco con il destro sull'etichetta "foglio2". Quando faccio l'operazione "Sposta/Copia" e vado nel file destxxx.xls -> foglio2 -> A3 vedo che la formula di cui sopra è diventata:
SE(qualcosa;[origine.xls]foglio1!A2;"")
E' possibile NELLA STESSA MACRO dire: istruzione1 copia il tab (cioè la scheda, il foglio di lavoro) foglio2;
istruzione2 nel range A3:A27 (di foglio2 - file destxxx.xls) cerca la stringa ;[origine.xls] e sostituiscila con ;

PROBLEMA 3. I 400 file sono sparsi in sottodirectory. Io posso fornire solo il percorso dell cartella padre.
come gli si dice ad excel???

Quindi scrivo la macro nel file origine.xls che è l'unico file che apro e questa mi andrà a lavorare su file excel che sono dentro le n cartelle della cartella padre.

Wow!!!
Ce l'ho fatta!! :neutral: :neutral: :eeh: :eeh: :neutral: :eeh: :eeh: :?: :?: :?: :neutral: :neutral: :undecided:
antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26

Re: [Excel] modificare file chiuso.

Postdi Anthony47 » 25/09/08 16:06

Adesso e' alquanto comprensibile, brava.
Ho pero' ancora una domanda, necessaria per proporre qualcosa: se sicura che devi copiare da Origine a Destxxx le formule? non e' sufficiente copiare i valori?
Poi, sbaglio o tu hai excel 2007? se SI, e' possibile lanciare una finestra Dos (in Xp lo fai da Start /Esegui; cmd)? se SI, se lanci (dalla finestra Dos) il comando attrib Dest*.xls vedi i tuoi 400 files o va in errore?
Altre domande utili per una soluzione alternativa: questa copia (da Origine a Destxxx) va fatta una tantum o periodicamente?

Intanto una prima risposta
D: Esiste un modo per farlo in automatico tramite macro senza aprire i file destxxx.xls?
R: No, ma per una macro aprire 400 files non e' un problema.

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

[Excel] Copia foglio in n (tanti) file

Postdi antom » 26/09/08 17:40

Ciao Anthony47.
Come vedi ho cambiato oggetto del messaggi0 perchè la tua risposta non da adito a equivoci.

Il comando attrib funziona. Lavoro con Vista e excel 2007, ma i file sono compatibili con 97/2003.
Ho proprio bisogno delle formule nei 400 file in quanto devono "replicare" il file origine.xls.

La struttura su cui lavoro è sì fatta:

cartella
|
|_sub1
| |_dest001.xls
| |_dest002.xls
| |_dest003.xls
|
|_sub2
| |_dest001.xls
| |_dest002.xls
|
|_sub3
| |_dest001.xls
| |_dest002.xls
| |_dest003.xls

..e così via...

Grazie ancora infinite,
antom
antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26

Re: [Excel] modificare file chiuso.

Postdi Anthony47 » 27/09/08 01:12

Allora...
Cominciamo con l' elenco dei file da modificare; avendo tu excel 2007 non possiamo usare FileSearch, quindi lo facciamo con attrib:
-apri una finestra di dos
-usa il comando CD per andare alla cartella che contiene le sottocartelle con i vari file; la cosa piu' semplice potrebbe essere scrivere direttamente il path completo, es CD C:\Documents and Settings\Utentexx\Documenti\Directory_A
-quindi lancia il comando "ATTRIB dest*.xls /s >C:\pippo123.txt" (senza apici)
-apri il file C:\pippo123.txt e controlla che contenga qualcosa che somigli effettivamente al path completo + nome dei tuoi files
-vai sul file che contiene il foglio da copiare, inserisci un nuovo foglio e chiamalo "attrib", importa da A1 il contenuto del file pippo123.txt. Procedura:
>seleziona A1
>Menu /Dati /Importa dati esterni /Importa dati
>scegli Tipo file=txt e vai a scegliere in C: il file pippo123.txt; premi Apri
>scegliere Larghezza fissa, Avanti
>togliere eventuali separatori di colonna gia' presenti nell' anteprima dati (sono delle linee verticali sovrapposte al testo, fare doppioclick per cancellarle), e inserirne 1 solo subito prima di c:\ (fare click per inserire)
>premere Fine

-in questo modo avrai in col B, da B1, tutti i file che sono da manipolare; se prima, sul txt, hai fatto una verifica di verosimiglianza qui fai una verifica approfondita che ci siano tutti e non ci siano file estranei, perche' la macro lavorera' su questo elenco. Se c' e' qualche file che vuoi togliere basta eliminare tutta la riga, lasciando l' elenco senza vuoti intermedi. Se VUOI FARE UN TEST PRELIMINARE, ad esempio, basta lasciare in questo elenco solo pochi files.

-inserisci questa macro su un Modulo di codice:
Codice: Seleziona tutto
Sub GodSaveAntom()
Dim CopySh As String, CopiedSh As String, NextName As String, StWB As String
Dim FlEx As Integer
CopySh = "Foglio3"      '<<< Il foglio che deve essere replicato
CopiedSh = "Foglio11"     '<<< Come sara' chiamato il foglio copiato
StWB = ThisWorkbook.Name
'
Sheets(CopySh).Select: I = 0
'
Do
Windows(StWB).Activate
Sheets(CopySh).Select
NextName = Sheets("attrib").Range("B1").Offset(I, 0).Value
If NextName = "" Then GoTo Exita
Application.DisplayAlerts = False
Workbooks.Open Filename:=NextName, UpdateLinks:=0
OWb = ActiveWorkbook.Name
FlEx = 0
'Check se nome foglio gia' esiste; se SI cancella il contenuto
'   se NO lo crea
For W = 1 To ActiveWorkbook.Worksheets.Count
If Sheets(W).Name = CopiedSh Then
    Sheets(W).Select
'    Sheets(W).Copy After:=Worksheets(Worksheets.Count)   '<<<< NOTA ***
'    Sheets(W).Select                                                           '<<<< NOTA ***
    Cells.Clear: FlEx = 1: Exit For
    End If
Next W
If FlEx = 0 Then
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = CopiedSh
    End If
Workbooks(StWB).Sheets(CopySh).Cells.Copy _
Destination:=Range("A1")
K = 0
Set FCella = Cells.Find(StWB, LookIn:=xlFormulas)
If Not FCella Is Nothing Then
Do
K = K + 1
  FCella.Replace What:=("[" & StWB & "]"), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
  Set FCella = Cells.FindNext(FCella)
Loop While Not FCella Is Nothing
End If
Workbooks(OWb).Close SaveChanges:=True
Sheets("attrib").Range("B1").Offset(I, 1).Value = FlEx  'Flag Exist
Sheets("attrib").Range("B1").Offset(I, 2).Value = K     'N° di replace
I = I + 1
Loop
Exita:
End Sub


Guarda le due istruzioni marcate <<<, che specificano quale foglio deve essere copiato dal file corrente e come sara' chiamato sul file di destinazione.

Fai il backup di tutti i file:
-le tecniche sono tante, potrebbe essere sufficiente creare una directory di servizio e da Windows explorer copiarvi tutta la directory dei documenti con le sue sottodirectories.
-ricorda che il backup e' l' unico modo per proteggere i dati

Quando sei pronta, lancia la macro.
Questa il primo file presente nell' elenco del foglio attrib, verifica se esiste gia' un foglio col nome del foglio che vogliamo inserire; se c' e' lo CANCELLA TUTTO (Nota **), se non c' e' lo crea; poi copia il foglio definito tramite CopySh, modifica le formule, chiude salvando le modifiche.
Ripete per ogni file fino a trovare un "vuoto" nell' elenco.
Nota**: in alternativa e' possibile creare una copia di questo foglio; basta scommentare le due istruzioni che nel listato sono marcate <<<< NOTA ***

A scopo di report, sul foglio attrib, accanto a ogni nome file viene segnato se il foglio esisteva gia' (1 in col C) e quante formule sono state modificate (ovviamente dovrebbe essere uguale su tutti i file).

Raccomando ancora una volta il backup dei dati.

E.. in bocca al lupo.
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Copiare un Foglio di lavoro su tanti altri file

Postdi antom » 29/09/08 10:16

Ciao Anthony47.
Come sempre mi stupisci! E la tua ironia è spettacolare!! :lol: :lol:
Sto seguendo passo passo il tuo codice ma ho una piccola modifica da apporre al check "se foglio esiste".
Infatti dovrebbe essere:
se foglio esiste passa al File successivo,
altrimenti esegui tutta la procedura per copiare il foglio e "sistemare" le formule.

Non mi è molto chiaro il tuo commento dopo il codice perchè in esso è ripetuto <<<NOTA***.

Grazie ancora infinite,
Antom
antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26

Re: [Excel] Copiare un Foglio di lavoro su tanti altri file

Postdi Anthony47 » 29/09/08 15:58

Allora, se vuoi saltare il file che gia' contenga un foglio col nome specificato in CopiedSh, inserisci queste 2 istruzioni in questa posizione:
Codice: Seleziona tutto
If Sheets(W).Name = CopiedSh Then
K=0                          '<<< AGGIUNTA
Goto Skipp               '<<< AGGIUNTA
    Sheets(W).Select

E poi questa
Codice: Seleziona tutto
End If
Skipp:                   '<<< AGGIUNTA
Workbooks(OWb).Close SaveChanges:=True

Le istruzioni aggiunte sono marcate <<< AGGIUNTA, le altre sono riportate per evidenziare la posizione.

Le 2 istruzioni marcate <<<< Nota *** vanno a braccetto: se escluse (come lo sono se hanno il segno di "commento" a inizio riga) la macro si limita a cancellare il contenuto del foglio CopiedSh; se eseguite (togliere l' apostrofo in testa) tale foglio viene prima ricopiato e poi cancellato; ti ritrovi quindi un foglio chiamato diciamo "Foglio11 (2)" e uno chiamato "Foglio11". Con le istruzioni aggiunte comunque tutto il blocco diventa inutile, ma comunque non da' fastidio.

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

[Excel] Copiare un Foglio di lavoro su tanti altri file

Postdi antom » 01/10/08 11:03

Ciao Anthony47.
Il tutto funziona alla grandissima!!
Tra l'altro il metodo di elencare i file su cui lavorare in un foglio mi ottimizza molte operazioni!
Quindi grazie davvero!

Una domanda di sintassi: qual è il significato dei due punti?
Ad un certo punto, all'interno dell'If, scrivi: Cells.Clear: FlEx = 1: Exit For
Cosa accade in VBA?
Grazie ancora,
Antom
antom
Utente Junior
 
Post: 24
Iscritto il: 07/09/08 09:26

Re: [Excel] Copiare un Foglio di lavoro su tanti altri file

Postdi Anthony47 » 01/10/08 11:40

Son contento che funzioni!

Per quanto riguarda i ":", separano piu' istruzioni e basta.
Possono tornare utili in una situazione quale
If Condizione Then Istruzione1: Istruzione 2 : Istruzione 3
Le 3 istruzioni vengono eseguite tutte se la condizione e' vera.

Ciao, alla prossima.
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Copiare un Foglio di lavoro su tanti altri file":


Chi c’è in linea

Visitano il forum: Nessuno e 37 ospiti