Macro copia da csv



  • Macro copia da .csv
    di GiancaS data: 11/11/2015 10:13:19

    Buongiorno a tutti
    sono nuovo e chiedo perdono in anticipo nel caso in cui stessi aprendo una discussione già esistente, ma non sono riuscito a trovare nulla nello storico.
    Premetto che sono un ignorante di VBA, ma me la cavo molto bene con Excel.
    Sporadicamente mi cimento in qualche semplice macro in VBA arrangiandomi con guide e tutorial.
    Per lavoro mi trovo giornalmente ad aggiornare tutta una serie di file prendendo i dati da un .XLSX d'origine e copiandoli su tutti i file.
    Oggi mi trovo a fare la stessa cosa ma questa volta l'origine è un .CSV e quando la macro incolla la pagina da copiare, sul file di destinazione, la incolla tutta nella prima colonna con i valori, che nel file .csv erano in celle diverse,separati da ";".
    Questo chiaramente impedisce l'alimentazione di tutti gli altri campi nel mio file.

    Come faccio a mantenere il formato ?

    spero che essere stato sufficientemente chiaro nell'esporre il mio problema. Sotto metto il codice VBA che uso al momento
    Ringrazio tutti in anticipo
     
    Workbooks.Open Filename:="percorso e nome file che devo aggiornare .xlsx", Password:="bprod01", WriteResPassword:="bprod01"
    Workbooks.Open Filename:="percorso e nome file di origine .csv"
    SxNomi = "nome del file da selezionare"   '<<< La sequenza iniziale dei nomi Gestionali
    SrcFile = "nome del file di origine"  '<<< Il file da cui leggi
    For Each wb In Workbooks
        If Left(wb.Name, Len(SxNomi)) = SxNomi Then
            Workbooks(SrcFile).Activate
            Sheets("nome del foglio su cui fare la selezione da copiare").Select
            Range("A:N").Copy
            wb.Sheets("nome del foglio in cui incollare").Range("A:N").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
            Application.CutCopyMode = False
        End If



  • di patel data: 11/11/2015 12:45:39

    non ho capito bene il tuo codice, ma per aprire un file csv prova questa macro
     
    Sub csvapri()
        With GetObject("C:file4.csv")
            ThisWorkbook.Sheets(1).Cells(1).Resize(.Sheets(1).UsedRange.Rows.Count, .Sheets(1).UsedRange.Columns.Count) = .Sheets(1).UsedRange.Value
            .Close 0
        End With
    End Sub






  • di GiancaS data: 11/11/2015 13:16:36

    ciao ti ringrazio, ma credo tu sopravvaluti le mie capacità in
    ho provato il tuo consiglio, ma non sembra funzionare. Molto probabilmente sono io che non lo so usare correttamente

    per intenderci, quando apro il .csv a mano ho N colonne con i vari dati che mi interessano, mentre quando lo apro tramite .csv mi ritrovo tutto in una colonna concatenato con ";"

    es. Id lotto;Nominativo;Chiave Contatore;Indirizzo;Comune;Stato;Data;Operatore;Tipo Chiusura;Note;Operazione;Misura;Esito;Esterno



  • di Raffaele_53 data: 11/11/2015 13:24:00

    Ciao a tutti
    Se arriva da un CSV, basta premere DATI/TESTO IN COLONNE/ e scegliere "," come divisore.
    Se desideri in VBA devi usare SPLIT

    @patel
    Sono confuso, se puoi dirmi dove sbaglio? Mi da il numero non la parola.
    Grazie mille
     
    Option Explicit
    Sub A()
    Dim Ur, X, Y As Long
    Dim N() As String, A As String
    Ur = Range("A" & Rows.Count).End(xlUp).Row
    For X = 1 To Ur
        N = Split(Cells(X, 1), ",")
        For Y = 0 To UBound(N)
            Cells(X, Y + 2) = Split(Y)
        Next Y
    Next X
    End Sub



  • di GiancaS data: 11/11/2015 14:29:53

    ancora non mi sembra funzionare, anche perché in questo file è presente una colonna compilata con note che possono contenere anche punteggiatura.
    Questo sfalserebbe tutte le righe
    vi allego il file.
    noterete che aprendolo è tutto correttamente intabellato, ma quanto lo aprite con una macro, chiaramente lo apre come .csv e si presenta il problema



  • di patel data: 11/11/2015 15:25:34

    con la mia macro lo apro correttamente, hai messo il giusto percorso nella riga seguente ?
     
        With GetObject("C:file4.csv")