Hulp nodig bij schrijven van macro's ten behoeve van voorraadbeheer

Status
Niet open voor verdere reacties.

joeriverh

Nieuwe gebruiker
Lid geworden
4 dec 2009
Berichten
4
Goedemorgen,

Ik ben bezig met maken van een eenvoudig en snel te gebruiken voorraadbeheer, veel software vereist meer informatie dan ik wil ingeven wat natuurlijk tijd kost. Vandaar dat ik het zelf wil programmeren in excel.

Nu heb ik wel ervaring met programmeren maar niet met VBA, ik weet wel wat de macro zou moeten doen en welke stappen alleen ik kom er niet uit door de vele verschillende objecten en functies die bestaan. Ik hoop dat iemand mij hier mee kan helpen.

In de bijlage heb ik mijn voortgang tot nu toe staan. Het idee is dat werknemers eenvoudig met barcode scanner alleen de artikel nummer en de mutatie doorgeven. De mutaties worden weggeschreven in de sheet akkoord, hier kan eventueel een controle worden uitgevoerd voordat definitief de voorraad wordt aangepast. En hier begint het lastig te worden voor mij.

Ik wil namelijk dat hij eerst gaat kijken of er bijgeboekt wordt of afgeboekt, in het geval van bijboeken wil ik namelijk dat hij eerst kijkt of er iets besteld is en dit als eerste afboekt, als dit is gebeurd mag er pas worden bij geboekt bij de huidige voorraad. In het geval dat er afgeboekt wordt mag dit wel gewoon van de huidige voorraad worden geboekt.

Mijn tweede probleem zit bij het genereren van de bestellijst, ik wil hier namelijk dat hij eerst gaat kijken welke artikelen besteld moeten worden door middel van de string ("bestellen") vervolgens wil ik dat hij een paar specifieke kolommen uit dezelfde rij haalt. Hiermee wil ik een lijst laten genereren die we naar de leverancier kunnen opsturen waar in principe alleen de artikelnummer, omschrijving en aantal van belang is.

De tweede knop moet de bestellingen verwerken in de voorraadlijst bij de bestelde hoeveelheid, door simpelweg de waarde erbij op te tellen, en vervolgens de lijst weer verwijderen.

Ik hoor graag of iemand mij kan helpen of in de goede richting kan wijzen.

Alvast bedankt.
 

Bijlagen

Laatst bewerkt:
Voorraden beheren is schuiven met aantallen producten van de ene locatie naar de andere. Bij elke mutatie gaat er ergens iets uit en ergens ander wat in. Net boekhouden.

Je begint met de eindvoorraad van elk product van vorig jaar te "schuiven" naar de voorraad van dit jaar, een mutatie die meestal op 1 januari geboekt wordt. Dit is je beginbalans.
Daarna plaatst Klant A een order voor 10 x product A: een mutatie van Voorraad naar Klant.
Vervolgens bestel je 50 x Product B: een mutatie van van Leverancier naar Voorraad.

Dit is de basisgedachte achter bijgevoegde demo. Je kunt dit nog verder uitbreiden als je met een afdeling Inkoop en een afdeling Verkoop te maken hebt. Dan gaan artikelen niet direct van voorraad naar klant maar daar zit de "locatie" Verkoop nog tussen.

De enige vba die erin zit is om de mutaties om te zetten naar het formaat in werkblad Data (moet eigenlijk verborgen zijn). Obv die Data kun je met draaitabellen allerlei rapporten maken, waarvan er twee zijn gegeven.
Stoei er maar eens mee. Persoonlijk zou ik mijn energie stoppen in de aanschaf van een goed pakket.
 

Bijlagen

Pixcel, als eerste bedankt voor je reactie.

Misschien moet ik de situatie iets beter uitleggen waardoor veel bestaande software niet goed genoeg is, of eigenlijk te complex. De database is bedoeld om het bestellen van gereedschappen te automatiseren. De werknemers achter de machines moeten alleen de juiste barcode scannen en het aantal ingeven wat ze pakken, oftewel maximaal 2-3x klikken. Ook bij het bijboeken moet 2-3 x klikken genoeg zijn. Veel software vraagt om andere gegevens die voor mij irrelevant zijn op dat moment.

Om fouten te voorkomen wil ik liever ook niet dat ze direct in de voorraadtabel wijzigingen gaan aanbrengen, oftewel een simpel formuliertje met 2 invulvelden is genoeg. De gene die uiteindelijk de bestelling moet doen heeft wat meer gegevens nodig, normaal gesproken stuurt deze een lijst via de mail met artikelnummer, omschrijving en het aantal naar de leverancier. Vervolgens maakt hij een kopie van deze lijst voor de boekhouder.

Nu weet ik zeker dat het te programmeren is alleen krijg ik het niet voor elkaar met VBA. Maar inderdaad ik heb nog niet naar draaitabellen gekeken en ik denk dat dit ook nog wel een goed alternatief kan zijn.

Groet,

Joeri
 
Ik wil toch graag een gedeelte in VBA programmeren misschien dat iemand mij kan helpen om het compleet te maken.

1. Ik wil dat het programma voor elke regel met waardes herhaald wordt.
2. Kijk of de waarde in kolom 2 ("mutatie") positief of negatief is.
3. Zoek in de sheet artikelvoorraad de waarde "Art" op
4. Als de waarde "Art" is gevonden wijzig dan de vierde kolom in dezelfde rij. De nieuwe waarde moet worden: de huidige waarde in de cel + "mutatie"

Als ik eenmaal weet hoe ik dit moet doen kom ik er zelf wel uit voor het bijboeken denk ik.

Code:
Sub AKKOORDKNOP_Click()

Dim Aantal As Integer        ' het aantal rijen in akkoord
Dim i As Integer                ' voor de loop
Dim Mutatie As Integer       ' is de mutatie
Dim Art As Integer             ' is het artikel nummer

Aantal = Sheets("Akkoord").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
Application.ScreenUpdating = False

i = 1
Do While i < Aantal

Mutatie = Cells(i + 1, 2)
Art = Cells(i + 1, 1)

If Mutatie < 0 Then
'afboeken

With Sheets("Artikelvoorraad")
find(Art) offset (0,3) cell.value = cell.value + mutatie 

'geen idee hoe het zoeken precies werkt


Else
'bijboeken

End If

i = i + 1

Loop


Application.ScreenUpdating = True

End Sub
 
Intussen ben ik een stuk verder gekomen en heb ik de code zoals ik die ongeveer hebben moet. Alleen krijg ik fout 91: objectvariabele of blokvariabele with is niet ingesteld. Wat vreemd is want als ik een enkel stuk van de code probeer lijkt het wel te werken. iemand een idee wat ik fout doe?


Code:
Sub AKKOORDKNOP_Click()

Dim Aantal As Integer        ' het aantal rijen in akkoord
Dim i As Integer             ' voor de loop


Aantal = Sheets("Akkoord").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count

Application.ScreenUpdating = False

i = 1
Do While i < Aantal

Dim Mutatie As Integer       ' is de mutatie
Dim Nummer As Integer           ' is het artikel nummer om te zoeken


Mutatie = Sheets("Akkoord").Cells(i + 1, 2)
Nummer = Sheets("Akkoord").Cells(i + 1, 1)

If Mutatie < 0 Then
'afboeken

' hier geeft hij aan fout 91

With Sheets("Artikelvoorraad").Columns(1)
.Find(Nummer).Offset(0, 3) = .Find(Nummer).Offset(0, 3) + Mutatie
End With


Else
'bijboeken

Dim j As Integer        'loop
Dim a As Integer        'bestelde hoeveelheid
Dim b As Integer        'Aantal dat bijgeboekt wordt
Dim c As Integer        'verschil tussen besteld en boeking

a = Sheets("Artikelvoorraad").Cells(i + 1, 5)
b = Cells(i + 1, 2)
c = a - b

If c < 0 Then

Cells(i + 1, 5).Value = 0

Else

Cells(i + 1, 5).Value = c

End If

With Sheets("Artikelvoorraad").Columns(1)
 .Find(Nummer).Offset(0, 3) = .Find(Nummer).Offset(0, 3) + Mutatie
End With

End If

i = i + 1

Loop

Application.ScreenUpdating = True


'Sheets("Akkoord").Range("A2:E9999").ClearContents

End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan