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

Ophalen orders uit database

Status
Niet open voor verdere reacties.

Developer

Gebruiker
Lid geworden
21 sep 2013
Berichten
103
Goede dag allemaal.

Ik heb een probleem.
Ik ben bezig met het bouwen van een plan overzicht. Nou zou ik middels een sub (druk op de knop) orders willen binnen halen uit een database (lees andere excel sheet) gefilterd op week nummer.
In de database worden de orders weg geschreven vanuit een andere sheet. het week nummer en datum wanneer de order uitgevoerd moet worden wordt in deze database weg geschreven.

Het planblad zou dan middels een druk op de knop, de orders die in die week uitgevoerd moeten worden, automatisch binnen moeten halen.

Hoe kan ik zoiets het best aanpakken ?
(zie bijlage voor voorbeelden ) Bekijk bijlage Voorbeeld database orders.xlsxBekijk bijlage Voorbeeld planning.xlsx
 
T kan ongetwijfeld mooier afgewerkt worden daar ik zelf ook niet 100% VBA ken maar hier een opzetje:

Code:
Sub gonzo31()

Dim iWeek As Integer, iRows As Integer, r As Range

iWeek = Range("C5").Value

Windows("Voorbeeld database orders.xlsx").Activate

Set r = Columns("A:A")
iRows = Application.WorksheetFunction.CountA(r) - 1

For i = 2 To iRows
    Windows("Voorbeeld database orders.xlsx").Activate
    If Range("A" & i).Value = iWeek Then
        Range("A" & i & ":K" & i).Copy
        Windows("Voorbeeld planning.xlsx").Activate
        [B65536].End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
    End If
Next i

End Sub
Zorg dat cell C5 het weeknummer bevat.

Succes
 
eigenlijk vind ik dit meer iets voor een geavanceerd filter (met macrootje natuurlijk)

als daar interesse voor is laat het dan weten
 
Sylvester, Alle input is welkom. Ben druk opzoek naar de beste oplossing

Gonzo, ga kijken of ik er wat mee kan. Dank je voor de aanzet.

Developer
 
Gonzo, In jouw voorbeeld .. waar heb jij dan de bestanden opgeslagen staan ?
 
Gedownload en op m'n bereaublad. Allebei staan ze dan ook open. ik denk dat dat laatste wel van toepassing moet zijn (beide open) anders wordt het inderdaad anders. Dan moeten we eerst het bestand openen en de locatie aangeven...

Code:
Sub gonzo31()

Dim iWeek As Integer, iRows As Integer, r As Range, path As String, tBook As Object, sBook As Object

iWeek = Range("C5").Value
path = "C:\<waar je bestand staat>\Voorbeeld database orders.xlsx"

Set tBook = ThisWorkbook

Workbooks.Open Filename:=path

Set sBook = ActiveWorkbook

Set r = Columns("A:A")
iRows = Application.WorksheetFunction.CountA(r) - 1

For i = 2 To iRows
    sBook.Activate
    If Range("A" & i).Value = iWeek Then
        Range("A" & i & ":K" & i).Copy
        tBook.Activate
        [B65536].End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
    End If
    
Next i

sBook.Close (False)

End Sub
 
Voor je path kan je ook je pad naar bestaande file gebruiken (inclusief file naam), verander dan naar volgende code
Code:
path = Application.ActiveWorkbook.FullName

voor alleen het pad is volgende code voldoende
Code:
Application.ActiveWorkbook.Path
 
Laatst bewerkt:
Gonzo,

Ik zie wel dat de macro wat doet .. maar zie niet waar de geselecteerde orders gezet worden ..

Developer
 
In jou voorbeeldbestand 'Voorbeeld planning' in het tabblad 'zondag' had je gegevens midden op een werkblad staan waar 'ordernummer' in kolom B staat op regel 6 oid. Daar onder wordt t gewoon geplakt. Als dit niet e bedoeling is dan moet je de macro even aanpassen...

Macro moet je starten terwijl het bestand 'Voorbeeld planning' actief is anders wordt in de macro ThisWorkbook toegewezen aan het verkeerde bestand en wordt het een rommeltje.
 
Laatst bewerkt:
Gonzo

Vreemd, Heb jouw sub toegepast, maar zie nergens gegevens verschijnen..
Zie voorbeeld bestanden

Developer
 
Als je het trouwens per dag uitgesplitst wil hebben dan werkt het niet. Alles komt in het actieve tabblad terecht van je planningsbestand. Maar dat was ook niet de vraag want die luidde hoe je gegevens ophaalt uit je andere bestand van een bepaalde week...

Heb je als database wel mijn aangepaste bestandje gebruikt waar de weeknummers in kolom A staan?? (zie post #3)
 
Laatst bewerkt:
Gonzo,

Waar in jouw sub, kan ik aanpassen waar het neer gezet wordt in de worksheet ?

Developer
 
Met de functie
Code:
tBook = Activate
zet de macro het bestand 'Voorbeeld planning' weer terug actief, op dat tabblad waarop je stond.
Aangezien jij het ordernummer in kolom B heb staan zoek de macro met
Code:
[B65536].End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
de onderste niet gevulde cel in kolom B op en daar wordt de boel geplakt. Daarbij is B65536 de laatste cel in kolom B, dan met End(XlUp) wordt de laatste gevulde cel bepaald vanaf onderaf en dan met offset 1 naar beneden, 0 naar links of rechts komen we op de eerste lege cel in kolom B uit.
Als je die regel vervangt door iets waar jij het wil hebben dan ben je er.

Als je de verschillende orders op de verschillende tabbladen van de week wil hebben, dan zou je naar de uitvoerdatum moeten kijken, de weekdag bepalen en zo het juiste tabblad moeten selecteren. Ook te doen maar iets meer werk. Een andere optie is om alles wel in 1 tabblad binnen te halen en dan te filteren of sorteren op datum. Van de planning een tabelvorm maken vergemakkelijkt dit.

Ik zie nu wel dat ook de weeknummers worden gekopieerd. Dat is wat overbodig. Echter bevat je database weer geen ordernummers waar je die in Planning weer wel hebt.

Goed bedoelt: Het is nog niet zo makkelijk om iets goed op te zetten. Denk goed na over je structuur. De referentie tussen database en de uitvoering zou ik het ordernummer als unieke sleutel toepassen. ofwel, die komt maar 1x voor in beide bestanden en zo kun je in beide bestanden alles altijd terug vinden. Weeknummers, data, routes, prijs en LDM (waar dat ook voor staat) kunnen per dag/week/jaar meerdere malen voorkomen dus zijn geen handige unieke sleutel.
 
Laatst bewerkt:
Ter illustratie hoe je door de struktuur van je gegevens te vereenvoudigen nauwelijks code nodig hebt.
Ik zou alles in 1 bestand houden in plaats van in afzonderlijke.

Deze code is dan voldoende:

Code:
Sub M_snb()
    Sheet1.Cells(1, 20) = Sheet1.Cells(1)
    Sheet1.Cells(2, 20) = 40
    Sheet1.Cells(1).CurrentRegion.AdvancedFilter 2, Sheet1.Cells(1, 20).CurrentRegion, Sheet2.Cells(1)
End Sub
 

Bijlagen

SNB,

Dank je voor je input. Jouw voorstel heb ik zeker nodig in de rest van het project .. alleen zal ik dan niet op week nummer, maar op datum moeten gaan filteren in het zelfde bestand ...

Developer
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan