Condividi:        

Creare file copiando valori da files esterni

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

Creare file copiando valori da files esterni

Postdi BG66 » 07/06/17 23:04

Ciao a tutti,
sono riuscito a creare il presupposto aziendale(i files sorgente in una cartella unica) per riprendere lo sviluppo di un progetto nato (grazie a Ricky) con un mio thread di marzo (http://www.pc-facile.com/forum/viewtopic.php?f=26&t=108268).
L'obiettivo finale è che lanciando una macro dal file "masterdata_2017(ricky)"si possa:
1) verificare che i files presenti nella cartella C:\Forni2017 e nelle sottocartelle divise per mese (es. GENNAIO) siano già caricati nel foglio "DataBase_Gen17" -> predisposto foglio "Helper"
2)In caso contrario, aggregare, accodandoli, in detto foglio, i valori presenti nelle celle specifiche di tutti gli impianti (sono 12).
3) avviare la macro "AggProd" (by Anthony) prelevando le 4 formule nel foglio "Helper" -> H2:K2
4) che al cambio del mese i nuovi dati vengano copiati in un nuovo foglio DataBase_Feb17 etc

https://www.dropbox.com/s/qg111lvplqkyqrp/masterdata_2017%28ricky%29.xls?dl=0

Nella macro attuale, tra le tante mancanze :oops: non sono riuscito ad ottenere:
1) Che se già presente il foglio: "DataBase_Gen17" questo venga sovrascritto -> attualmente và in debug.
2) accodare in sequenza gli altri impianti

PS ri-evidenzio in maniera esplicita che il foglio "forno_T09" e gli altri presenti in cartella (es.T10_GENNAIO_2017.xlsm, T11_GENNAIO_2017.xlsm etc) sono su apposita partizione del disco aziendale (es. G:\FORNI_2017\GENNAIO)

Tanta carne a cuocere che immagino debba essere splittata in diversi thread ma ho preferito darvi il quadro completo e poi farmi condurre da voi.
Qualsasi altra soluzione/ semplificazione che vogliate suggerirmi è altamente gradita.

Grazie in anticipo.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Sponsor
 

Re: Creare file copiando valori da files esterni

Postdi BG66 » 07/06/17 23:32

continua per modifica fuori tempo massimo:

il punto 2) andava implementato evidenziando che dati riportati andrebbero sommati per turno
Immagine

Grazie ancora.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Creare file copiando valori da files esterni

Postdi Anthony47 » 08/06/17 02:04

Purtroppo non sei fortunato: Ricky e' un po' che non si fa vedere, e io nella discussione che hai citato ero stato alla finestra senza seguire attentamente come andava avanti; quindi devi descrivere con dovizia di particolari.
Cominciamo con il primo passo:
1) verificare che i files presenti nella cartella C:\Forni2017 e nelle sottocartelle divise per mese (es. GENNAIO) siano già caricati nel foglio "DataBase_Gen17" -> predisposto foglio "Helper"
2)In caso contrario, aggregare, accodandoli, in detto foglio, i valori presenti nelle celle specifiche di tutti gli impianti (sono 12).

Quindi il percorso C:\Forni2017 contiene 12 Cartelle contenenti N file? C'e' una regola di assegnazione dei nomi file; ad esempio Nome forno /Data? Quale e' la struttura di questi file? Quanti ce ne sono? Quelli "importati" devono rimanere invariati nella loro cartella mensile, o possono essere Rinominati, o Spostati in altra sottocartella? Tutti i file presenti in C:\Forni2017\Mese sono idonei a essere importati, o bisogna verificare qualcosa? Nel foglio Helper hai intenzione di elencare i file che sono gia' stati importati? Perche' hai previsto colonne quali Data creazione /Data ultima modifica /Data ultimo accesso?
Il file Masterdata.xls conterra' anche lui 12 fogli di lavoro chiamati DataBase_Gen17, DataBase_Feb17, DataBase_Mar17 etc etc?

Mi porto avanti anche con una domanda relativa ai punti successivi: quale e' il significato del foglio forno_T09? Visto che parli di "12 impianti", ci saranno /dovranno essere 12 fogli "forno_XYZ"?
Quali sono le operazioni svolte dalle due macro presenti nel file?

Non escludo che alcune domande siano inutili, perche' riferite a situazioni gia' risolte; in questo caso pero' allora devi spiegare su quali aspetti ti serve un aiutino.

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

Re: Creare file copiando valori da files esterni

Postdi BG66 » 08/06/17 05:11

Ciao Anthony,
grazie di esistere :lol: . Veniamo alle risposte:

Anthony47 ha scritto:Quindi il percorso C:\Forni2017 contiene 12 Cartelle contenenti N file?
C'e' una regola di assegnazione dei nomi file; ad esempio Nome forno /Data?

SI e precisamente:
a) 12 cartelle con 12 file (9+3 [seguono dettagli sul motivo della separazione])
NB Per quanto riguarda la sottocartella del mese, questa mi viene messa a disposizione pochi giorni prima della fine del mese precedente.
b) nome file: (nome impianto)_(mese)_(anno)

Immagine

Anthony47 ha scritto:Quale e' la struttura di questi file? Quanti ce ne sono?
Quelli "importati" devono rimanere invariati nella loro cartella mensile, o possono essere Rinominati, o Spostati in altra sottocartella?
Tutti i file presenti in C:\Forni2017\Mese sono idonei a essere importati, o bisogna verificare qualcosa?

a) Struttura identica per tutti: foglio con etIchetta riferita a nome forno (FORNO_T09, forno_T10,etc ) + un foglio nascosto "PRODUZIONE"
b)N° file ( o forni): 9 +3 ( i 3 vanno, in questa fase, ignorati perchè hanno qualche colonna in più quindi penso che, a lavoro finito, ricopierò il tutto adattandolo e creando un masterdata2.
c) devono restare intonsi e nella stessa posizione perchè usati anche da altri colleghi
d) come da punto b) -> i 9 impianti sono gemelli nella struttura quindi i dati sono importabili d’emblée

Anthony47 ha scritto:Nel foglio Helper hai intenzione di elencare i file che sono gia' stati importati?
Perche' hai previsto colonne quali Data creazione /Data ultima modifica /Data ultimo accesso?
Il file Masterdata.xls conterra' anche lui 12 fogli di lavoro chiamati DataBase_Gen17, DataBase_Feb17, DataBase_Mar17 etc etc?

Si per entrambi.
Aggiungo che l'idea per le colonne (quali Data creazione /Data ultima modifica /Data ultimo accesso) è quella di "monitorare" quello che importo per far lavorare la macro solo se la data dell'ultima modifica o di creazione sia difforme.
Anthony47 ha scritto:Mi porto avanti anche con una domanda relativa ai punti successivi: quale e' il significato del foglio forno_T09? Visto che parli di "12 impianti", ci saranno /dovranno essere 12 fogli "forno_XYZ"?
Quali sono le operazioni svolte dalle due macro presenti nel file?

Nel file Masterdata.xlsm NON sarà presente. L'esistenza nel foglio postato è per far capire la struttura per permettere/permettermi delle prove senza allegare tanti file separati.

Spero di aver risposto in maniera esaustiva.

Resto in attesa.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Creare file copiando valori da files esterni

Postdi Anthony47 » 08/06/17 13:43

Ti ringrazio per la fiducia preventiva...
Stai dicendo che per creare i file da importare basta salvaretante copie del foglio forno_T09 assegnandogli un nome file tipo Txx_MESE_2017.xlsm? Perche' ".xlsm", quali macro contiene?

Il contenuto di DataBase_Gen17 e' tutto ordinato, mentre il contenuto di forno_T09 e' tutto sparpagliato; visto che bisogna importare il contenuto sparpagliato quale e' la mappatura tra i campi? (ma questo problema non era stato risolto nella discussione precedente?).

Non hai detto nulla delle due macro contenute nel file.

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

Re: Creare file copiando valori da files esterni

Postdi BG66 » 08/06/17 16:57

Ciao Anthony,
non è piaggieria... una tua macro UpdateForm è diventata virale in tutti i mie file excel!!
Tornando a noi.
Spero che questa immagine mi aiuti a spiegarmi:
Immagine
Per quanto riguarda le macro presenti:
in modulo 1 di ogni file impianto ( es. T09_GIUGNO_2017.xlsm, etc,etc) c'è una tua macro:
Codice: Seleziona tutto
Sub AggPROD()
    Dim LastB As Long
    '
    Application.ScreenUpdating = False
    With ThisWorkbook.Sheets("PRODUZIONE")    '<<<
    ActiveWorkbook.Unprotect Password:=887
    Sheets("PRODUZIONE").Unprotect Password:=887
        LastB = .Cells(.Rows.Count, "B").End(xlUp).Row
        'Copia formule:
        .Range("M2:P2").Copy .Range(.Range("M3"), .Range("M" & LastB))
        'Copia valori:
        .Range(.Range("M3"), .Range("P" & LastB)).Copy
        .Range("M3").PasteSpecial xlPasteValues
    End With
    MsgBox "Operazione effettuata"
    ActiveWorkbook.Protect Password:=887
    Sheets("PRODUZIONE").Protect Password:=887
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
   
    'Selection.Range("A1").Select
    End Sub


nel modulo del foglio specifico:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns("R")) Is Nothing Then
    For i = 5 To 655 Step 21
        If Target.Row = i Then
            Call AggPROD
            MsgBox "Aggiornamento Eseguito"
            Exit For
        End If
    Next i
End If
End Sub


Resto in attesa.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Creare file copiando valori da files esterni

Postdi BG66 » 09/06/17 02:42

Buon mattino,
ho riletto il tutto e volendo semplificare, lo script dovrebbe seguire questa sequenza logica:
a) verificare se vi è una cartella con un nome di un mese
b) verificare se i file presenti nella stessa hanno subito una qualsivoglia modifica rispetto ai riferimenti presenti in helper
c) verificare che ci sia già un foglio di lavoro che raccolga i dati
d) importare (aprendo, se necessario, i file chiusi)
e) accodare (sommandoli) tutti i dati previsti -> NB la probabilità che durante le 24 ore dal Lun al Ven siano tutti aperti contemporaneamente è elevatissima
f) chiudere i files sorgente e confermare l'avvenuta importazione.

Ovviamente scrivere la logica è una cosa...provare a realizzarla è un'altra. :roll:
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Creare file copiando valori da files esterni

Postdi BG66 » 09/06/17 05:05

Ciao,
per ora sono riuscito a popolare il foglio Helper.
In pratica è la parte che prepara l'operazione per il punto B.
b) verificare se i file presenti nella stessa hanno subito una qualsivoglia modifica rispetto ai riferimenti presenti in helper


https://www.dropbox.com/s/mhwywvvt4vlavsn/masterdata_2017_v1.xlsm?dl=0

A presto
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Creare file copiando valori da files esterni

Postdi Anthony47 » 10/06/17 01:15

In questi giorni ho pochissimo tempo, in piu' continua a non essermi chiaro il quadro generale.
Vediamo...
Non lo hai confermato, ma credo che per crearmi i file Txx_MESE_2017 su cui lavorare basta fare tante copie del foglio forno_T09 assegnandogli tanti nomi tipo Txx_MESE_2017.xlsm
Non capisco pero' quali sono i campi Pezzi prodotti, Scarto produzione, Scarto fornitore che vanno riportati nel foglio mensile su Masterdrive.

Da come sono organizzati, mi pare che i file Txx_MESE_2017.xlsm vengano aggiornati tutti i giorni. Qui le domande sono varie:
-l'assiemaggio sul file MASTERDATA lo devi fare tutti i giorni, tutte le settimane, a fine mese, piu' volte al giorno, o che cosa?
-e' ragionevole che ogni giorno il foglio DataBase_Mes17 possa essere azzerato e ripopolato da zero, o e' necessario che si riparta accodando ai dati importati il giorno prima?
-e' ragionevole che nel mese di marzo pensiamo solo ai file Txx_MARZO_2017, e ci dimentichiamo dei file Txx_FEBBRAIO_2017?
-e' ragionevole che nella importazione ci si fermi alla data odierna o e' necessario avere nel foglio DataBase_Mes17 tutte le date fino a 30/31 del mese?
-i file Txx_MESE_2017.xlsm quando vai a fare l'importazione sei sicuro che saranno aggiornati e liberi di essere aperti? Questo dipende dalle modalita' con cui i file vengono scritti.
-vorrei anche sapere se il tracciato record del foglio DataBase_Mes17 e' rigido o si puo' pensare di aggiungere una colonna da destinare al nome file a cui le righe corrispondono; questo e' importante soprattutto se nelle importazioni si preferisce partire accodando i nuovi dati a quanto gia' importato la volta prima (cioe' non azzerando il foglio DataBase_Mes17 e ripartendo da zero), ma e' utile in ogni caso per calcolare al volo se un certo file e' stato gia' importato o no.

Penso che per oggi possa bastare.

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

Re: Creare file copiando valori da files esterni

Postdi BG66 » 10/06/17 04:15

Anthony47 ha scritto:Non lo hai confermato, ma credo che per crearmi i file Txx_MESE_2017 su cui lavorare basta fare tante copie del foglio forno_T09 assegnandogli tanti nomi tipo Txx_MESE_2017.xlsm
Non capisco pero' quali sono i campi Pezzi prodotti, Scarto produzione, Scarto fornitore che vanno riportati nel foglio mensile su Masterdrive.

Si.I files sono tutti uguali quindi credo che...fatta una fatti tutti.
I campi (la somma delle 6 righe delle colonne L - O - P che compongono i singoli turni del giorno) sono nel file esterno Txx_MESE_2017.xlsm ma come semplificazione il foglio è aggregato nel primo file allegato.

Anthony47 ha scritto:Da come sono organizzati, mi pare che i file Txx_MESE_2017.xlsm vengano aggiornati tutti i giorni.

Diciamo ogni 2 ore circa nella 24 ore. Se l'impianto è in funzione il file si apre il Lun ore 06.00 e si chiude il sab ore 06.00.

Anthony47 ha scritto:-l'assiemaggio sul file MASTERDATA lo devi fare tutti i giorni, tutte le settimane, a fine mese, piu' volte al giorno, o che cosa?
Lo prevedo all'apertura del file con un semplice tasto aggiorna.

Anthony47 ha scritto:-e' ragionevole che ogni giorno il foglio DataBase_Mes17 possa essere azzerato e ripopolato da zero, o e' necessario che si riparta accodando ai dati importati il giorno prima?
Dipende cosa è più "comodo" e veloce per diminuire l'impatto del tuo aiuto. Infatti siccome prevedo di lanciarlo max 2 volte al giorno, non credo/spero che la durata dell'aggiornamento possa avere un'impatto notevole sulla mia giornata operativa.

Anthony47 ha scritto:-e' ragionevole che nel mese di marzo pensiamo solo ai file Txx_MARZO_2017, e ci dimentichiamo dei file Txx_FEBBRAIO_2017?
Si. Se il file febbraio non ha subito variazione (ecco il perchè della parte monitoraggio file) può/deve essere ignorato.

Anthony47 ha scritto:-e' ragionevole che nella importazione ci si fermi alla data odierna o e' necessario avere nel foglio DataBase_Mes17 tutte le date fino a 30/31 del mese?
La data corrente andrebbe benissimo.

Anthony47 ha scritto:-i file Txx_MESE_2017.xlsm quando vai a fare l'importazione sei sicuro che saranno aggiornati e liberi di essere aperti? Questo dipende dalle modalita' con cui i file vengono scritti.
Spero di aver compreso la domanda. Al 99% sarà aperto e in uso (l'operazione di carico della riga dura max 2 min e si effettua ogni 2 ore circa)

Anthony47 ha scritto:-vorrei anche sapere se il tracciato record del foglio DataBase_Mes17 e' rigido o si puo' pensare di aggiungere una colonna da destinare al nome file a cui le righe corrispondono; questo e' importante soprattutto se nelle importazioni si preferisce partire accodando i nuovi dati a quanto gia' importato la volta prima (cioe' non azzerando il foglio DataBase_Mes17 e ripartendo da zero), ma e' utile in ogni caso per calcolare al volo se un certo file e' stato gia' importato o no.
Il foglio DataBase_Mes17 stà nascendo in queste ore con te quindi è assolutamente libero. Quello rigido è il file sorgente.

Grazie ancora
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Creare file copiando valori da files esterni

Postdi Anthony47 » 13/06/17 00:08

Vado a rilento...
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Creare file copiando valori da files esterni

Postdi BG66 » 13/06/17 03:25

Ciao,
no problem.
Quando vuoi e puoi.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Creare file copiando valori da files esterni

Postdi Anthony47 » 19/06/17 00:59

Ho fatto qualcosa, ma non in linea con il tuo flusso.
In particolare non uso il contenuto dell'Helper ma importo i dati del mese prescelto.
I prerequisiti:
1) Il file Masterdata deve gia' contenere un foglio nominato come DataBase_mmmYY
Dove "mmm" e' il mese (3 lettere) e YY e' l'anno (2 cifre)
2) Il file che si va ad aprire contiene i dati da importare nel primo foglio; il nome di questo foglio verra' importato in colonna B di Masterdata
3) Le prime 3 lettere del nome file identificano il nome dell'impianto
Per il resto ho lavorato sul tracciato dei file pubblicati.

Il codice della macro, da inserire in un modulo standard di Masterdata:
Codice: Seleziona tutto
Sub MeseImport()
Dim DBPath As String, myCFile As String, mySplit, mySh As String, myD As Date, myT As String
Dim I As Long, mErr As String, dbSh As Worksheet, myLast As Long, daImp, myMatch
'
DBPath = "D:\FORNI_2017\GIUGNO"                 '<<< La directory da cui importare
daImp = Array("T09", "T10", "T11", "T12")       '<<< L'elenco dei forni da importare
'
mySplit = Split(DBPath, "\", , vbTextCompare)
mySh = "DataBase_" & Format(CDate("01/" & mySplit(UBound(mySplit)) & "/" & Right(mySplit(UBound(mySplit) - 1), 4)), "MmmYY")
Sheets(mySh).Select
If Right(DBPath, 1) <> "\" Then DBPath = DBPath & "\"
Set dbSh = ThisWorkbook.Sheets(mySh)
'Azzera l'area di importazione:
Range("A2:C20000,E2:G20000").ClearContents
'Importa:
myCFile = Dir(DBPath & "*.xls*")
Do
myMatch = Application.Match(Left(myCFile, 3), daImp, 0)
Application.ScreenUpdating = False
    If myCFile = "" Then Exit Do
    If Not IsError(myMatch) Then
        On Error Resume Next
    Debug.Print myCFile, Timer
        Workbooks.Open Filename:=(DBPath & myCFile), UpdateLinks:=False, ReadOnly:=True
        On Error GoTo 0
        If ActiveWorkbook.Name = ThisWorkbook.Name Then
            mErr = mErr & vbCrLf & DBPath & myCFile
        Else
            Sheets(1).Select
            For I = 5 To Cells(Rows.Count, 1).End(xlUp).Row + 50
    '        Debug.Print I, Timer
            DoEvents
                myLast = dbSh.Cells(Rows.Count, 1).End(xlUp).Row
                myD = Cells(I, 1).MergeArea.Range("A1").Value
                If myD > Int(Now) Then Exit For
                myT = Cells(I, 2).MergeArea.Range("A1").Value
                If myT <> "" Then
                    If myD = dbSh.Cells(myLast, 1) And myT = dbSh.Cells(myLast, 3) Then
                        dbSh.Range("E" & myLast).Value = dbSh.Range("E" & myLast).Value + Cells(I, "L").Value
                        dbSh.Range("F" & myLast).Value = dbSh.Range("F" & myLast).Value + Cells(I, "O").Value
                        dbSh.Range("G" & myLast).Value = dbSh.Range("G" & myLast).Value + Cells(I, "P").Value
                    Else
                        myLast = myLast + 1
                        dbSh.Cells(myLast, "A").Value = myD
                        dbSh.Cells(myLast, "B").Value = ActiveSheet.Name
                        dbSh.Cells(myLast, "C").Value = myT
                        dbSh.Cells(myLast, "E").Value = Cells(I, "L").Value
                        dbSh.Cells(myLast, "F").Value = Cells(I, "O").Value
                        dbSh.Cells(myLast, "G").Value = Cells(I, "P").Value
                    End If
                End If
            Next I
        Workbooks(myCFile).Close False
        Application.ScreenUpdating = True: DoEvents
        End If
    Else
        Beep
    End If
    myCFile = Dir
Loop
Application.ScreenUpdating = True
If Len(mErr) > 3 Then
    MsgBox ("Completato, eccetto i seguenti file:" & vbCrLf & mErr)
Else
    MsgBox ("Completato")
End If
End Sub

Le due istruzioni marcate <<< vanno personalizzate come da commenti, rispettando la sintassi data.

Il motivo per cui ignoro il contenuto di Helper e' che non capisco perche' i file di un mese passato debbano essere alterati quando la relativa produzione e' terminata.
Quindi diciamo che fino al primo Luglio si importano i file di Giugno, ma dal 2 luglio si modifica la macro per puntare a Luglio e si assume che Giugno sia terminato.

Comunque questa mia semplificazione non esclude che si possa creare una utility che controlla se il contenuto dei mesi precedenti e' stato modificato, usando il contenuto di Helper, per decidere quali mesi passati siano da importare.

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

Re: Creare file copiando valori da files esterni

Postdi BG66 » 19/06/17 13:04

[RISOLTO]
Bentornato e grazie Anthony.
I primi test superati alla grande.

Ragiono sull'utility e spero di proporti qualcosa con un nuovo thread.

Alla prossima.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44


Torna a Applicazioni Office Windows


Topic correlati a "Creare file copiando valori da files esterni":


Chi c’è in linea

Visitano il forum: Nessuno e 35 ospiti