Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Aggiornamento automatico dati collegati tra 3 files diversi

Ultimo Aggiornamento: 25/03/2021 16:35
Post: 1
Registrato il: 10/12/2017
Città: ASTI
Età: 56
Utente Junior
2013
OFFLINE
10/12/2017 13:16

Buongiorno a tutti,

mi chiamo marco e sono nuovo del forum, per cui spero di non cominciare commettendo errori nel pubblicare la mia prima discussione ;-)

mi trovo a dover gestire una serie di dati con frequenza giornaliera su tre gruppi di file (singoli e multipli) excel diversi.

I dati vengono inseriti su un primo singolo file (che chiameremo per comodità Master.xls) su cui vengono aggiornati manualmente da me ad oggi) circa 50 volte (operazione che non rappresenta un problema)

Il secondo gruppo di files excel (ad oggi circa 800, perfettamente identici, come struttura in termini di celle e formule, che chiameremo per comodità con lettere e numeri tipo BB1, BB2, e coì via) ha ciascuno lo stesso identico collegamento ai fogli del file Master.xlsx; i valori dei collegamenti si aggiornano automaticamente ad ogni aggiornamento dati che faccio manualmente su Master, all'apertura di ogni singolo file (avendo cura di lasciare Master aperto).

Infine ho un terzo singolo file vuoto, che chiameremo Riepilogo.xlsx, che già recupera i dati dai file del secondo gruppo tramite una macro (non sono un mago di VBA, ma ho studiato un po' e preso alcuni esempi, e mi sono "aggiustato"), che apre e chiude ogni singolo file BB1,BB2 etc, andando a scrivere riga per riga le informazioni che si vanno ad aggiornare mano mano che io aggiorno il file Master. La macro funziona bene, mettendoci all'incirca 20 minuti ad aprire e chiudere i circa 800 file (ma sono destinati a crescere ed a diventare circa 1500) lavorando in modalità Application.ScreenUpdating = False

Questa situazione andrebbe abbastanza bene se non fosse che far girare la macro da 20 minuti X 50 volte, fa circa 16 ore ed oltre... Anche lavorando su 2 o tre pc contemporaneamente i tempi sono lunghi, ed al crescere del numero di files del secondo gruppo (fino a circa 1500) temo che la macro allunghi ulteriormente i tempi.
Ho provato a valutare di tenere i file del secondo gruppo aperti (tutti insieme, sono piuttosto piccoli da circa 500KB cad), ma diventa impossibile usare il pc.
Ho cercato di raggruppare in qualche modo i file del secondo gruppo (cercando quindi di ridurre il numero complessivo), ma è difficile perchè sono tutti perfettamente identici (confesso il codice della macro è molto basilare), e contengono ciascuno 11 fogli al proprio interno, di cui 10 di calcolo ed uno di riepilogo, dal quale la macro pesca i dati.

Ho cercato in giro come gestire l'aggiornamento automatico dei collegamenti, in modo "da forzarlo" e non dover aprire ciascun singolo file del secondo gruppo per avere i dati aggiornati ad ogni ciclo di aggiornamento del file Master (la cosa che a mio parere, mi risolverebbe tutti i problemi, andando a modificare la struttura del file Riepilogo, facendolo puntare a sua volta ai singoli file del secondo gruppo), ma non ho trovato nulla in proposito...

Grazie in anticipo per l'aiuto!
Post: 1.701
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
10/12/2017 17:08

Ciao Marco
problema complesso senza vedere i tuoi file (MASTER-BB1(ne basta 1)-RIEPILOGO).

Una curiosità:
- perchè i "file secondari "sono così numerosi" visto che hanno tutti la medesima struttura e formule ?

A parte questo, per quanto riguarda:

"Ho cercato in giro come gestire l'aggiornamento automatico dei collegamenti, in modo "da forzarlo" e non dover aprire ciascun singolo file del secondo gruppo per avere i dati aggiornati ad ogni ciclo di aggiornamento del file Master (la cosa che a mio parere, mi risolverebbe tutti i problemi, andando a modificare la struttura del file Riepilogo, facendolo puntare a sua volta ai singoli file del secondo gruppo), ma non ho trovato nulla in proposito..."



Se i file "secondari" fossero tutti nella medesima cartella, potresti fare (escludendo eventualmente MASTER e RIEPILOGO), qualcosa del genere:

Sub refreshALL()
    Dim fso As Object
    Dim folder As Object
    Dim file As Object
    Path = "C:\TuaCartella\"  '>>>>>>>>Modificare
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(Path)
    
    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
        .EnableEvents = False
        .AskToUpdateLinks = False
    End With
    For Each file In folder.Files

'>>>>>>>>>>>>>>>QUI L'EVENTUALE ESCLUSIONE DI FILE <<<<<<<<<

        If Right(file.Name, 4) = "xlsx" Then
            Workbooks.Open Path & file.Name
            ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
            ActiveWorkbook.Close True
         End If
    Next
        With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
        .EnableEvents = True
        .AskToUpdateLinks = True
    End With
Set fso = Nothing
End Sub


A questo punto dovresti avere tutti i file aggiornati (valuta i tempi di esecuzione e magari fai un controllo a campione per sicurezza).

Ora, però, nell'eseguire la macro di "Riepilogo" dovresti all'inizio, non solo utilizzare:
-Application.ScreenUpdating = False
ma soprattutto:
-Application.DisplayAlerts = False
-Application.EnableEvents =False

Per poi ripristinarli alla fine, in modo tale che excel non ti chieda il "refresh" delle formule.

Fai qualche prova.

Ti ricordo infine che ci sono modi diversi di leggere file esterni "senza aprirli fisicamente". In rete ne trovi diversi (QUI trovi un esempio).
All'interno di quel link ne trovi un altro che potrebbe particolarmente interessarti:" How to Read Multiple Excel Files and Merge Data into a Single File using VBA"


Saluti



[Modificato da dodo47 10/12/2017 17:24]
Domenico
Win 10 - Excel 2016
Post: 1
Registrato il: 10/12/2017
Città: ASTI
Età: 56
Utente Junior
2013
OFFLINE
11/12/2017 14:43

Re:
dodo47, 10/12/2017 17.08:

Ciao Marco
problema complesso senza vedere i tuoi file (MASTER-BB1(ne basta 1)-RIEPILOGO).

Una curiosità:
- perchè i "file secondari "sono così numerosi" visto che hanno tutti la medesima struttura e formule ?

-> ciascun file fa riferimento ad una coppia di valori (sempre diversi) su cui applico però le stesse operazioni matematiche

A parte questo, per quanto riguarda:

"Ho cercato in giro come gestire l'aggiornamento automatico dei collegamenti, in modo "da forzarlo" e non dover aprire ciascun singolo file del secondo gruppo per avere i dati aggiornati ad ogni ciclo di aggiornamento del file Master (la cosa che a mio parere, mi risolverebbe tutti i problemi, andando a modificare la struttura del file Riepilogo, facendolo puntare a sua volta ai singoli file del secondo gruppo), ma non ho trovato nulla in proposito..."



Se i file "secondari" fossero tutti nella medesima cartella, potresti fare (escludendo eventualmente MASTER e RIEPILOGO), qualcosa del genere:

Sub refreshALL() 
Dim fso As Object
Dim folder As Object
Dim file As Object
Path = "C:\TuaCartella\" '>>>>>>>>Modificare
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(Path)

With Application
.DisplayAlerts = False
.ScreenUpdating = False
.EnableEvents = False
.AskToUpdateLinks = False
End With
For Each file In folder.Files

'>>>>>>>>>>>>>>>QUI L'EVENTUALE ESCLUSIONE DI FILE <<<<<<<<<

If Right(file.Name, 4) = "xlsx" Then
Workbooks.Open Path & file.Name
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
ActiveWorkbook.Close True
End If
Next
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.EnableEvents = True
.AskToUpdateLinks = True
End With
Set fso = Nothing
End Sub


A questo punto dovresti avere tutti i file aggiornati (valuta i tempi di esecuzione e magari fai un controllo a campione per sicurezza).

-> i file sono tutti nella stessa cartella, ed ho effettuato un controllo come da te suggerito; effettivamente ci impeiaga alcuni minuti di meno a "refreshare" i files :-) grazie per la dritta

Ora, però, nell'eseguire la macro di "Riepilogo" dovresti all'inizio, non solo utilizzare:

-Application.ScreenUpdating = False
ma soprattutto:
-Application.DisplayAlerts = False
-Application.EnableEvents =False

Per poi ripristinarli alla fine, in modo tale che excel non ti chieda il "refresh" delle formule.

Fai qualche prova.

-> ho fatto alcuni test, ma in questo caso non ho avuto un miglioramento

Ti ricordo infine che ci sono modi diversi di leggere file esterni "senza aprirli fisicamente". In rete ne trovi diversi (QUI trovi un esempio).
All'interno di quel link ne trovi un altro che potrebbe particolarmente interessarti:" How to Read Multiple Excel Files and Merge Data into a Single File using VBA"

-> ora mi studio il VBA del link che mi hai fornito, ma credo che il punto cruciale sia che, con la mia macro, aprendo i file del secondo gruppo e leggendoli, faccio le operazioni contemporaneamente (aggiornamento dei dati dei file del secondo gruppo, collegati al file Master del primo gruppo, e copia dei valori sul file finale Riepilogo). Ergo andando a leggere i file "da fisicamente chiusi", avrei sempre il problema del refresh (al quale posso ovviare però con il tuo codice)... devo verificare la somma totale dei tempi (mia macro, che fa 3 operazioni - apertura, aggiornamento e lettura/copia - Vs. codice refresh + VBA lettura file, ma senza aprirli fisicamente)

grazie cmq per le info che mi hai dato, continuo a provare!

Saluti






Post: 0
Registrato il: 25/03/2021
Età: 36
Utente Junior
excel 2010
OFFLINE
25/03/2021 15:57

Buonasera a tutti, anch'io sono al mio primo intervento in questo prezioso forum di cui fino ad ora ho fruito come ospite.
Mi trovo con un problema molto simile a m19681968 e che espongo di seguito.

ho 3 tipi di file con tre livelli di collegamenti: un file chiamato "Origine dati", dove inserisco dei valori; più di 200 file nominati ognuno con un codice e strutturati allo stesso modo nei quali sono presenti dati da Origine dati sottoposti ad alcune operazioni e infine un file "riepilogo" che pesca dati nei 200 file precedenti.

obiettivo: fare in modo che eventuali modifiche al file "Origine dati" vengano viste in automatico nel file "riepilogo".
Come m19681968 ho fatto una macro che apre e chiude ognuno dei 200 file ma mi sono ritrovato con lo stesso problema dei tempi biblici di esecuzione.

@alfrimpa ti taggo come moderatore per chiedere se il mio problema si può considerare continuativo di questa discussione o se aprirne una nuova, e ti invoco come vba expert per un aiuto

ringrazio in anticipo,

Giuseppe
Post: 4.634
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
25/03/2021 16:07

Io non sono moderatore di questo forum ma ti consiglio comunque, per avere maggiore "visibilià" di aprire una nuova discussione allegando pure file di esempio con i dati ed il risultato voluto costruito a mano.

Alfredo
Post: 1
Registrato il: 25/03/2021
Età: 36
Utente Junior
excel 2010
OFFLINE
25/03/2021 16:10

Grazie Alfredo,

evidentemente ho sbagliato tag 😅
[Modificato da peppets 25/03/2021 16:13]
Post: 6.319
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
25/03/2021 16:35

Ciao, a mio parere, tutta quella mole di file credo che sia inutile, in quanto basterebbe solo il file Master, come ha specificato Domenico che saluto, al limite il file di riepilogo.

cosa trasferisci nel singolo file BBxxxx di cosa si aggiorna?

non ho visto la struttura dei tuoi file ma nel file riepilogo avere un elenco di tutti i nomi dei file BBxxx, ed all'occorrenza facendo una scelta venga creata una copia da un modello con il titolo BBxxx, per essere distribuito o altro.

perche hai necessità di avere tutte queste copie?, basta fare una copia di Backup del file master nel salvataggio con diverse date, nel caso di perdita dati.

comunque manca un esempio dei file, per un parere più approfondito.

Ciao By sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 09:16. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com