Risultati da 1 a 17 di 17

Discussione: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)



  1. #1
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    32
    Messaggi
    50
    Versione Office
    2010
    Likes ricevuti
    1

    Exclamation Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Buongiorno a tutti,

    spero di non duplicare una qualche discussione già iniziata, ma cercando un pò nel forum non ho trovato esattamente (o indicativamente, da adattare) ciò che farebbe al caso mio. Mi rivolgo a voi esperti per chiedere info e consigli su come poter gestire quanto segue, dato che già in passato siete stati davvero fenomenali:

    Vorrei creare un foglio excel, dotato di macro, che va a pescare i dati da un foglio (unico) che quotidianamente scarico da un sito, in formato csv e posiziono in una determinata cartellina su pc.

    In un altra cartellina, vorrei avere questo Excel, che dovrebbe venire popolato andando a prendere parte di questi dati, secondo alcune condizioni.

    Allego un esempio del formato del file .csv (ho dovuto allegarlo in xlsx per poterlo uploadare)

    A questo punto vorrei trovare il modo che sulla load dell'ipotetico ImportaDati.xlsm vengano popolate automaticamente la casella A1 con la data presa da Origine.xlsx, i tre Eventi inseriti ed i rispettivi orari di start e stop, e fare a lato un Delta delle differenze tra orari.

    Per completezza, aggiungo due informazioni:
    1. Il documento ImportaDati, dovrebbe venire eseguito una volta al giorno, ad una data ora e quindi dovrebbe essere un incrementale, quindi un documento che giorno dopo giorno, una volta aperto, aggiunge una riga vuota e la nuova data, prendendola dal nuovo documento originario scaricato.

    2. Per semplicità ho inserito un elenco degli eventi, nominandoli banalmente EVENTO1, EVENTO2, EVENTO3, tuttavia i nomi di questi eventi sono in realtà sigle di 4 caratteri che dovrei filtrare (nell'importazione) prendendo SOLO quelli che corrispondono alla condizione:
    C*P*
    C*S*

    Sono tante cose, me ne rendo conto e sarei veramente grato a chiunque possa, voglia e sarebbe cosi gentile da darmi una mano..

    Grazie in anticipo.
    File Allegati File Allegati

  2. #2
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    2302
    Versione Office
    Excel2010
    Likes ricevuti
    510
    Likes dati
    122

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Ciao freepredator
    dopo aver letto la tua richiesta (o meglio: le tue TANTE richieste) mi sorgono spontanee alcune domande:
    1) quale è il tuo livello di conoscenza di Excel? e di VBA?
    2) quali tentativi hai fatto? e, se fatti, con quali risultati?

    Ti chiedo questo perchè "sembrerebbe" che tu voglia la "pappa pronta", e che pappa!!
    Siamo qui pronti ad "aiutarti" se hai qualche problema. Non siamo certo qui a "farti" un programmino.

    Scusa la franchezza. Ciao,
    Mario

  3. #3

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    63
    Messaggi
    4895
    Versione Office
    2007 - 2013
    Likes ricevuti
    537
    Likes dati
    93

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Mario di certo il nick del nostro amico non aiuta a pensar bene
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  4. #4
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    32
    Messaggi
    50
    Versione Office
    2010
    Likes ricevuti
    1

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Buongiorno,
    tanto per cominciare, vi ringrazio per l'interessamento, e mi preme specificare che ho inserito la richiesta di getto, quindi senza effettivamente fare alcuna prova, affinchè qualcuno potesse eventualmente inziare a pensare come aiutarmi nello svolgimento step by step di quanto necessito e non di voler la "pappa pronta" ma di procedere insieme, fino alla conclusione. Chiedo scusa se questo ha creato un'incomprensione.

    Non sono programmatore, ma ho utilizzato VBA per altre piccole macro, purtroppo non ho il tempo materiale per approfondire l'argomento anche se mi piacerebbe moltissimo.

    Mi metto prontamente all'opera e poi aggiorno.

    @alfrimpa: Ritengo un po pleonastico "spendere del tempo" per essere prevenuti, e "non pensare bene" su una richiesta di supporto partendo dal nickname che uno utilizza su un forum dove ritengo debba esserci collaborazione e condivisione. Ad ogni modo, spero di smentirti.

  5. #5

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    63
    Messaggi
    4895
    Versione Office
    2007 - 2013
    Likes ricevuti
    537
    Likes dati
    93

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Ciao Predator

    La mia era solo una battuta (ho messo anche la faccina) e mi spiace che tu l'abbia interpretata diversamente.

    Se posso permettermi di darti un consiglio suddividi il tuo problema in diversi step più semplici e chiedi su quelli, provandoci e sulle cose che non riesci a fare chiedi sul forum.

    Una volta che tutti gli step saranno risolti assemblerai il tutto.

    Un'ultima cosa: allega sempre un file di esempio (senza dati sensibili) con la situazione di partenza ed il risultato che vorresti ottenere (magari inserito manualmente).

    P.S. A quanto ne sappia qui nessuno è programmatore.
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  6. #6
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    32
    Messaggi
    50
    Versione Office
    2010
    Likes ricevuti
    1

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Buongiorno nuovamente,
    nessun problema @alfrimpa, bene però trovo carina la trasparenza in ogni caso..

    Come suggerisci, allego una prima parte di codice: (spero di beccare il TAG giusto )

    Codice: 
    Dim WKImporta As Workbook
    Dim WKSource As Workbook
    Dim WKImportaSheet1 As Worksheet
    Dim WKSourceSheet1 As Worksheet
    Dim strFile As String
    Dim riga As Long
    
    
    strFile = ThisWorkbook.Path 'localizzo il path del file e asssegno a variabile
    ChDir strFile
    
    
            Application.ScreenUpdating = False
                Set WKImporta = ThisWorkbook
                strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Selezionare file CSV...") 'apro una dialog per selezionare il CSV
                Set WKSource = Workbooks.Open(strFile) ' imposto la var WKSource mantenendo aperto il CSV
                
                Set WKImportaSheet1 = WKImporta.ActiveSheet 'rendo attivo il foglio1 del file XLSM
                Set WKSourceSheet1 = WKSource.ActiveSheet ' rendo attivo il foglio1 del file CSV
    A questo punto mi apre correttamente il file CSV, e me lo visualizza, ma incontro già un piccolo intoppo. La gestione contemporanea del GetOpenFileName e l'import dei dati con il delimitatore(;)

    Grazie per l'attenzione

  7. #7
    L'avatar di tanimon
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    _
    Messaggi
    198
    Versione Office
    Excel 2007
    Likes ricevuti
    27
    Likes dati
    4

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Citazione Originariamente Scritto da alfrimpa Visualizza Messaggio
    Se posso permettermi di darti un consiglio suddividi il tuo problema in diversi step più semplici e chiedi su quelli, provandoci e sulle cose che non riesci a fare chiedi sul forum.
    Una volta che tutti gli step saranno risolti assemblerai il tutto.


    Evvai!
    A furia di dirlo, qui ed altrove, almeno qui, forse..... il messggio è passato.

    Grande
    Alfredo


    ciao
    Frank
    Excel 2007 win7 - Rispondo solo a Thread corredati di file contenente una struttura dei dati consona alla richieta. Studiatela bene...! E prima di postare!
    Domanda: "Come avranno fatto gli utilizzatori di Excel VBA, quando non esisteva il registratore di macro?"

  8. #8
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    32
    Messaggi
    50
    Versione Office
    2010
    Likes ricevuti
    1

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Eccomi di nuovo,

    non ho ancora risolto il discorso precedente, ma proseguendo ho inserito un ciclo:

    Codice: 
                    With WKSourceSheet1
                        Riga = WKSourceSheet1.Cells(Rows.Count, 1).End(xlUp).Row
                        x = 2
                        For y = 1 To Riga
                            If WKSourceSheet1.Cells(y, 1) <> "" Then
                                
                                WKImportaSheet1.Cells(1, 1).Value = WKSourceSheet1.Cells(y, 1).Value
                                
                            End If
                        Next
                    End With
    
    ...
    
        WKSource.Save
        WKSource.Close (SaveChanges = False)
        Application.ScreenUpdating = True
        Set WKSource = Nothing
        Set WKImporta = Nothing
        Set WKImportaSheet1 = Nothing
        Set WKSourceSheet1 = Nothing
    che riesce a fare il popolamento del file ImportaDati, sovrascrivendo sempre la cella A1. Dovrei suppongo a questo punto inserire un altro ciclo che si sposta di riga continuamente.

    Poi ci sarà da capire come caspita filtrare i campi che necessito..

    A seguire, salvataggio e chiusura del documento..

    Attendo vostri preziosissimi aiuti. E vi ringrazio anticipatamente.

  9. #9

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2316
    Versione Office
    Excel 2013
    Likes ricevuti
    857
    Likes dati
    781

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    per il primo problema prova così:
    Codice: 
    Sub test()
    Dim WKImporta As Workbook
    Dim WKSource As Workbook
    Dim WKImportaSheet1 As Worksheet
    Dim WKSourceSheet1 As Worksheet
    Dim strFile As String
    Dim riga As Long
    
    
    
    
    strFile = ThisWorkbook.Path 'localizzo il path del file e asssegno a variabile
    ChDir strFile
    
    
            Application.ScreenUpdating = False
                Set WKImporta = ThisWorkbook
                strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Selezionare file CSV...") 'apro una dialog per selezionare il CSV
                Set WKSource = Workbooks.Open(strFile) ' imposto la var WKSource mantenendo aperto il CSV
                
                Dim uRiga As Long
                uRiga = WKSource.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
    
                Range("a1:A" & uRiga).TextToColumns Destination:=Range("A1"), _
                    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), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1)), _
                    TrailingMinusNumbers:=True
                
                
                Set WKImportaSheet1 = WKImporta.ActiveSheet 'rendo attivo il foglio1 del file XLSM
                Set WKSourceSheet1 = WKSource.ActiveSheet ' rendo attivo il foglio1 del file CSV
    per il secondo:
    Codice: 
                    With WKSourceSheet1
                        riga = WKSourceSheet1.Cells(Rows.Count, 1).End(xlUp).Row
                        x = 2
                        For y = 1 To riga
                            If WKSourceSheet1.Cells(y, 1) <> "" Then
                                iRow = iRow + 1
                                WKImportaSheet1.Cells(iRow, 1).Value = WKSourceSheet1.Cells(y, 1).Value
                                
                            End If
                        Next
                    End With
    Un piccolo suggerimento: visto che sei pratico di VBA prova ad usare il registratore di macro.

    P.S. visto che non hai postato il file .csv ne ho usato uno mio. Potrebbe non funzionare (questione di "campi" del database)

  10. #10
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    32
    Messaggi
    50
    Versione Office
    2010
    Likes ricevuti
    1

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Ciao Rubik,
    ho provato ad inserire il codice, ed in realtà funziona regolarmente, senza alcun intoppo, per cui grazie infinite!!

    Ho modificato soltanto il seguente punto in modo tale che ogni volta, aggiunga in coda al precedente import eseguito, ed un altro valore in colonna 2:

    Codice: 
    If WKSourceSheet1.Cells(y, 1) <> "" Then
                                iRow = WKImportaSheet1.Cells(Rows.Count, 1).End(xlUp).Row
                                iRow = iRow + 1
                                WKImportaSheet1.Cells(iRow, 1).Value = WKSourceSheet1.Cells(y, 1).Value
                                WKImportaSheet1.Cells(iRow, 2).Value = WKSourceSheet1.Cells(y, 2).Value
    1 DOMANDA: Ipotizzando che nel file Origine.csv il campo data fosse sempre statico in cella B9 (per esempio), DOPO averlo correttamente formattato nelle celle, come posso pescarlo e riportarlo in coda all'ultima riga valorizzata di ImportaDati? ( provo a smanettarci un attimo )

    Proseguendo sono riuscito con il seguente codice ad estrarre gli orari:

    Codice: 
                                        Fine = Trim(WKImportaSheet1.Cells(iRow, 3))
                                        Fine = Right(Fine, 5)
                                        WKImportaSheet1.Cells(iRow, 5).Value = Fine
                                        
                                
                                        Inizio = Trim(WKImportaSheet1.Cells(iRow, 2))
                                        Inizio = Right(Inizio, 5)
                                        WKImportaSheet1.Cells(iRow, 4).Value = Inizio
                                        
                                        WKImportaSheet1.Cells(iRow, 6).Value = Fine - Inizio
    tuttavia, la parte segnata in rosso, non viene calcolata. Nel .CSV allegato all'inizio del thread, solo l'ultima riga ha una reale differenza di 16 min, ma mi restituisce 00.00.00...

    Grazie anticipatamente

  11. #11

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2316
    Versione Office
    Excel 2013
    Likes ricevuti
    857
    Likes dati
    781

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Citazione Originariamente Scritto da freepredator Visualizza Messaggio
    [...]
    1 DOMANDA: Ipotizzando che nel file Origine.csv il campo data fosse sempre statico in cella B9 (per esempio), DOPO averlo correttamente formattato nelle celle, come posso pescarlo e riportarlo in coda all'ultima riga valorizzata di ImportaDati? [...]
    per identificare la cella B9 puoi usare l'oggetto Range, in particolare
    Codice: 
    variabile=Range("B9")
    Citazione Originariamente Scritto da freepredator Visualizza Messaggio
    [...]
    Proseguendo sono riuscito con il seguente codice ad estrarre gli orari:

    Codice: 
                                        Fine = Trim(WKImportaSheet1.Cells(iRow, 3))
                                        Fine = Right(Fine, 5)
                                        WKImportaSheet1.Cells(iRow, 5).Value = Fine
                                        
                                
                                        Inizio = Trim(WKImportaSheet1.Cells(iRow, 2))
                                        Inizio = Right(Inizio, 5)
                                        WKImportaSheet1.Cells(iRow, 4).Value = Inizio
                                        
                                        WKImportaSheet1.Cells(iRow, 6).Value = Fine - Inizio
    tuttavia, la parte segnata in rosso, non viene calcolata. Nel .CSV allegato all'inizio del thread, solo l'ultima riga ha una reale differenza di 16 min, ma mi restituisce 00.00.00...

    Grazie anticipatamente
    Non ho il file quindi non posso verificare, ma prova a dichiarare la variabile "Fine" e "Inizio" di tipo Double
    e scrivi il comando in questo modo:
    Codice: 
    Fine = CDbl(Right(Trim(WKImportaSheet1.Cells(iRow, 3)),5))
    Inizio = CDbl(Right(Trim(WKImportaSheet1.Cells(iRow, 2)),5))

  12. #12
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    32
    Messaggi
    50
    Versione Office
    2010
    Likes ricevuti
    1

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Ciao Rubik,

    intanto grazie infinite per i consigli, ho risolto utilizzando il registratore macro.. Non è molto carino, ma funziona..

    Riporto codice funzionante:

    Codice: 
    Fine = Trim(WKImportaSheet1.Cells(iRow, 3))
                                Fine = Right(Fine, 5)
                                        
                                WKImportaSheet1.Cells(iRow, 5).Value = Fine
                                        
                                Inizio = Trim(WKImportaSheet1.Cells(iRow, 2))
                                Inizio = Right(Inizio, 5)
                                        
                                WKImportaSheet1.Cells(iRow, 4).Value = Inizio
                                WKImportaSheet1.Cells(iRow, 6).FormulaR1C1 = "=SUM(RC[-1]-RC[-2])"
    A questo punto, ho incontrato due piccoli problemini per cui vi chiedo gentilmente una qualche dritta..
    Allora, intanto riporto Codice completo:

    Codice: 
    Public Function importa()
    Dim WKImporta As Workbook, WKSource As Workbook, WKImportaSheet1 As Worksheet, WKSourceSheet1 As Worksheet
    Dim Riga As Long, Riga2 As Long, y As Long, x As Integer, z As Integer, fineriga As Integer
    
    
    Dim strFile As String
    Dim messaggio As String
    Dim delta As String
    
    
    Dim OraInizio As Date, OraFine As Date
    Dim Fine As String, Inizio As String
    
    
    strFile = ThisWorkbook.Path
    ChDir strFile
    
    
                Application.ScreenUpdating = False
                Set WKImporta = ThisWorkbook
                
                strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Selezionare file CSV...")
                
                Set WKSource = Workbooks.Open(strFile)
                
                Dim uRiga As Long
                
                uRiga = WKSource.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
    
    
                Range("a1:A" & uRiga).TextToColumns Destination:=Range("A1"), _
                    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), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1)), _
                    TrailingMinusNumbers:=True
            
                Set WKImportaSheet1 = WKImporta.ActiveSheet
                Set WKSourceSheet1 = WKSource.ActiveSheet
                    With WKSourceSheet1
                        Riga = WKSourceSheet1.Cells(Rows.Count, 1).End(xlUp).Row
                        
                        For y = 1 To Riga
                            
                            Dim Processo As String
                            
                            Processo = Trim(WKSourceSheet1.Cells(y, 1))
                            Processo = Left(Processo, 4)
                            
                            If Processo = "C1P0" Or _
                                Processo = "C1S0" Or _
                                Processo = "C1P1" Or _
                                Processo = "C1S1" Or _
                                Processo = "C1P2" Or _
                                Processo = "C1S2" Or _
                                Processo = "C1P3" Or _
                                Processo = "C1S3" Or _
                                Processo = "C1P4" Or _
                                Processo = "C1S4" Or _
                                Processo = "C2P4" Or _
                                Processo = "C2S4" Or _
                                Processo = "C2PX" Or _
                                Processo = "C2SX" Or _
                                Processo = "C2PY" Or _
                                Processo = "C2SY" Or _
                                Processo = "C2PZ" Or _
                                Processo = "C2SZ" Then
    
    
                                iRow = WKImportaSheet1.Cells(Rows.Count, 1).End(xlUp).Row
                                iRow = iRow + 1
                                
                                WKImportaSheet1.Cells(iRow, 1).Value = WKSourceSheet1.Cells(y, 1).Value
                                WKImportaSheet1.Cells(iRow, 2).Value = WKSourceSheet1.Cells(y, 5).Value
                                WKImportaSheet1.Cells(iRow, 3).Value = WKSourceSheet1.Cells(y, 6).Value
       
                                Fine = Trim(WKImportaSheet1.Cells(iRow, 3))
                                Fine = Right(Fine, 5)
                                        
                                WKImportaSheet1.Cells(iRow, 5).Value = Fine
                                        
                                Inizio = Trim(WKImportaSheet1.Cells(iRow, 2))
                                Inizio = Right(Inizio, 5)
                                        
                                WKImportaSheet1.Cells(iRow, 4).Value = Inizio
                                WKImportaSheet1.Cells(iRow, 6).FormulaR1C1 = "=SUM(RC[-1]-RC[-2])"
                                  
                                    
                             End If
                            
                        Next
    
    
                    End With
                    
        WKSource.Save
        WKSource.Close (SaveChanges = False)
        Application.ScreenUpdating = True
        Set WKSource = Nothing
        Set WKImporta = Nothing
        Set WKImportaSheet1 = Nothing
        Set WKSourceSheet1 = Nothing
    
    
    End Function
    Tralasciando la parte di filtro relativo all'estrazione dal documento Origine, nel documento Importa mi vengono correttamente estratti solo le righe corrispondenti a quei criteri, ma a questo punto ho incontrato due problemini:

    1. non capisco come mai, al primo Import, venga popolata dalla cella A2 e non da A1.
    2. Sul secondo Import vorrei che venisse lasciato uno spazio tra una giornata e l'altra (leggasi import e l'altro)

    Ps.
    Suppongo debba inserire un'ulteriore condizione PRIMA della selezione della variabile PROCESSO, altrimenti leggendo le righe, seleziona unicamente quelle e non mi riporta Data e Intestazione delle colonne...

    NB. (il file Origine, ho dovuto caricarlo in XLSX, dal momento che in CSV non mi permette di allegarlo)
    Allego documento 1 (Origine)
    Allego ipotetico format visivo di ImportaDati

    Grazie infinitissimo!!!!
    File Allegati File Allegati

  13. #13
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    32
    Messaggi
    50
    Versione Office
    2010
    Likes ricevuti
    1

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Rieccomi di nuovo.. Ho modificato alcune cosette ed attualmente funziona più o meno tutto quanto, anche se avrei ancora un paio di cosette da sistemare, per cui chiedo un vostro supporto.

    Intanto ecco il codice aggiornato:

    Codice: 
    Public Function importa()
    Dim WKImporta As Workbook, WKSource As Workbook, WKImportaSheet1 As Worksheet, WKSourceSheet1 As Worksheet
    Dim Riga As Long, Riga2 As Long, y As Long, x As Integer, z As Integer, fineriga As Integer
    
    
    Dim strFile As String
    Dim messaggio As String
    Dim delta As String
    
    
    Dim OraInizio As Date, OraFine As Date
    Dim Fine As String, Inizio As String
    
    
    strFile = ThisWorkbook.Path
    ChDir strFile
    
    
                Application.ScreenUpdating = False
                Set WKImporta = ThisWorkbook
                
                strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Selezionare file CSV...")
                
                Set WKSource = Workbooks.Open(strFile)
                
                Dim uRiga As Long
                
                uRiga = WKSource.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
                
                Range("a1:A" & uRiga).TextToColumns Destination:=Range("A1"), _
                    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), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1)), _
                    TrailingMinusNumbers:=True
            
                Set WKImportaSheet1 = WKImporta.ActiveSheet
                Set WKSourceSheet1 = WKSource.ActiveSheet
    
    
                x = WKImportaSheet1.Range("A" & Rows.Count).End(xlUp).Row
                
                    With WKSourceSheet1
                        Riga = WKSourceSheet1.Cells(Rows.Count, 1).End(xlUp).Row
                        
                        Dim vedidata As String
                        
                        vedidata = Trim(WKSourceSheet1.Range("B8"))
                        
                        For y = 1 To Riga
                            
                            Dim Processo As String
                            Dim DataOperativa As String
                            
                            DataOperativa = Trim(WKSourceSheet1.Cells(y, 1))
                            DataOperativa = Left(DataOperativa, 4)
                            
                            Processo = Trim(WKSourceSheet1.Cells(y, 1))
                            Processo = Left(Processo, 4)
                            
                            If DataOperativa = "Date" And Processo = "C1P0" Or _
                                    Processo = "C1S0" Or _
                                    Processo = "C1P1" Or _
                                    Processo = "C1S1" Or _
                                    Processo = "C1P2" Or _
                                    Processo = "C1S2" Or _
                                    Processo = "C1P3" Or _
                                    Processo = "C1S3" Or _
                                    Processo = "C1P4" Or _
                                    Processo = "C1S4" Or _
                                    Processo = "C2P4" Or _
                                    Processo = "C2S4" Or _
                                    Processo = "C2PX" Or _
                                    Processo = "C2SX" Or _
                                    Processo = "C2PY" Or _
                                    Processo = "C2SY" Or _
                                    Processo = "C2PZ" Or _
                                    Processo = "C2SZ" Then
                                    
                                    iRow = WKImportaSheet1.Cells(Rows.Count, 1).End(xlUp).Row
                                    
                                    iRow = iRow + 1
                                    
                                    WKImportaSheet1.Cells(iRow, 1).Value = WKSourceSheet1.Cells(y, 1).Value
                                    WKImportaSheet1.Cells(iRow, 2).Value = WKSourceSheet1.Cells(y, 5).Value
                                    WKImportaSheet1.Cells(iRow, 3).Value = WKSourceSheet1.Cells(y, 6).Value
           
                                    Fine = Trim(WKImportaSheet1.Cells(iRow, 3))
                                    Fine = Right(Fine, 5)
                                            
                                    WKImportaSheet1.Cells(iRow, 5).Value = Fine
                                    'WKImportaSheet1.Cells(iRow, 3).Value = Fine
                                    
                                    Inizio = Trim(WKImportaSheet1.Cells(iRow, 2))
                                    Inizio = Right(Inizio, 5)
                                            
                                    WKImportaSheet1.Cells(iRow, 4).Value = Inizio
                                    'WKImportaSheet1.Cells(iRow, 2).Value = Inizio
                                    
                                    WKImportaSheet1.Cells(iRow, 6).FormulaR1C1 = "=SUM(RC[-1]-RC[-2])"
                                    'WKImportaSheet1.Cells(iRow, 4).FormulaR1C1 = "=SUM(RC[-1]-RC[-2])"
                                      
                            End If
                            
                        Next
                        WKImportaSheet1.Cells(x, 1).Value = vedidata
                        
                    End With
                    
                    x = x + 1
                    
    
    
        Application.DisplayAlerts = False
        WKSource.Close
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
        Set WKSource = Nothing
        Set WKImporta = Nothing
        Set WKImportaSheet1 = Nothing
        Set WKSourceSheet1 = Nothing
    
    
    End Function
    1. Problema
    Il secondo import sovrascrive sempre l'ultima riga del primo.. il terzo sovrascrive quella del secondo, ecc ecc

    2. Problema
    Non riesco a riportare quelle stramaledettissime intestazioni di colonna, mannaggia...

    Nuovamente grazie in anticipo per qualsiasi consiglio, parere e suggerimento..

  14. #14
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    937
    Versione Office
    2010
    Likes ricevuti
    128
    Likes dati
    1

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    per il primo dovrebbe bastare questa modifica
    Codice: 
    uRiga = WKSource.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row + 1

  15. #15
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    32
    Messaggi
    50
    Versione Office
    2010
    Likes ricevuti
    1

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Buonasera a tutti,

    preso da un raptus, ho riscritto tutto quanto, modificando qualcosina ed incredibilmente sono riuscito a far funzionare tutto..

    Riporto codice completo nel caso qualcuno abbia bisogno:

    Codice: 
    Public Function importa()
    Dim WKImporta As Workbook, WKSource As Workbook, WKImportaSheet1 As Worksheet, WKSourceSheet1 As Worksheet
    Dim Riga As Long, Riga2 As Long, y As Long, x As Integer, z As Integer, fineriga As Integer
    
    
    
    
    Dim strFile As String
    Dim messaggio As String
    Dim delta As String
    
    
    
    
    Dim OraInizio As Date, OraFine As Date
    Dim Fine As String, Inizio As String
    
    
    strFile = ThisWorkbook.Path
    ChDir strFile
    
    
    
    
                Application.ScreenUpdating = False
                Set WKImporta = ThisWorkbook
                
                strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Selezionare file CSV...")
                
                Set WKSource = Workbooks.Open(strFile)
                
                Dim uRiga As Long
                
                uRiga = WKSource.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
                
                Range("a1:A" & uRiga).TextToColumns Destination:=Range("A1"), _
                    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), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1)), _
                    TrailingMinusNumbers:=True
            
                Set WKImportaSheet1 = WKImporta.ActiveSheet
                Set WKSourceSheet1 = WKSource.ActiveSheet
    
    
                Dim Processo As String
                Dim DataOperativa As String
                Dim vedidata As String
                Dim evento As String, st_time As String, end_time As String
                
                Riga = WKSourceSheet1.Cells(Rows.Count, 1).End(xlUp).Row
    
    
                x = WKImportaSheet1.Cells(Rows.Count, 1).End(xlUp).Row + 1
                
                iRow = 1
                
                vedidata = Trim(WKSourceSheet1.Range("B8"))
                WKImportaSheet1.Cells(x, 1).Value = vedidata
                WKImportaSheet1.Cells(x, 1).Font.Bold = True
                
                evento = WKSourceSheet1.Cells(12, 1).Value
                st_time = WKSourceSheet1.Cells(12, 5).Value
                end_time = WKSourceSheet1.Cells(12, 6).Value
                
                WKImportaSheet1.Cells(x + 1, 1).Value = evento
                WKImportaSheet1.Cells(x + 1, 1).Font.Bold = True
                
                WKImportaSheet1.Cells(x + 1, 2).Value = st_time
                WKImportaSheet1.Cells(x + 1, 2).Font.Bold = True
                
                WKImportaSheet1.Cells(x + 1, 3).Value = end_time
                WKImportaSheet1.Cells(x + 1, 3).Font.Bold = True
                
                WKImportaSheet1.Cells(x + 1, 4).Value = "Elapsed Time"
                WKImportaSheet1.Cells(x + 1, 4).Font.Bold = True
                
                WKImportaSheet1.Cells(x + 1, 5).Value = "DELTA"
                WKImportaSheet1.Cells(x + 1, 5).Font.Bold = True
            
                For y = 1 To Riga
                    
                    DataOperativa = Trim(WKSourceSheet1.Cells(8, 1))
                    DataOperativa = Left(DataOperativa, 4)
                            
                    Processo = Trim(WKSourceSheet1.Cells(y, 1))
                    Processo = Left(Processo, 4)
    
    
                        If DataOperativa = "Date" And _
                                    Processo = "C1P0" Or _
                                    Processo = "C1S0" Or _
                                    Processo = "C1P1" Or _
                                    Processo = "C1S1" Or _
                                    Processo = "C1P2" Or _
                                    Processo = "C1S2" Or _
                                    Processo = "C1P3" Or _
                                    Processo = "C1S3" Or _
                                    Processo = "C1P4" Or _
                                    Processo = "C1S4" Or _
                                    Processo = "C2P4" Or _
                                    Processo = "C2S4" Or _
                                    Processo = "C2PX" Or _
                                    Processo = "C2SX" Or _
                                    Processo = "C2PY" Or _
                                    Processo = "C2SY" Or _
                                    Processo = "C2PZ" Or _
                                    Processo = "C2SZ" Then
                                                                        
                                                iRow = WKImportaSheet1.Range("A" & Rows.Count).End(xlUp).Row
                                                
                                                iRow = iRow + 1
                                                
                                                WKImportaSheet1.Cells(iRow, 1).Value = WKSourceSheet1.Cells(y, 1).Value
                                                WKImportaSheet1.Cells(iRow, 2).Value = WKSourceSheet1.Cells(y, 5).Value
                                                WKImportaSheet1.Cells(iRow, 3).Value = WKSourceSheet1.Cells(y, 6).Value
                                                
                                                Fine = Trim(WKImportaSheet1.Cells(iRow, 3))
                                                Fine = Right(Fine, 5)
                                                
                                                'WKImportaSheet1.Cells(iRow, 5).Value = Fine
                                                WKImportaSheet1.Cells(iRow, 3).Value = Fine ' dato gia filtrato
                                                
                                                Inizio = Trim(WKImportaSheet1.Cells(iRow, 2))
                                                Inizio = Right(Inizio, 5)
                                                
                                                'WKImportaSheet1.Cells(iRow, 4).Value = Inizio
                                                WKImportaSheet1.Cells(iRow, 2).Value = Inizio ' dato gia filtrato
                                                
                                                'WKImportaSheet1.Cells(iRow, 6).FormulaR1C1 = "=SUM(RC[-1]-RC[-2])"
                                                WKImportaSheet1.Cells(iRow, 4).FormulaR1C1 = "=SUM(RC[-1]-RC[-2])" ' dato gia filtrato
                        End If
                Next y
    
    
        Application.DisplayAlerts = False
        WKSource.Close
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
        
        Application.Goto ActiveWorkbook.Sheets(1).Cells(iRow + 1, 1)
        
        Set WKSource = Nothing
        Set WKImporta = Nothing
        Set WKImportaSheet1 = Nothing
        Set WKSourceSheet1 = Nothing
                
    End Function
    Rimangono alcune cosette ma dovrei essere in grado autonomamente, nel caso apro altra discussione.

    Ringrazio veramente tutti per la disponibilità e la gentilezza nel supporto avuto. GRAZIE!!!

  16. I seguenti utenti hanno dato un "Like"


  17. #16

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    63
    Messaggi
    4895
    Versione Office
    2007 - 2013
    Likes ricevuti
    537
    Likes dati
    93

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Ciao Freepredator

    Non ho seguito la discussione ma volevo farti i complimenti

    Quando si arriva da soli alla risoluzione del proprio problema non c'è soddisfazione più grande ed inoltre quello che si impara non si dimentica più.

    Bravo!
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  18. #17
    L'avatar di freepredator
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Milano
    Età
    32
    Messaggi
    50
    Versione Office
    2010
    Likes ricevuti
    1

    Re: Import dati (da CSV) e formattazione filtrata su altro foglio (XLSM)

    Ciao alfrimpa, ti ringrazio!!!!!

    In realtà a volte basta solo uno spunto, un'idea, un parere o un suggerimento su un qualcosa che in alcuni momenti non si considera o magari più semplicemente non si usa spesso.

    Mi preme ringraziare, e colgo l'occasione per rifarlo, davvero tutti coloro che mi hanno dato un grandissimo aiuto.

Discussioni Simili

  1. [Tutorial VBA] Popolare UserForm Con dati di una tabella ed inserire dati in un altro foglio
    Di dracoscrigno nel forum Imparando Excel & VBA - Tutorial di Excel-
    Risposte: 3
    Ultimo Messaggio: 05/04/17, 21:13
  2. Copia dati da un foglio a un altro foglio
    Di bassotto nel forum Domande su Excel VBA e MACRO
    Risposte: 2
    Ultimo Messaggio: 08/12/16, 14:50
  3. tabella filtrata in un altro foglio
    Di Onofrio nel forum Domande su Excel in generale
    Risposte: 16
    Ultimo Messaggio: 03/05/16, 15:48
  4. Esportare singolo foglio da xlsm a xlsx.
    Di James nel forum Domande su Excel VBA e MACRO
    Risposte: 14
    Ultimo Messaggio: 04/03/16, 07:27
  5. Import foglio con composizione e stampa etichetta personalizzata
    Di G.Bove nel forum Domande su Excel VBA e MACRO
    Risposte: 33
    Ultimo Messaggio: 26/11/15, 17:49

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •