Condividi:        

[Excel] caricare numeri da txt e creare grafico

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

Re: [Excel] caricare numeri da txt e creare grafico

Postdi pietrol » 30/07/09 23:28

Ciao Anthony
Nella mia interpretazione il problema non e' scartare file "vecchi", ma inserire i file presenti in ordine di data/ora.

Solo per spiegare che anche per me scartare i file vecchi non è il problema bensì la soluzione al problema, per i motivi che ho spiegato. Eviterebbe alla radice di inserire i file presenti in ordine di data/ora perchè ne sarebbe presente sempre e solo uno.
L'unica circostanza che la renderebbe impraticabile, secondo me, sarebbe il fatto che i file vecchi non possono essere ne rinominati ne cancellati per qualche motivo ancora non emerso nella discussione.
Però, sia ben chiaro, la mia è solo un'opinione personale che riflette il modo cui io affronterei questa situazione.

ciao
pietrol
il lupo ululà, il castello ululì
pietrol
Utente Senior
 
Post: 270
Iscritto il: 07/01/09 14:34

Sponsor
 

Re: [Excel] caricare numeri da txt e creare grafico

Postdi prospero0 » 31/07/09 07:09

pietrol ha scritto:Ciao prospero0
CUT
La mia considerazione parte dalla seguente premessa:
vuoi prelevare sempre i dati dall'ultimo file in ordine di tempo quindi gli altri file non ti servono più, anzi ostacolano la ricerca del file corretto.
Se la premessa è vera renderebbe tutto più semplice: alla file del ciclo di lettura del file, questo viene chiuso ed immediatamente rinominato o cancellato, così che la prossima volta vi sia solo un file, quello nuovo.
CUT.

ciao
pietrol


Ciao pietrol e buongiorno a tutti

La tua considerazione e quasi corretta nel senso che il mio interesse e quello di poter caricare sempre l'ultimo fle presente nella cartella (se fossi capace a farlo in modo automatico ancora meglio) il problema e che i file non posso cancellarli perchè mi servono come storico per effettuare altre elaborazioni.
Pero potrei spostarli dopo averli controllati... ieri questo mi portava a ricordare che qualcuno avevo postato una macro che effettuava la verifica dei file presenti in una data dir e poi li spostata in un'altra.
Ci avevo provato ma la macro si bloccava nel momento di effettuare la copia alla riga del filecopy era come se ci fosse un errore di sintassi (forse si doveva aggiungere as string dopo ogni stringa... buh devo trovare nuovamente la macro... che al momento ho perso dopo il crash del pc di ieri pomeriggio :(
prospero0
Utente Junior
 
Post: 21
Iscritto il: 28/07/09 13:33

Re: [Excel] caricare numeri da txt e creare grafico

Postdi prospero0 » 31/07/09 07:15

Anthony47 ha scritto:Nella mia interpretazione il problema non e' scartare file "vecchi", ma inserire i file presenti in ordine di data/ora.
Se e' cosi', il mio suggerimento e':
-in un' area di servizio inserisci non solo il dato che ti serve (col N) ma anche la data/ora (col A?)
-finita l' importazione dei file, ordini quell' area per data/ora (codice ottenuto con registra macro), poi prelevi il blocco dei dati e accodi nella posizione definitiva.
Questo lo farai per ogni gruppo di file contenuti in una directory.
Ci sarebbe la possibilita' di leggere la data/ora di creazione del file, ma questo innescherebbe altri cicli che invece con il metodo di sopra non sono necessari.

Ciao.


Ciao Anthony47

interessante la tua proposta in effetti in questo modo sarebbe ottimo , ma l'aria di servizio come la intendi non capisco.
In ultimo i dati copiat (casella A ed N) dalla stessa riga una volta incollati in due nuove caselle continuerebbero ad essere accoppiati? cioè posso fare l'ordinamento delle due colonne in base al tempo e le righe sarebbe semre accoppiate?

Oggi sono a casa.... ma ho tutti i dati con me... vedo di continuare le prove

vi faccio sapere

Grazie
prospero0
Utente Junior
 
Post: 21
Iscritto il: 28/07/09 13:33

Re: [Excel] caricare numeri da txt e creare grafico

Postdi Anthony47 » 31/07/09 13:50

Per "area di servizio" intendo delle celle di comodo in cui accantoni i dati in ordine ignoto e in cui poi fai l' ordinamento.
Se quando ordini selezioni sia la colonna Data/ora che la colonna Valore, e poi ordini per Data/ora crescente allora gli accoppiamenti vengono mantenuti, e quindi i Valori saranno anche loro in ordine di Data/ora crescente.

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

Re: [Excel] caricare numeri da txt e creare grafico

Postdi prospero0 » 03/08/09 07:24

Anthony47 ha scritto:Per "area di servizio" intendo delle celle di comodo in cui accantoni i dati in ordine ignoto e in cui poi fai l' ordinamento.
Se quando ordini selezioni sia la colonna Data/ora che la colonna Valore, e poi ordini per Data/ora crescente allora gli accoppiamenti vengono mantenuti, e quindi i Valori saranno anche loro in ordine di Data/ora crescente.

Ciao.


Ciao Anthony47

Dunque questo fine settimana non sono riuscito a fare prova... mi rifarò oggi..
per quanto riguarda la tua proposta,pensandoci bene non risolve la mia problematica e ti spiego perchè.
Quando la macro verifica il contenuto della directory scrive il nome e solo il nome del file all'interno della pagina excell, al termine della verifica la macro carica l'ultimo file che ha messo in colonna nella pagina quindi io fino a questo momento non ho aperto nessun file e non conosco la data dei file incolonnati e quindi non posso efettuare un'ordinazione.
Da quello che intuisco sono incolonnati per ordine di nome e quindi mi ritrovo con i primi due file corretti e cioè
CICLO B.txt
CICLO B_1.txt

e poi

CICLO B_10.txt
CICLO B_100.txt
CICLO B_101.txt
..
..
CICLO B_109.txt
CICLO B_11.txt
CICLO B_110.txt
ecc ecc
Se fosse possibile far leggere alla macro la data di creazione del file e quindi incolonnarli per data allora risolverei la cosa,oppure deve seguire l'altra strada e cioè ogni volta che parte la macro al termine della lettura della dir sposto i file in un'altra posizione (questo lo posso fare non mi crea problemi con le mi elaborazioni) e quindi ogni volta che effettuerò la lettura delal dir avrò sempre gli ultimi file.
Se però questa lettura non avviene in modo continuativo mi ritroverò nuovamente con un buon numero di file incolonnati per nome :(

Ciao a tutti
prospero0
Utente Junior
 
Post: 21
Iscritto il: 28/07/09 13:33

Re: [Excel] caricare numeri da txt e creare grafico

Postdi prospero0 » 03/08/09 16:00

Ultima versione giornaliera prima di uscire
La prima volta che eseguo la macro funziona tutto inserisce il valore giusto dell'ultimo file presente nella dir,e poi sposta i dati da una cartella ad un'altra,se però faccio ripartire la macro ,si blocca qui
Codice: Seleziona tutto
Open Percorso & "CELLA2\Dati\" & NFileEx1 For Input As #2

Segnalando file non trovato , perchè non so come mai ma rimane memorizzato l'ultimo file copiato nella precedente sessione.
Se clicco su stop macro e la ripeto funziona novamente, se riprovo ritorna l'errore di file non trovato ed se controllo il valore e di nuovo l'ultimo file spostato da una dir all'altra.. cosa può essere? si può pulire la memoria delle stringhe NFileEx1 = NFile1 prima di far partire una nuova sessione della macro?

Ciao

Codice: Seleziona tutto
Public Perc As String
Public Percorso As String
Sub partenza()
Call ElencoFileXls
Call test5
Call creaListaDati
Call SpostaDati
End Sub
Private Sub ElencoFileXls()
ChDrive "C"   '<<< Lettera del Drive dove sono contenuti i file
Perc = "C:\Sandy\CELLA2\dati\"   '<<< percorso dei file
Worksheets("Foglio2").Activate
Worksheets("Foglio2").Select
Range("A1").Select
  With ActiveCell
    Worksheets("Foglio2").Range(.Cells(1), .End(xlDown)).ClearContents
  End With
  ElencoFile Direct:=Perc, Estens:="*.txt", Inicell:=ActiveCell
End Sub
Private Sub ElencoFile(Direct As String, Estens As String, Inicell As Range)
  Dim i As Integer, f As String
  ChDir Direct
  f = Dir(Estens)
  If f = "" Then Exit Sub
  While f <> ""
    i = i + 1
    Inicell(i) = f
    f = Dir
    Wend
  End Sub
Private Sub test5()
Worksheets("Foglio2").Activate
Sheets("Foglio2").Select
URE = Worksheets("Foglio2").Range("A" & Rows.Count).End(xlUp).Row
FXLS = Worksheets("Foglio2").Range("A" & URE).Value
FullNome = Perc & FXLS     'Directory e Nome del file selezionato
Worksheets("Foglio2").Activate
     Sheets("Foglio2").Select
     Range("A14").Select
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & FullNome, Destination:=Range("A1"))
        .Name = FullNome
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
         On Error GoTo 0
        .Refresh BackgroundQuery:=False
    End With
    ActiveWindow.SmallScroll ToRight:=1
    Range("N2").Select
    Selection.Copy
    Sheets("Foglio1").Select
    Range("B14").Select
    ActiveSheet.Paste
    Sheets("Foglio2").Select
    Cells.Select
    Range("B1").Activate
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
Esci:
End Sub
Private Sub creaListaDati()
Percorso = "C:\Sandy\"   '<<< qui puoi cambiare il percorso ma va cambiato anche nel file Elenco.bat
abc = Shell(Percorso & "Elenco.bat", 0)
End Sub
Private Sub SpostaDati()
Percorso = "C:\Sandy\"
Open Percorso & "Dir.txt" For Input As #1
NFile1 = ""
Do Until EOF(1)
     Line Input #1, NFile1
     NFileEx1 = NFile1
    Open Percorso & "CELLA2\Dati\" & NFileEx1 For Input As #2
    Do Until EOF(2)
    Line Input #2, riga
    Loop
    Close #2
    inpfile = Percorso & "CELLA2\dati\" & NFileEx1
    outfile = Percorso & "CELLA2\C635\CICLOB\" & NFileEx1
FileCopy inpfile, outfile

Kill Percorso & "CELLA2\dati\" & NFileEx1
Loop
Close #1
End Sub
prospero0
Utente Junior
 
Post: 21
Iscritto il: 28/07/09 13:33

Re: [Excel] caricare numeri da txt e creare grafico

Postdi prospero0 » 05/08/09 07:04

Buondì

non ho ancora trovato la quadra ....ed rieccomi qui a tediarvi.Dunque ho cercato un'altra strada visto che non riuscivo a far funzionare correttamente la macro postata in precedenza.
Sono partito da qui:
Codice: Seleziona tutto
Private Sub ImportaTXT()
Percorso = "C:\Sandy\"   '<<< qui puoi cambiare il percorso ma va cambiato anche nel file Elenco.bat
NFilee = ""
abc = Shell(Percorso & "Elenco.bat", 0)
Open Percorso & "Dir.txt" For Input As #1
Line Input #1, NFilee


il batch elenco
Codice: Seleziona tutto
dir C:\Sandy\Cella2\Dati\*.txt /b /O:-D > C:\Sandy\Dir.txt

crea la lista contenuta nella directory Sandy inserendo i dati in ordine cronologico (cio che interessava a me)

La macro precedente prosegue con il caricamento del file txt preso dall'elenco dir.txt (ho registrato una macro con il registratore di macro excel utilizzando la funziona importa dati esterni)

Codice: Seleziona tutto
Sheets("Foglio1").Select
     Sheets.Add
     With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & NFilee, Destination:=Range("A1"))
        .Name = "NFilee"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
     Close #1
     ActiveWindow.SmallScroll ToRight:=1
    Range("N2").Select
    Selection.Copy
    Sheets("Foglio1").Select
    Range("B14").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Sheets("Foglio2").Select
    ActiveWindow.SelectedSheets.Delete
    End Sub


la prima volta che eseguo la macro funziona tutto correttamente,ma in seguito mi ritrovo questo errore (posto la schermata del mio pc)
Immagine
e la schermata con evidenziata la riga in errore
Immagine

cioè questa riga .Refresh BackgroundQuery:=False

succede questo problema perchè al termine della macro ho inserito una riga per cui io cancello i dati di appoggio? o perchè utilizzo la funzione importa dati esterni che poi mi fa sto casino?

Grazie a chi mi saprà aiutare
prospero0
Utente Junior
 
Post: 21
Iscritto il: 28/07/09 13:33

Re: [Excel] caricare numeri da txt e creare grafico

Postdi Flash30005 » 05/08/09 09:37

Ciao Prospero

volevo chiederti... chi dà il nome ai file?
prospero0 ha scritto:CICLO B.txt
CICLO B_1.txt
e poi
CICLO B_10.txt
CICLO B_100.txt
CICLO B_101.txt
..
CICLO B_109.txt
CICLO B_11.txt
CICLO B_110.txt
ecc ecc

Perché risolveresti se fossero (stessa sequenza)
CICLO B_000.txt
CICLO B_001.txt
e poi
CICLO B_010.txt
CICLO B_100.txt
CICLO B_101.txt
..
CICLO B_109.txt
CICLO B_011.txt (non so perchè 011 stia qui) :roll:
CICLO B_110.txt
ecc ecc
In pratica, se la numerazione è fino a 999 inserire sempre n zeri prima del numero affinché le cifre siano sempre 3
In questa maniera avrai sempre l'ordine cronologico.
-------------------------------------------

Se vuoi spostare i file inserisci questo codice all'inizio della macro che elabora i file
Codice: Seleziona tutto
ChDrive "C"
Perc = "C:\DirectoryTua1\DirectoryTua2\"

If Dir(Perc & "ArchivioXls", vbDirectory) = "" Then
    MkDir (Perc & "ArchivioXls")
End If
...  '<<<< tua macro
...
...
Name Perc & NomeFileProcessato As Perc & "ArchivioXls\" & NomeFileProcessato
..... ' <<< qui non so se c'è il Next di un For Next
End Sub


-------------------------------

Se vuoi conoscere la data e l'ora di un file usa questo codice
Codice: Seleziona tutto
S = FileDateTime(Perc & NomeFile)

eventualmente per isolare la data e dare un ordine cronologico in ogni sistema operativo o processo aggiungi
Codice: Seleziona tutto
DataF = Mid(S, 7, 4) & Mid(S, 4, 2) & Mid(S, 1, 2)

che trasforma S formato gg/mm/aaaa hh:mm:ss in aaaammgg
Dove Perc è la variabile (percorso) impostata nel codice iniziale


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: [Excel] caricare numeri da txt e creare grafico

Postdi prospero0 » 05/08/09 10:25

Flash30005 ha scritto:Ciao Prospero

volevo chiederti... chi dà il nome ai file?
prospero0 ha scritto:CICLO B.txt
CICLO B_1.txt
e poi
CICLO B_10.txt
CICLO B_100.txt
CICLO B_101.txt
..
CICLO B_109.txt
CICLO B_11.txt
CICLO B_110.txt
ecc ecc

Perché risolveresti se fossero (stessa sequenza)
CICLO B_000.txt
CICLO B_001.txt
e poi
CICLO B_010.txt
CICLO B_100.txt
CICLO B_101.txt
..
CICLO B_109.txt
CICLO B_011.txt (non so perchè 011 stia qui) :roll:
CICLO B_110.txt
ecc ecc
In pratica, se la numerazione è fino a 999 inserire sempre n zeri prima del numero affinché le cifre siano sempre 3
In questa maniera avrai sempre l'ordine cronologico.

Ciao


Ciao Flash30005

i nomi ai file vengono dati da un programma automatizzato e la numerazione è quella descritta precedentemente non posso purtroppo cambiarla.

la macro che adesso ti copio funziona e fa esattamente quello che io voglio
Codice: Seleziona tutto
Public Percorso As String
Private Sub ImportaTXT()
Percorso = "C:\Sandy\" 
NFilee = ""
abc = Shell(Percorso & "elenco.bat", 0)
Open Percorso & "Dir.txt" For Input As #1
Line Input #1, NFilee
NFileEx = NFilee
    Workbooks.OpenText Filename:=NFileEx, Origin _
        :=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
        , 1), Array(16, 1)), TrailingMinusNumbers:=True
    Range("N2").Select
    Selection.Copy
    Windows("SITUAZIONE PROVE IN CORSO.xls").Activate
    Sheets("Foglio1").Select
    Range("B14").Select
    ActiveSheet.Paste
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("B16").Select
    Windows(NFileEx).Activate
    ActiveWindow.Close
    Close #1
    End Sub

il file batch elenco.bat mi crea la lista dei file presenti nella directory menzionata al suo interno e li ordina in base alla creazione
dir C:\Sandy\CELLA2\dati\*.txt /B /O:-D > C:\Sandy\Dir.txt
la macro accede al file Dir.txt carica il primo file txt della lista crea un foglio excell , copia la casella N2 e la incolla nella casella B14 del foglio1 del file Excell "situazione prove in corso" e poi chiude il foglio creato.... fin qui ok. :D

Ora io vorrei ripetere l'operazione sopra descritta in quanto ho un'altra cartella da mappare con altri file txt ed anche qui aprire l'ultimo file txt, copiare la solita casellina (avrà ovviamente un'altro valore) ed incollare il contenuto sempre nel file XLS "situazione prove in corso" ma in una casella vicina
ho modificato il file batch aggiungendo una nuova riga per cui viene creato un altro file txt con la lista dei file della nuova directory
dir C:\Sandy\CELLA4\dati\*.txt /B /O:-D > C:\Sandy\Dir4.txt

poi ho creato questa altra macro che fa esattamente le stesse cose .. eppure non funziona mi da un errore di file non trovato anche se la variabile da caricare ha il valore giusto (lo verificato)!!!

Codice: Seleziona tutto
Private Sub ImportaTXTb()
Percorso = "C:\Sandy\"
aa = ""
abc = Shell(Percorso & "elenco.bat", 0)
Open Percorso & "Dir4.txt" For Input As #1
Line Input #1, aa
ii = aa
    Workbooks.OpenText Filename:=ii, Origin:= _
        xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
        , 1), Array(16, 1)), TrailingMinusNumbers:=True
    Range("N2").Select
    Selection.Copy
    Windows("SITUAZIONE PROVE IN CORSO.xls").Activate
    Sheets("Foglio1").Select
    Range("C14").Select
    ActiveSheet.Paste
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("C16").Select
    Windows(ii).Activate
    ActiveWindow.Close
    Close #1
    End Sub


Immagine
prospero0
Utente Junior
 
Post: 21
Iscritto il: 28/07/09 13:33

Re: [Excel] caricare numeri da txt e creare grafico

Postdi prospero0 » 05/08/09 10:47

Ci sto per rinunciare :( ora non so per quale motivo non funzione nemmeno la prima macro... da lo stesso errore della seconda
prospero0
Utente Junior
 
Post: 21
Iscritto il: 28/07/09 13:33

Re: [Excel] caricare numeri da txt e creare grafico

Postdi prospero0 » 05/08/09 13:37

Nulla da fare,la macro funziona solo se in precedenza ho registrato la stessa macro con il registratore di macro... andando a caricare lo stesso file.
In base se carico il file di una direcotory rispetto all'altra funziona o la prima macro o la seconda.
ma spesso non funziona ne uno ne l'altra e mi da errore qui
Codice: Seleziona tutto
Workbooks.OpenText Filename:=NFileEx, Origin _
        :=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
        , 1), Array(16, 1)), TrailingMinusNumbers:=True


Segnalando che non trova il file!!!! ma se controllo NFileEx ha il file corretto :-? ma che succede???
prospero0
Utente Junior
 
Post: 21
Iscritto il: 28/07/09 13:33

Re: [Excel] caricare numeri da txt e creare grafico

Postdi Anthony47 » 05/08/09 13:47

Non ho seguito questa discussione per alcuni giorni, ora faccio anche fatica a capire quale era il problema originale...
Inizialmente, infatti, avevo interpretato che l' obiettivo era di processare un tot di file contenuti in 4 directory diverse, file che aggiornavi tramite una tua procedura; insomma bisognava processare (cioe' accodare i dati dei file in un archivio su nuovo file excel) tutti i file contenuti nelle directory.

Poi era emerso il problema che difficilmente la macro di ricerca file restituiva i file in ordine di data/ora, e qui la mia proposta era stata di prelevare da ogni file sia la data/ora che il dato richiesto, ordinare per data/ora crescente, copiare i dati accodandoli all' archivio.
Sembrava una proposta interessante, poi non e' stata provata perche' "Quando la macro verifica il contenuto della directory scrive il nome e solo il nome del file all'interno della pagina excell, al termine della verifica la macro carica l'ultimo file che ha messo in colonna nella pagina quindi io fino a questo momento non ho aperto nessun file e non conosco la data dei file incolonnati e quindi non posso efettuare un'ordinazione."
Ma io avevo dato per scontato che tu eri capace di importare il file ed estrarre da questo il dato che ti serviva (non ricordo quale cella era), cosa che era stato oggetto di post precedenti e che anche tu avevi confermato nel messaggio del 30/07 alle 9.35: "Il risultato finale è quello che mi aspettavo ma avrei bisogno di automatizzare la selezione dei file e caricare l'ultimo file presente poi ripetere la stessa procedura per 4 directory diverse".
Quindi quello di cui io parlavo era da applicare al file dopo la sua importazione, per cui l' osservazione "io fino a questo momento non ho aperto nessun file e non conosco la data dei file incolonnati e quindi non posso efettuare un'ordinazione" e' forse corretta (il file non e' stato aperto) ma sostanzialmente errata (il file e'' stato importato e a questo punto hai accesso a tutte le sue celle, compreso quellache contiene la data/ora).

Poi e' emerso che il "lavoro" lo devi fare solo sull' ultimo file (tuo messaggio del 31/07 ore 8.09: "il mio interesse e quello di poter caricare sempre l'ultimo fle presente nella cartella").

Mi spieghi anche perche' non hai adottato la macro basata su Application.FileSearch per avere l' elenco dei file? Vedi viewtopic.php?f=26&t=81428#p463624, mi sembra piu' lineare di quella che hai adottato (vedi viewtopic.php?f=26&t=81428#p463630)

Dopo queste considerazioni, qualche suggerimento:
-rivedi i miei post viewtopic.php?f=26&t=81428#p463624 e viewtopic.php?f=26&t=81428#p463669
-se ti e' necessario rinominare un file dopo averlo processato, il mio suggerimento e' di cambiarne l' estensione da txt a prn (a meno che tu non abbia gia' altri file prn nelle 4 directory di cui parliamo); questo lo fai con una istruzione tipo
Codice: Seleziona tutto
Name NomeFile As Replace(NomeFile, ".txt", ".prn")
NomeFile e' la variabile che contiene il percorso+nome+estensione del file; se usi una variabile diversa adatta l' istruzione.
Questa istruzione va messa a conclusione del processo di importazione dei dati di ognuno dei file in gioco, dopo che hai trasferito con successo i dati che ti interessano.
In questo modo, visto che la macro di "cerca file" lavora sui file "*.txt" i file gia' lavorati non entrano nel successivo elenco.

Questo e' il meglio che posso scrivere, vedi se puoi applicare.

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

Re: [Excel] caricare numeri da txt e creare grafico

Postdi prospero0 » 05/08/09 13:54

Alèèèèèèèèèèèèè ci son riuscito!!!!

ho inserito prima di
Codice: Seleziona tutto
Workbooks.OpenText Filename:=NFileEx, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
        , 1), Array(16, 1)), TrailingMinusNumbers:=True

questo pezzo di codice
Codice: Seleziona tutto
ChDir "C:\Sandy\CELLA2\dati"

da quanto ne capisco devo indirizzare io ogni volta il percorso corretto!!!
prospero0
Utente Junior
 
Post: 21
Iscritto il: 28/07/09 13:33

Re: [Excel] caricare numeri da txt e creare grafico

Postdi prospero0 » 06/08/09 15:54

Ciao Anthony47 ,

Ancora grazie per i tuoi sponti ed anche grazie a flash,domani riguardo il tuo ultimo post e ti spiego il perchè ho cercato un'altra soluzione (probabilmente :) non ho capito tutto cio che mi avete cercato di spiegare)

cmq oggi ho finalmente terminato la macro ad ogni avvio del foglio excel si aggiornano i dati presenti nella 4 cartelle a cui facevo riferimento all'inizio... e stato lungo... stavo per abbandonare ma alla fine grazie anche a voi... non ho mollato.

Domandina la macro aggiorna appunto i dati solo se apro e chiudo il file... e possibile far si che la macro giri senza fermarsi ed alla presenza di nuovi file in una qualsiasi della directory aggiorni il grafico?
vi posto la macro finale , sicuramente sarà tutto un errore... ma sono cmq contento del risultato (magari si riesce a fare stare tutto in poche righe di codice.... :D )

Codice: Seleziona tutto
Public Percorso As String
Public Percorso1 As String
Public Percorso2 As String
Public Percorso3 As String
Public Percorso4 As String
Sub ImportaDatiTXT()
Call ImportaTXT
Call ImportaTXTb
Call ImportaTXTc
Call ImportaTXTd
Sheets("SITUAZIONE PROVE IN CORSO").Select
End Sub
Sub ImportaTXT()
Percorso = "D:\CITT\"   '<<< qui puoi cambiare il percorso ma va cambiato anche nel file Elenco.bat
Percorso1 = "D:\CITT\Rilevazione Coppia\Agg Sett\cella 2\dati"
Dim NFilee As String
'NFilee = ""
abc = Shell(Percorso & "elenco.bat", 0)
Open Percorso & "Dir2.txt" For Input As #1
ChDir Percorso1
If IsNull(NFilee) Then
GoTo Line1
Else
On Error Resume Next
Line Input #1, NFilee
NFileEx = NFilee
    ChDrive "D:": ChDir Percorso1
    On Error Resume Next
    Workbooks.OpenText Filename:=NFileEx, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
        , 1), Array(16, 1)), TrailingMinusNumbers:=True
    Range("N2").Select
    Selection.Copy
    If Selection.Value < 100 Then
    Windows("SITUAZIONE PROVE IN CORSO.xls").Activate
    Sheets("Foglio1").Select
    Range("B7").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("B7").Select
    Selection.Value = (Selection.Value / 100)
    Selection.NumberFormat = "0%"
    ElseIf Selection.Value > 100 Then
    Windows("SITUAZIONE PROVE IN CORSO.xls").Activate
    Sheets("Foglio1").Select
    Range("B7").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("B7").Select
    Selection.Value = (Selection.Value / 2000)
    Selection.NumberFormat = "0%"
    End If
    Windows(NFileEx).Activate
    Windows(NFileEx).Close
    Close #1
    End If
Line1:
    End Sub
Sub ImportaTXTb()
Percorso = "D:\CITT\"
Percorso2 = "D:\CITT\Rilevazione Coppia\Agg Sett\cella 4\dati\"
Dim aa As String
'aa = ""
abc = Shell(Percorso & "elenco.bat", 0)
Open Percorso & "Dir4.txt" For Input As #1
ChDir Percorso2
If IsNull(aa) Then
GoTo Line1
Else
On Error Resume Next
Line Input #1, aa
ii = aa
    ChDrive "D:": ChDir Percorso2
    On Error Resume Next
    Workbooks.OpenText Filename:=ii, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
        , 1), Array(16, 1)), TrailingMinusNumbers:=True
    Range("N2").Select
    Selection.Copy
    If Selection.Value < 100 Then
    Windows("SITUAZIONE PROVE IN CORSO.xls").Activate
    Sheets("Foglio1").Select
    Range("E7").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("E7").Select
    Selection.Value = (Selection.Value / 100)
    Selection.NumberFormat = "0%"
    ElseIf Selection.Value > 100 Then
    Windows("SITUAZIONE PROVE IN CORSO.xls").Activate
    Sheets("Foglio1").Select
    Range("E7").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("E7").Select
    Selection.Value = (Selection.Value / 2000)
    Selection.NumberFormat = "0%"
    End If
    Windows(ii).Activate
    Windows(ii).Close
    Close #1
    End If
Line1:
    End Sub
Sub ImportaTXTc()
Percorso = "D:\CITT\"   '<<< qui puoi cambiare il percorso ma va cambiato anche nel file Elenco.bat
Percorso3 = "D:\CITT\Rilevazione Coppia\Agg Sett\cella 6\dati"
Dim cc As String
'cc = ""
abc = Shell(Percorso & "elenco.bat", 0)
Open Percorso & "Dir6.txt" For Input As #1
ChDir Percorso3
If IsNull(cc) Then
GoTo Line1
Else
On Error Resume Next
Line Input #1, cc
ee = cc
    ChDrive "D:": ChDir Percorso3
    On Error Resume Next
    Workbooks.OpenText Filename:=ee, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
        , 1), Array(16, 1)), TrailingMinusNumbers:=True
    Range("N2").Select
    Selection.Copy
    If Selection.Value < 100 Then
    Windows("SITUAZIONE PROVE IN CORSO.xls").Activate
    Sheets("Foglio1").Select
    Range("F7").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("F7").Select
    Selection.Value = (Selection.Value / 100)
    Selection.NumberFormat = "0%"
    ElseIf Selection.Value > 100 Then
    Windows("SITUAZIONE PROVE IN CORSO.xls").Activate
    Sheets("Foglio1").Select
    Range("F7").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("F7").Select
    Selection.Value = (Selection.Value / 2000)
    Selection.NumberFormat = "0%"
    End If
    Windows(ee).Activate
    Windows(ee).Close
    Close #1
    End If
Line1:
    End Sub
Sub ImportaTXTd()
Percorso = "D:\CITT\"   '<<< qui puoi cambiare il percorso ma va cambiato anche nel file Elenco.bat
Percorso4 = "D:\CITT\Rilevazione Coppia\Agg Sett\cella 8\dati"
Dim pp As String
'Dim N As Integer
'pp = ""
abc = Shell(Percorso & "elenco.bat", 0)
Open Percorso & "Dir8.txt" For Input As #1
ChDir Percorso4
If IsNull(pp) Then
GoTo Line1
Else
On Error Resume Next
Line Input #1, pp
oo = pp
    ChDrive "D:": ChDir Percorso4
    On Error Resume Next
    Workbooks.OpenText Filename:=oo, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
        , 1), Array(16, 1)), TrailingMinusNumbers:=True
    Range("N2").Select
    Selection.Copy
    If Selection.Value < 100 Then
    Windows("SITUAZIONE PROVE IN CORSO.xls").Activate
    Sheets("Foglio1").Select
    Range("G7").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("G7").Select
    Selection.Value = (Selection.Value / 100)
    Selection.NumberFormat = "0%"
    ElseIf Selection.Value > 100 Then
    Windows("SITUAZIONE PROVE IN CORSO.xls").Activate
    Sheets("Foglio1").Select
    Range("G7").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("G7").Select
    Selection.Value = (Selection.Value / 2000)
    Selection.NumberFormat = "0%"
    End If
    Windows(oo).Activate
    Windows(oo).Close
    Close #1
    End If
Line1:
    End Sub
prospero0
Utente Junior
 
Post: 21
Iscritto il: 28/07/09 13:33

Re: [Excel] caricare numeri da txt e creare grafico

Postdi Anthony47 » 07/08/09 01:44

1) Ti chiedevo perche' non avevi adottato il codice che ti avevo suggerito io solo perche' so che funziona, mentre ancora non riuscivi a far funzionare il tuo.
2) Macro che funziona non si tocca, anche se la tua e' abbastanza "poco ottimizzata"; vedasi la ripetizione del codice per la gestione delle quattro directory, piuttosto che l' uso di un ciclo For/Next.

Per la richiesta di eseguire la macro in continuazione per identificare la presenza di nuovi file potresti utilizzare il seguente approccio:
-memorizzi il nome dei file utilizzati in quattro celle del tuo foglio riepilogo
In ognuna di queste celle salvi il nome del file che hai appena usato (mi pare che corrispondano alle variabili NFileEx, ii, ee, oo)
-crei una ulteriore macro (MacroXX) in cui inserisci il codice che ti genera i 4 file DirX.txt e, tramite una istruzione OnTime inserita in coda, rendi questa macro rischedulata dopo N minuti
-in questa stessa macro inserisci la verifica che il primo record di ogni DirX.txt sia diverso da quello memorizzato nelle quattro celle.
-non mi e' chiaro se devi aspettare di avere un nuovo file in tutti e quattro i DirX.txt per partire con la importazione o se ti basta che ce ne sia uno solo.
-se c' e' un nuovo record nel DirX.txt (o in tutti), lanci le macro di importazione (ImportaTXT, ImportaTXTb, etc); da queste macro avrai eliminato la parte relativa al lancio di "elenco.bat", cioe' l' istruzione Shell. Se non c' e' non fai nulla e aspetti che la macro giri nuovamente tra N minuti.
-Inserisci sul "Modulo di codice ThisWorkbook" del tuo file riepilogo questo codice, per lanciare la prima volta la macro all' apertura del file:
Codice: Seleziona tutto
Private Sub Workbook_Open()
Call MacroXX
End Sub


Per degli spunti sul metodo "OnTime" potresti partire da queste discussioni:
viewtopic.php?f=26&t=64356
viewtopic.php?f=26&t=52172
viewtopic.php?f=26&t=72176

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

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "[Excel] caricare numeri da txt e creare grafico":


Chi c’è in linea

Visitano il forum: Ricky0185 e 40 ospiti