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

Export automatiseren

Status
Niet open voor verdere reacties.

sheijstek12

Gebruiker
Lid geworden
25 sep 2013
Berichten
6
Beste allemaal,

Ik doe voor een vrijwilligers initiatief wekelijks een export van bestellijsten van klanten/producten. Nu wil ik deze lijsten automatisch laten invullen door excel maar loop tegen een probleem in de vlookup functie aan. Wat ik precies wil:

Ik wil een export van alle gegevens uit de website kopieren naar excel. Vervolgens laat ik uit de gehele lijst een unieke lijst met klanten namen genereren (door functie UNIEK).
Deze unieke klant namen koppel ik vervolgens aan de verschillende bestel lijsten waar alle gegevens dan door middel van VERT.ZOEKEN naartoe gehaald worden op basis van de bijbehorende klant naam.

Echter mijn probleem is dat bij de eerste lijst alles goed gaat, bij lijst 2 krijg ik alleen eerst een lijst met dubbele gegevens (omdat de VERT.ZOEKEN altijd van bovenaan begint met zoeken komt hij eerst een aantal keer het eerste artikel tegen, net zo lang tot hij met de zoekmatrix voorbij deze cel is.

Weten jullie hoe ik dit probleem kan oplossen?

Voorbeeld van een export uit de site:

Code:
Naam	Product	AantalPrijs
Klant-1	Product A	1	1,5
Klant-1	Product B	2	2
Klant-1	Product G	3	3
Klant-1	Product K	1	1,25
Klant-2	Product C	1	1,75
Klant-2	Product D	1	4
Klant-2	Product L	1	3
Klant-2	Product M	1	7
Klant-2	Product X	2	5
Klant-3	Product R	3	9
Klant-3	Product X	1	4
Klant-3	Product Y	1	0,75
Klant-3	Product Z	1	12
Klant-4	Product A	1	1,5
Klant-4	Product E	1	8
Klant-4	Product J	1	3
Klant-4	Product K	1	1,25
Klant-4	Product L	6	3
Klant-4	Product N	3	1,5
Klant-4	Product Z	5	12
Klant-5	Product E	1	8
Klant-5	Product F	2	6
Klant-5	Product G	5	3
Klant-5	Product M	2	7
Klant-5	Product N	4	1,5
Klant-5	Product P	2	2
Klant-5	Product Z	3	12


Alvast mega bedankt voor het meedenken!
 

Bijlagen

  • Voorbeeldje.xlsx
    18,1 KB · Weergaven: 12
Laatst bewerkt:
Dat zal niet met vert.zoeken gaan. Wat is de uiteindelijke bedoeling? Moeten de bestellijsten per klant geprint worden?
 
Dat vermoeden had ik al...
Klopt dat is het uiteindelijke doel, maar ik wil nog wel wat dingen kunnen automatiseren in de uiteindelijke printbare sheets.. Dus allereerste doel is om de informatie te extraheren en in een ander tabblad weer te geven..
 
Laatst bewerkt door een moderator:
Verdiep je eens in advancedfilter.
 
Indien je Excel 365 bezit.

Code:
=LET(ber;FILTER('Site Export'!B2:E28;'Site Export'!B2:B28="Klant-1");x;INDEX(ber;;2);y;INDEX(ber;;3);z;INDEX(ber;;4);KIEZEN({1\2\3};x;y;z))
Klant-1 is hard neergezet in de formule daar je samengevoegde cellen gebruikt (dat kan ook gecentreerd over de selectie).
 

Bijlagen

  • LET export.xlsx
    16 KB · Weergaven: 11
Of wel

Code:
=FILTER(FILTER('Site Export'!B2:E28;'Site Export'!B2:B28="Klant-1");{0\1\1\1})

Of direct naar het juiste bereik

Code:
=FILTER('Site Export'!C2:E28;'Site Export'!B2:B28="Klant-1")
 
Laatst bewerkt:
Deftig @JEC,

De 365 is voor mij nog een ontdekkingstocht.
Ik wilde me eens wat meer verdiepen in de LET; de methode filter(filter had ik al eens vaker toegepast maar niet weer aan gedacht.
 
Komt vanzelf;)
 
Indien je Excel 365 bezit.

Code:
=LET(ber;FILTER('Site Export'!B2:E28;'Site Export'!B2:B28="Klant-1");x;INDEX(ber;;2);y;INDEX(ber;;3);z;INDEX(ber;;4);KIEZEN({1\2\3};x;y;z))
Klant-1 is hard neergezet in de formule daar je samengevoegde cellen gebruikt (dat kan ook gecentreerd over de selectie).

Dit voorbeeld is precies wat ik zocht! Alleen loop ik nu nog tegen 1 probleem aan... De naam van de klanten is iedere week anders, nu word er in de formule echt gezocht naar "Klant-1" , maar dit is dus variabel, nu kan ik deze zoekterm in de formule niet naar een bepaalde cel laten kijken, is dit anders op te lossen?
 
Dat kan zonder de samengevoegde cellen zoals eerder opgemerkt.

Onderstaande van @JEC doet precies hetzelfde als die ellenlange van mij.
Code:
=FILTER('Site Export'!C2:E28;'Site Export'!B2:B28=A1)
 

Bijlagen

  • LET export_2.xlsx
    16 KB · Weergaven: 5
Dat kan zonder de samengevoegde cellen zoals eerder opgemerkt.

Onderstaande van @JEC doet precies hetzelfde als die ellenlange van mij.
Code:
=FILTER('Site Export'!C2:E28;'Site Export'!B2:B28=A1)

Helemaal super! Dit doet inderdaad precies wat ik zocht! Alleen nu komt er een nieuw probleempje...
Deze filter werkt perfect tot ik de range uitbreid. Het is mogelijk dat de export lijst tussen de 1 en de 1500 records bevat, zoals in jouw voorbeeld werkt het alleen tot cel 28, als ik deze op 1500 zet komt hij dus nu een hoop lege cellen tegen, en werkt het dus niet..
 
Maak van de range een tabel (listobject).
 
Ik ben niet de eindgebruiker.
 
Maak van de range een tabel (listobject).

Dat was idd de truc! Nu zou het echt super zijn als ik vervolgens door middel van een macro automatisch alle velden in tabblad "Bestelformulier" kan laten invullen met de gegevens per klant en vervolgens automatisch printen tot alle klanten afgedrukt zijn.
Iemand die dit in een Macro zou kunnen krijgen?
 

Bijlagen

  • Export.xlsx
    28,7 KB · Weergaven: 5
Zie macro PrintBestelformulieren.
De macro print nu naar PDF met filenamen Klant-1.pdf, Klant-2.pdf etc., maar dat is eenvoudig aan te passen naar een printer.
 

Bijlagen

  • Export.xlsm
    33,7 KB · Weergaven: 9
Zie macro PrintBestelformulieren.
De macro print nu naar PDF met filenamen Klant-1.pdf, Klant-2.pdf etc., maar dat is eenvoudig aan te passen naar een printer.

Dit is idd precies wat ik wil! Ben er echt super blij mee, heel erg bedankt!

Kan er als allerlaatste nog 1 stap toegevoegd worden aan de macro? Dat als er in de kolom E (prijs) een . in plaats van , staat dat dit dan door de macro word omgezet zodat de berekeningen goed gaan?
 
Als je de output van @AHulpje bekijkt, zie je dat het niet helemaal juist is. Voordat de de data van een andere klant wordt weggeschreven, moet de oude data eerst leeggemaakt worden.
Je laatste vraag zit hier ook in verwerkt.

Verder zou ik die tabel aanpassen zodat deze evenveel regels bevat als data. Dus niet 1500 lege regels vooraf invoegen.

Code:
Sub jec()
 Dim ar, sq, i As Long
 Set ar = Sheets(1).ListObjects(1).DataBodyRange
 ar.Value = ar.Value
 
 Application.ScreenUpdating = False
 
 With CreateObject("scripting.dictionary")
   For i = 1 To ar.Rows.Count
     If ar(i, 1).Value = "" Then Exit Sub
     If Not .Exists(ar(i, 1).Value) Then
        With Sheets("Bestelformulieren")
          .Range("A8:C33").ClearContents
           ar.AutoFilter 1, ar(i, 1).Value
           sq = ar.SpecialCells(12)
          .Cells(8, 1).Resize(UBound(sq), 3) = Application.Index(sq, Evaluate("row(1:" & UBound(sq) & ")"), Array(2, 4, 3))
          .Cells(2, 1).Value = ar(i, 1).Value
           ar.AutoFilter
          .PrintOut , , , , "Adobe PDF", , , ThisWorkbook.Path & "\" & ar(i, 1).Value & ".pdf"
        End With
       .Item(ar(i, 1).Value) = Empty
     End If
   Next
 End With
End Sub
 
Laatst bewerkt:
Vervang in de macro
Cells(rijBestel, 3) = .Cells(rijExport, 5)
door
Cells(rijBestel, 3) = CSng(Replace(.Cells(rijExport, 5), ".", ","))

en wissel ook even de kopteksten "Prijs" en "Aantal" om in werkblad "Bestelformulieren".

Als je niet weet hoe dat moet:
Open Excelbestand, Alt-F11, de rest wijst zich vanzelf.

En JEC heeft natuurlijk helemaal gelijk waar het het leegmaken van het bestelformulier betreft:
Voeg onder de regel
Do While .Cells(rijExport, 3) <> vbNullString
de regel
Range("A8:C33").ClearContents
toe.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan