• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Meerdere "CSV" bestanden ophalen

Status
Niet open voor verdere reacties.

Moche56

Gebruiker
Lid geworden
3 aug 2013
Berichten
58
Hallo,
Hierbij een vraag waarvoor ik op internet geen documentatie kan vinden.
Ik ontvang per dag 4 "CSV" bestanden die ik overneem in Excel. De eerste keer d.m.v. "importeren" en daarna d.m.v. vernieuwen
Ik importeer ze in 4 verschillende tab's.
Ik heb daarvoor meerdere vragen:

  • Is het mogelijk de 4 bestanden in een Tab (ipv 4), keurig onder elkaar, te importeren en later te vernieuwen?
  • Stel de 4 "CSV" bestanden staan in een map. Kan het vernieuwen d.m.v. een macro gebeuren? Zo ja, hoe zit de macro eruit?

Hulp is welkom.
Alvast bedankt

Grt,
Moché
 
Zo zou het kunnen.
Code:
Private Sub MergeCSVfiles2()
    Dim cn      As Object
    Dim rs      As Object
    Dim sSql    As String
    Dim i       As Long
    Set cn = CreateObject("ADODB.connection")
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & ThisWorkbook.Path & "\;" & _
            "Extended Properties=""text;HDR=Yes;FMT=Delimited"";"
    sSql = ""
    sSql = sSql & " Select * FROM FileA.txt"
    sSql = sSql & " UNION"
    sSql = sSql & " Select * FROM FileB.txt"
    Set rs = CreateObject("ADODB.Recordset")
    With rs
        .Open sSql, cn, 0, 1, 1
        ThisWorkbook.Worksheets.Add
        For i = 0 To .Fields.Count - 1
            Cells(1, i + 1).Value = .Fields(i).Name
        Next i
        Cells(2, 1).CopyFromRecordset rs
    End With
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing
End Sub
 
of:

in dit voorbeeld:
het pad G:\OF\ (pas aan aan jouw situatie)
de bestanden 0_cataloog_*.csv (pas aan aan jouw situatie)
het verzamelbestand G:\OF\0_catalogi.csv (pas aan aan jouw situatie)
het werkblad Sheet1 (pas aan aan jouw situatie)

Code:
Sub M_snb()
  Shell "cmd /c copy G:\OF\0_Cataloog_*.csv G:\OF\0_catalogi.csv", vbHide
   
  If Sheets("sheet1").QueryTables.Count = 0 Then Sheets("sheet1").QueryTables.Add "TEXT;G:\OF\0_catalogi.csv", Range("A1")
  Sheets("sheet1").QueryTables(1).Refresh
End Sub
 
Laatst bewerkt:
Hallo Frans,
Bedankt voor de code maar mijn kennis is iets beperkt.:confused:
Zou je uitleg mee kunnen geven over het opgeven van het pad waar de bestanden zich bevinden.
En het pad waar de 4 bestanden gekopieerd moeten worden.
Dan het moeilijke gedeelte: de bestanden hebben elke dag een andere naam.
Voorbeeld:
222AABB.csv
222CCDD.csv
222EEFF.csv
222GGHH.csv
Maak dat het probleem te groot?

Alvast bedankt (ook als het niet gaat)
mvrg,
Moché
 
Hallo snb,
Ik mag weer gebruik maken van je hulp. Bedankt
Zoals gemeld hierboven hebben de bestanden elke dag een andere naam:
Voorbeeld:
222AABB.csv
222CCDD.csv
222EEFF.csv
222GGHH.csv

En ik begrijp de regel hieronder niet goed:

Code:
Shell "cmd /c copy G:\OF\0_Cataloog_*.csv G:\OF\0_catalogi.csv", vbHide

Waar staan "0_Cataloog_*.csv " en "0_catalogi.csv" voor.
Ik heb namelijk 4 bestanden
Ik hoor graag je reactie
mvrg,
Moché
 
Kun jij meer uitleg geven ?

In welke map/folder/directory staan die 4 csv bestanden ?
 
In de map: F:\Werk \Bedrijf\Module\DELFOR\
Dit is thuis. Op mijn werk is het een andere pad.
Zoals ik zei de bestanden hebben elke dag een andere naam waarbij de eerste 3 tekens altijd cijfers zijn en altijd oplopend (dit is de dag van het jaar).
Ik hoop dat je hiermee verder kan.
Grt, Moché
 
Als je een code niet begrijpt gebruik dan je :
- VBA handboek
- de hulpbestanden van de VBEditor ( F1 )
- de objectinventaris van de VBEditor ( F2 )

en realiseer je vooral dat VBA een taal is die net als iedere andere taal van simpel naar complex moet worden geleerd.
Hoe meer je zelf uitzoekt hoe sneller je leert.
 
Moché, je wordt iha het beste geholpen als je je vraag zo concreet mogelijk maakt met voorbeelden:
- een voorbeeldje van één van je csv bestanden
- een voorbeeld van hoe je wilt dat de csv worden samengevoegd op één werkblad
- en wellicht ook een voorbeeld van wat je er daarna mee wilt doen.
En: je hebt het over 4 bestanden per dag. Dus na drie dagen heb je 12 bestanden in de map? Maar bij het samenvoegen wil je alleen de laatste vier gebruiken? Of moeten de laatste vier toegevoegd worden aan de bestaande al samengevoegde gegevens?
 
snb,
Je hulp wordt gewaardeerd.
Zoals je zegt, leren doen je door zelf uit te zoeken.
Ik probeer het zoveel mogelijk uit te vinden voordat ik aanklop bij de kenners.
Ik besef ook dat ik niet zo eenvoudige vragen stel maar de makkelijke vragen die los ik zelf op :-)
Bedankt voor je hulp tot nu toe.
Moché
 
Pixcel,
Communicatie is de basis om problemen op te lossen (en conflicten te voorkomen :-( )
Door je vragen begrijp ik waar ik tekort kom in mij uitleg.
In het bijgevoerd bestand staan 4 tab's met CSV bestanden CSV1100 t/m CSV2300.
Die ontvang ik elke dag op 4 verschillende tijdstippen en zet ze in een map op mij PC.
Voor nu importeer ik de bestanden, eerst een per tab, daarna d.m.v. een macro verplaats ik ze alle 4 naar de tab: CSVCUM waarbij de laatste CSV bovenaan komt te staan.
Daarna mak ik de map met de 4 csv bestanden leeg en de dag daarna herhaal ik deze actie.
In het verzamel bestand kommen alle csv's bestanden samen
  • 4 bestanden per dag,
  • 24 per week,
  • 1.248 per jaar.
Elke bestand bestaat uit meer dan 100 regels, aantal is per bestand variabel.
De gegevens die verzamelt worden zullen geanalyseerd worden. Misschien zal het bestand vast lopen. Dat moet ik onderzoeken.
Deze gegevens zijn van belang voor de verdere afhandeling van het proces.

Wat ik probeer te doen is het tussenproces in de 4 tab's over te slaan.
D.m.v. een macro alle 4 csv bestanden in een keer te importeren in CSVCUM

Is het iets duidelijker?

Als je vragen hebt hoor ik ze graag.
Of je me kunt helpen hoor ik nog beter.

Bekijk bijlage CSV samenvoegen.xls

Grt,
Moché
 
Ik heb een korte vraag waarna ik deze verzoek zal afsluiten.
Onderstaande code heb ik ontvangen van snb.

Code:
Sub M_snb()
  Shell "cmd /c copy G:\OF\0_Cataloog_*.csv G:\OF\0_catalogi.csv", vbHide
  
  If Sheets("sheet1").QueryTables.Count = 0 Then Sheets("sheet1").QueryTables.Add "TEXT;G:\OF\0_catalogi.csv", Range("A1")
  Sheets("sheet1").QueryTables(1).Refresh
End Sub

De tweede gedeelte van de code werkt wel maar ik krijg de eerste regel niet werkend.
Ik hoor graag als deze coderegel een aanpassing nodig heeft.

Code:
Shell "cmd /c copy G:\OF\0_Cataloog_*.csv G:\OF\0_catalogi.csv", vbHide

Alvast bedankt.
Mvgrt,
Moché
 
Wat ik probeer te doen is het tussenproces in de 4 tab's over te slaan.
D.m.v. een macro alle 4 csv bestanden in een keer te importeren in CSVCUM
Dat is niet zo heel moeilijk. Geef eens een voorbeeld van zo'n csv bestand (dus niet in een excel bestand).
Je gebruikt excel 2003? 124.800 regels per jaar is teveel voor één xls bestand.
Het kan helpen om voorbeelden te geven van je analyses. Misschien kunnen de gegevens bij het inlezen al ingedikt worden.
 
Hallo Pixcel,
Ik gebruik Office 2010 en xlsx bestanden.
Ik had een xls bestand geüpload omdat mijn bestand te groot was. Dat heb ik aangepast.
Een csv bestand kan niet geüpload worden en daarom heb ik de extensie gewijzigd naar "txt"
Ik ontvang 4 csv bestanden per dag.
Ik wil ze in een keer importeren in de 4 tabbladen van "csv samenvoegen" en daarvandaan kopiëren naar de tabblad "CSVCUM"
Kan dat?

Een andere vraag: kan een "csv bestand" direct geïmporteerd worden via een macro als de naam van het bestand en de pad waar het zich bevindt bekend zijn?


Bekijk bijlage CSV samenvoegen.xlsx
Bekijk bijlage CSV1100.txt

Ik probeer zo duidelijk mogelijk te zijn maar ik merk dat het niet meevalt :-(

grt.
Moché
 
Ik wil ze in een keer importeren in de 4 tabbladen van "csv samenvoegen" en daarvandaan kopieren naar de tabblad "CSVCUM" Kan dat?
Ja, maar waarom wil je dit zo? Gemakkelijker is om de csv-bestanden in te lezen en aan de tabel toe te voegen. Dat kan op verschillende manieren: snb gebruikt bijv de windows shell en een querytable. Je kunt ook een loopje maken met basic vba commando's als Dir, Open, Line Input en Split.
Een snelle manier is mbv Ado en Sql. Zie bijlage voor een generieke oplossing. Zet het bestand in een testmap met een paar van je csv's, open het en Alt-F8.
 

Bijlagen

Laatst bewerkt:
Het probleem is dat ik niet weet hoe in een keer de 4 bestanden samengevoegd kunnen worden en ook met de juist indeling.
Dus ik heb een macro opgenomen waarmee de bestanden een voor ingelezen worden en daarna (met de hulp van "Senior members" heb ik de macro uitgebreid met het samenvoegen van de 4 "csv" bestanden.
Omslachtig maar het werkt.
Echt je oplossing is m.i. een goed vervanging maar het lees alleen de eerste kolom. Na de eerste ";" wordt de rest van de regel genegeerd en springt het na de volgende rij.
Daarbij komt ook bij dat de "csv" bestanden worden niet eenvoudig ingelezen maar ook gerangschikt: datum, tekst, enz.
De oplossing van sbn krijg ik niet werkend. Waarschijnlijk omdat ik het niet goed begrijp.
Ik besef echt dat mijn verzoek niet eenvoudig uit te leggen is.
Bedankt zover.
 
Na de eerste ";" wordt de rest van de regel genegeerd en springt het na de volgende rij.
Als je bedoelt: alles komt in de eerste kolom te staan, inclusief al die punt-komma's: dan staat op jouw pc het scheidingsteken op TabDelimited en niet op Delimited ( ; )
Pas dit aan in de registry, sleutel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text
Zet in Format = "Delimited ( ; )" (zonder quotes en ook zonder spaties)
 
Pixcel,

Nee alleen de eerste string voor de ";" wordt opgenomen.
Dus:
aaa;bbb;ccc;ddd;eee
fff;ggg;hhh;jjj;kkk

wordt:
aaa;
fff;

Ik heb voor de zekerheid naar de sleutel gezocht in mijn registry: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Tekst
Ik kon het niet vinden :-(

Grt,
Moché
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan