• 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.

Oude data laten overschrijven met nieuwe data

Status
Niet open voor verdere reacties.

cowann

Gebruiker
Lid geworden
30 okt 2019
Berichten
17
Hallo,

Ik heb een vraag over mijn excel spreadsheet. Er is een bron bestand waar het totaal aantal producten in staat, dit aantal zal altijd hetzelfde blijven:
Bron.JPG

Nu heb ik een nieuw excel bestand waar een aantal veranderingen hebben plaats gevonden, alleen de kolom ID blijft hetzelfde maar de data die daarbij hoort veranderd en die wil ik over de oude data laten schrijven.
nw data.JPG

Is dit mogelijk?

(De teksten en getallen zijn fictief)
 

Bijlagen

Laatst bewerkt:
Welkom op het forum.:)
Dit is mogelijk maar post een klein vb bestand zonder gevoelige info, met plaatjes kunnen we weinig aanvangen in een Excel forum.
Om een bestand in te voegen druk op Ga Geavanceerd en dan op de paperclip.
 
Draai deze code eens in een proefbestand.

De code in een standaard module van de bron.
Het bestand nieuw opslaan op de schijf C:\Temp\, of de code aanpassen.
Code:
Sub hsv()
Dim sv, sv2, i As Long, j As Long
sv = Cells(1).CurrentRegion
With Workbooks.Open("c:\temp\forum nieuwe data.xlsx")
 sv2 = .Sheets(1).Cells(1).CurrentRegion
       .Close 0
End With
 With CreateObject("scripting.dictionary")
     For i = 2 To UBound(sv2)
       .Item(sv2(i, 1)) = Application.Index(sv2, i)
     Next i
     For i = 2 To UBound(sv)
        For j = 2 To UBound(sv, 2)
          If Not IsEmpty(.Item(sv(i, 1))) Then sv(i, j) = Split(Join(.Item(sv(i, 1)), "|"), "|")(j - 1)
        Next j
     Next i
    Cells(1).CurrentRegion.Resize(, 14) = sv
  End With
End Sub
 
Bedankt!

De code werkt.

Nu heb ik volgende vraag, ik lees nu 1 specifiek bestand over mijn bronbestand heen. Straks gaat de naam 'forum nieuw data' steeds veranderen omdat er elke dag nieuwe data moet worden in gelezen (wel wordt het bestand steeds in hetzelfde mapje opgeslagen) . Hoe kan ik dit oplossen?

Dan nog een vraag, het bestand wat ingelezen wordt is in dit geval een excel werkmap maar mijn eind doel is het direct inlezen van een csv. bestand. Hoe kan ik dit het beste aanpakken?
 
Over een andere boeg misschien?

De code opent een dialoogvenster om een keuze te maken welk bestand je wilt importeren.
De code zet de gegevens onder de oude en sorteert deze op kolom F (datum).
Daarna verwijderd het de duplicaten van kolom A.

Test het maar eens weer.

De rode tekst in de code vervangen door jouw structuur.

Code:
Sub hsv()
Dim sv
 With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = [COLOR=#ff0000]"C:\Users\cowann\documents\"[/COLOR]
    .FilterIndex = 2
  If .Show Then
     .Execute
    With ActiveWorkbook
         If .Name <> ThisWorkbook.Name Then
          sv = .Sheets(1).Cells(1).CurrentRegion.Offset(1)
          .Close 0
            With Sheets("blad1")
              .Columns(1).NumberFormat = "@"
              .Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(UBound(sv), 15) = sv
              .Cells(1).CurrentRegion.Sort Range("f1"), , , , , , , 1
              .Cells(1).CurrentRegion.RemoveDuplicates 1, xlYes
            End With
        End If
     End With
   End If
 End With
End Sub
 
Super! Het werkt. Bedankt.

Het zou helemaal perfect zijn als ik CSV. bestanden rechtstreeks kan inlezen, zonder dat ik de gegevens om moet zetten naar kolommen en op hoef te slaan als excel bestand. Is dit een optie?
 
Test het maar eens.
Code:
Sub hsv()
Dim sv
 With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = "C:\Users\cowann\documents\csv bestanden\"
    .FilterIndex = 6
    .AllowMultiSelect = 0
  If .Show Then
   Workbooks.OpenText .SelectedItems(1), , , 1, , , , -1, , , , , , , , , , -1
    With ActiveWorkbook
         If .Name <> ThisWorkbook.Name Then
          sv = .Sheets(1).Cells(1).CurrentRegion.Offset(1)
          .Close 0
            With Sheets("blad1")
              .Columns(1).NumberFormat = "@"
              .Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(UBound(sv), 15) = sv
              .Cells(1).CurrentRegion.Sort Range("f1"), , , , , , , 1
              .Cells(1).CurrentRegion.RemoveDuplicates 1, xlYes
            End With
        End If
     End With
   End If
 End With
End Sub
 
Hoi Harry,

Ik heb de code getest, nu krijg ik in elke kolom de regels van een csv. bestand. Het mooiste zou zijn als ik een csv bestand kan inlezen en dat de gegevens automatisch in de kolommen worden geplaatst. Is dat mogelijk?
 
Plaats eens zo'n csv bestand.
Ik weet namelijk het scheidingsteken niet.
Deze code zet het in kolommen maar waarschijnlijk met een ander teken dan de jouwe.
 
De derde regel in de .csv is dat een fout.

Zo krijg je lege cellen in kolom A en daar kan je geen sortering en duplicaten verwijderen op los laten.
Stuur eens een .csv met die vijftien kolommen.

Ik heb zo'n vermoeden dat je wat achterwege houdt.
 
Dit zijn de officiële bestanden. 22. moet eroverheen gelezen worden.
Nu wordt er 1 csv regel in elke kolom ingelezen.

Bedankt!
 

Bijlagen

Probeer het zo maar eens.

Code:
Sub hsv()
Dim sv
 With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = "C:\Users\hsv\documents\1e vba\csv openen\"
    .FilterIndex = 6
    .AllowMultiSelect = 0
  If .Show Then
   Workbooks.OpenText .SelectedItems(1)
    With ActiveWorkbook
        .Sheets(1).Columns(1).TextToColumns , 1, , , , , , -1
          sv = .Sheets(1).Cells(1).CurrentRegion.Offset(1)
          .Close 0
            With Sheets("blad1")
              .Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(UBound(sv), 15) = sv
              .Cells(1).CurrentRegion.Sort Range("f1"), , , , , , , 1
              .Cells(1).CurrentRegion.RemoveDuplicates 1, xlYes
            End With
     End With
   End If
 End With
End Sub
 
Hallo Harry,

Zo wordt nu de data ingelezen.
 

Bijlagen

  • csv inlezen.JPG
    csv inlezen.JPG
    98,6 KB · Weergaven: 68
Vreemd, dan heb je waarschijnlijk toch semicolon.
Als ik je csv inlees is het doublequote.
Ik zal het vanavond eens aanpassen en dan maar weer zien.
 
Hoi Harry,

Ik heb het nog eens helemaal overnieuw gedaan maar nu krijg ik deze melding.
 

Bijlagen

  • 1.JPG
    1.JPG
    84,7 KB · Weergaven: 52
  • 2.JPG
    2.JPG
    106,5 KB · Weergaven: 55
  • 3.JPG
    3.JPG
    106,9 KB · Weergaven: 55
Geen idee.

Bij mij staat er iets van:

"99100000030","12.25","06-11-2019 23:10"
Enz.

Dus gescheiden door double quotes en komma's.
Wat staat er bij jou als je de csv opent?
 
Hallo Harry,

Het zelfde als bij jou. Ik heb een screenshot toegevoegd.
 

Bijlagen

  • Uitleg CSV F.JPG
    Uitleg CSV F.JPG
    67,1 KB · Weergaven: 54
"Het subscript valt buiten het bereik" staat er in de foutmelding.

Waarschijnlijk heeft sheet("Blad1") een andere naam.
 
Goedemorgen,

Bedankt voor het antwoord, nu lukt het om een CSV bestand in te lezen in kolommen. Nu is er nog 1 ding wat nog niet goed gaat, zie de foto. Ik heb de nummers in het bronbestand naar veranderd van standaard naar tekst omdat de nummers anders niet te lezen zijn maar tijdens het inlezen gaat er dan wat fout.
 

Bijlagen

  • EID Nummer fout.JPG
    EID Nummer fout.JPG
    138,6 KB · Weergaven: 52
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan