Condividi:        

[Excel] Importare dati da files differenti

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] Importare dati da files differenti

Postdi gik » 26/04/07 12:13

Salve a tutti, ho ancora un problemone da sottoporvi:

Ho una serie di files excel ciascuno con una scheda in cui sono inseriti dei dati.
Vorrei creare un file di riepilogo in cui inserire alcuni dati estratti dalle schede suindicate. Come fare?

Ad esempio ho 5 files in una cartella e vorrei copiare da ogni file i valori contenuti nelle celle A1, B2, C3, D4.
Vorrei inserire questi dati nel file riepilogativo, mettendoli in riga per ciascuna scheda.
Avrò perciò nel file riepilogo tante righe quanti sono i files (nell'esempio 5). Nella prima riga inserirò i dati della scheda 1 e inserirò in A1 il valore di A1 (scheda1); in B1 inserirò B2 (scheda1); in C1 avrò C3 (scheda1); in D1 andrà D4 (scheda1).
Analogamente nella riga 2 inserirò gli stessi valori estratti dalla scheda2.

Qual'è il problema?
I files delle schede hanno tutti nomi differenti, non solo per ciò che riguarda il numero identificativo.
Potrei creare un file con tutti i nomi delle schede e farli "leggere" da excel....

Qualche idea? Grazie
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Sponsor
 

Postdi Anthony47 » 27/04/07 06:17

Ciao, ti do’ dei pezzi di codice presi da risposte date ad altri utenti che devi “montare”, ma mi pare che sei abbastanza smaliziato in materia.
1- ti leggi i nomi dei file nella tua directory:

Codice: Seleziona tutto
SourceDir = "C:\pippo"       '<<<< Aggiustare
Set fs = Application.FileSearch
With fs
    .LookIn = SourceDir
    .SearchSubFolders = False
.Filename = "*.*"
If .Execute() = 0 Then
    MsgBox "No files in " & SourceDir
    Exit sub
End If
End With
'Trovati file:
With fs
MsgBox "Ci sono " & .FoundFiles.Count & " file(s) found."    '1
        For i = 1 To .FoundFiles.Count
NomeFile = .FoundFiles(i)
MsgBox NomeFile                                           '2

.
. qui ci metterai le istruzioni per aprire il file il cui nome completo (directory + nome) e’ nella variabile NomeFile, prendere i dati dalle celle che ti servono e metterle in coda all’ elenco preesistente (vedi Sotto)
.
.
     Next i
End With

Le righe con commento 1 e 2 sono opzionali, finite il debug possono essere cancellate o solo “commentate” anteponendo ad esse il segno “apostrofo”.

2- le istruzioni per aprire il file e chiuderlo a fine operazione le puoi registrare; le istruzioni restituite da recorder le copierai nella macro “master” (quella del punto 1), ma sostituirai poi il nome che hai digitato con la variabile NomeFile

3- Le istruzioni per copiare dal file NomeFile e scrivere nel file di sintesi le puoi anche queste registrare e poi copiare nella “master”; qui dovrai sostituire le istruzioni che determinano la cella su cui fai incolla:
-la cella di colonna A la selezioni con
Codice: Seleziona tutto
Range(“A65536").End(xlup).Offset(1,0).Select

-la cella su cui incollare il secondo valore (B2 da scheda) la selezioni con
Codice: Seleziona tutto
Activecell.offset(0,1).select

-idem per le altre 2 celle

Prova a comporre la tua macro, poi fatti sentire.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19442
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi gik » 03/05/07 14:00

Come al solito Antony 6 un grande ;)

Funziona tutto benone, ma c'è un problema:

Utilizzando l'espressione
Codice: Seleziona tutto
For i = 1 To .FoundFiles.Count
        nomefile = .FoundFiles(i)


la macro assegnerà il codice i ai file che apre di volta in volta.
In questo modo, per non perdere l'indice i, non posso chiudere ogni file che si apre, quindi se nella cartella ci sono 300 files la macro cercherà di tenere aperti tutti e 300 i files, cosa questa che provoca un blocco per insufficienza di memoria.

Ho provato a chiudere il file ad ogni ciclo, ma apre sempre lo stesso file.

PS
Come si fa a bloccare una macro una volta avviata?
PPSS
immettendo
Codice: Seleziona tutto
EnableCalculation = False

la macro dovrebbe bloccare il calcolo automatico, ciò accade anche per l'aggiornamento dei grafici? (Ho il problema che nel mio file di sommario ci sono dei grafici che si rigenerano ogni volta che la macro aggiunge una riga)
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Postdi gik » 03/05/07 14:40

Come al solito mi autorispondo,
..per non perdere l'indice i, non posso chiudere ogni file che si apre

non è vero, l'indice è indipendente dai files aperti, infatti nel caso si dovesse bloccare la macro posso riavviarla modificando il numero di inizio del ciclo for, saltando le righe già inserite.

è bastato inserire
Codice: Seleziona tutto
ActiveWindow.Close

dopo le istruzioni di lettura dal file "nomefile" per risolvere il problema.

Resta ancora aperta la domanda:
- come si blocca una macro avviata?
e aggiungo
- come chiudo le finestre pop-up che si aprono all'apertura e chiusura di un file?
Mi spiego meglio, in chiusura mi chiede il salvataggio, in apertura mi chiede se voglio aggiornare le informazioni collegate, visto che la cartella contiene collegamenti automatici ad informazioni presenti su di un'altra cartella.
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Postdi gik » 03/05/07 14:43

Codice: Seleziona tutto
ActiveWindow.Close SaveChanges:=False
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Postdi Anthony47 » 03/05/07 22:30

Bene, mi pare che oramai fai tutto da solo!

Perche' non provi a pubblicare l' esito del tuo lavoro, certamente qualcuno trovera' spunti interessanti? (e' il concetto del forum: si prende e si da')

Per quanto riguarda il break, puoi usare ESC.
Non so se li usi gia', ma in fase di debug e' utile settare dei breakpoint sul codice (selezioni una riga, poi con F9 metti/togli il break) ed eseguire il codice passo passo (ogni F8 una istruzione; F5 per riprendere).

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

Postdi gik » 04/05/07 07:56

Come faccio ad eliminare il popup presente in apertura di files?

in apertura mi chiede se voglio aggiornare le informazioni collegate, visto che la cartella contiene collegamenti automatici ad informazioni presenti su di un'altra cartella.

Perche' non provi a pubblicare l' esito del tuo lavoro

Sisssì, ci avevo già pensato, infatti mi rispondo da solo anche per questo, per condividere quello che "scopro", sperando che possa essere d'aiuto ad altri naufraghi del VBA.
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Postdi gik » 04/05/07 08:08

Codice: Seleziona tutto
Sub Summary_schede()

'compila il file TABELLONE RIASSUNTIVO
'prelevando i dati delle SCHEDE
'inserite nella cartella SCHEDE

'legge i file presenti nella cartella seguente
SourceDir = "C:\Tabellone     '<<<< Aggiornare con il path reale

Set fs = Application.FileSearch
With fs
    .LookIn = SourceDir
    .SearchSubFolders = False
    .Filename = "*.*"
If .Execute() = 0 Then
    MsgBox "No files in " & SourceDir
    Exit Sub
End If
End With
'Trovati i file:
With fs
'MsgBox "Ci sono " & .FoundFiles.Count & " file(s) found."      '1
'per ciascun file presente in SCHEDE opera:

EnableCalculation = False

        For i = 1 To .FoundFiles.Count
        nomefile = .FoundFiles(i)
       
        ' MsgBox nomefile                                                     '2

'apri il file (i)
        Workbooks.Open (nomefile)

'concatena i 3 codici parziali per dare un codice clobale
        Dim codice As String
        Set c1 = Range("L16")
        Set c2 = Range("L17")
        Set c3 = Range("L18")
       
        codice = c1 & "-" & c2 & "-" & c3   
        Dato1 = Range("D16").Value
        Dato2 = Range("D17").Value
        Dato3 = Range("D18").Text
        Dato4 = Range("L19").Text

'una volta letti i dati necessari dal file (i) questo viene chiuso

ActiveWindow.Close SaveChanges:=False

Windows("TABELLONE RIASSUNTIVO.xls").Activate
       
        Range("A65536").End(xlUp).Offset(1, 0).Value = codice
        Range("B65536").End(xlUp).Offset(1, 0).Value = Dato1
        Range("C65536").End(xlUp).Offset(1, 0).Value = Dato2
        Range("D65536").End(xlUp).Offset(1, 0).Value = Dato3
        Range("E65536").End(xlUp).Offset(1, 0).Value = Dato4
       
        Next i

End With

EnableCalculation = True

End Sub


Questo è quello che ho tirato fuori in modo un po' frettoloso.
Si accettano proposte di modifiche per rendere la macro meno pesante.
Per disattivare il calcolo automatico va bene la procedura che ho seguito?
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Postdi Anthony47 » 04/05/07 17:25

Come faccio ad eliminare il popup presente in apertura di files?

Inserisci questa PRIMA di Workbooks.Open (nomefile)

Codice: Seleziona tutto
Application.DisplayAlerts = False


La macro e' lineare e semplice da manutenere, io la lascerei cosi' salvo sostituire le istruzioni in coda con queste:

Codice: Seleziona tutto
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveCell.Value = codice
ActiveCell.Offset(0, 1).Value = Dato1
ActiveCell.Offset(0, 2).Value = Dato2
ActiveCell.Offset(0, 3).Value = Dato3
ActiveCell.Offset(0, 4).Value = Dato4


Questo per garantire l' allineamento dei dati sulla stessa riga anche in presenza di eventuali celle vuote nei dati che copi; con il metodo End(xlUp) su ogni colonna infatti rischieresti di calcolare righe diverse.

Se hai bisogni di velocizzare l' esecuzione, potresti inserire all' inizio
Codice: Seleziona tutto
Application.ScreenUpdating = False

e in coda
Codice: Seleziona tutto
Application.ScreenUpdating = True


Con queste lo schermo e' bloccato durante l' esecuzione, quindi e' tutto piu' veloce ma perdi l' avanzare del lavoro; oppure metti queste istruzioni prima e dopo il blocco di istruzioni che ti ho suggerito di modificare, "=True" in testa e "=False" in coda, cosi' vedi l' accumulo dei dati su TABELLONE RIASSUNTIVO.

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

Postdi gik » 07/05/07 07:52

tnx ;)
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Re: [Excel] Importare dati da files differenti

Postdi tonisa » 20/10/08 13:30

Ciao, dovrei importare i dati da file excel differenti e metterli in un unico file. Potreste indicarmi qualche guida per fare bene questa cosa? O aiutarmi in qualche modo?
Non ho mai creato una macro su excel quindi leggendo i post precedenti su quest'argomento non ho ancora ben capito come fare. Grazie
tonisa
Newbie
 
Post: 9
Iscritto il: 20/10/08 11:19

Re: [Excel] Importare dati da files differenti

Postdi Anthony47 » 20/10/08 15:30

Ciao tonisa e benvenuto nel forum.
Ci sono state varie discussioni che hanno trattato un argomento simile al tuo; ti suggerisco di partire da questo: viewtopic.php?f=26&t=75674&hilit=anthony&start=0 e allargare alle altre discussione linkate all' interno.

Se ci riesci, applica quanto gia' scritto; oppure posta ancora pero' con maggiore descrizione della tua situazione.

Piuttosto che continuare questa discussione ti suggersico di aprirne un' altra solo per te.

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


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Importare dati da files differenti":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti