Beste allen,
Ik heb een programma geschreven waarmee ik, oa, prijsafspraken van klanten wil vastleggen.
Zie bijgevoegd een voorbeeld van een stukje van het programma.
Wat wil ik bereiken?
De code werkt op zich wel, maar is erg omslachtig. Voor een groter aantal regels en wijzigingen, duurt het enkele minuten voordat de macro volledig is uitgevoerd.
Ik heb het vermoeden dat deze hele code een stuk eleganter en efficienter kan worden geschreven.
Hoe is de code geschreven?
1. Ga naar sheet Artikelen, en verwijder alle kolommen vanaf kolom C. Deze regel is geschreven om er voor te zorgen dat eventuele wijzigingen in kolom C van tabblad 'Prijsafspraken' goed te registreren. De lijst in tabblad 'Prijsafspraken' is altijd een geupdate lijst, en deze kunnen wijzigen.
2. Loop door Debiteuren heen en controleer of er een prijsafspraak is vastgelegd of niet. In het originele bestand heb ik een formule staan in kolom C van Debiteuren. Als er een naam wordt toegevoegd in tabblad 'Prijsafspraken' (oftewel, er is voor een klant een prijsafspraak vastgelegd), dan verandert de waarde in kolom C van 'Debiteuren' naar "Ja"
3. Kopieer de naam van de klant met de prijsafspraak naar een nieuwe kolom in tabblad Artikelen.
4. Plant een formule in deze nieuwe kolom in de tweede regel. Deze formule is een index match met twee criteria. Om een link te maken tussen de prijsafspraak, de naam van de klant en het artikel. Omdat het een tabel betreft, wordt de formule automatisch doorgetrokken naar de laatste regel in de tabel.
5. Op 1 of andere manier wordt de index-match formule aangepast als ik hem plaats. Er worden twee '@' tekens in de formule gevoegd zodat deze geen resultaten geeft. Om dit tegen te gaan heb ik regels toegeveogd om in de range alle '@' te vinden en te vervangen door niks "". Als er een match is tussen naam klant en een artikel, moet de vastgelegde prijsafspraak in de tabel komen. Als er geen match is, dan moet de cell voor dat artikel voor die klant leeg blijven.
6. Er staan nu allemaal formules in de tabel die de boel flink vertragen. Daarom heb ik vervolgens een code geschreven die alle formules omzet naar waarden.
Zoals gezegd. Hij doet het wel, maar is erg traag omdat ik te maken heb met 100-en artikelen en 100-en afnemers met prijsafspraken. Deze code werkt daarom erg traag. Ik weet bijna zeker dat hij sneller en beter kan.
Samenvattend doel:
Ik wil dat de prijsafspraken, zoals gevonden in Tabblad Prijsafspraken, gekoppeld worden aan artikelen per afnemer. Tabblad Prijsafspraken kunnen wijzigingen. Hier moet de code rekening mee houden.
Wie helpt me uit de brand?
Ik hoor graag als er vragen of onduidelijkheden zijn!
Ik heb een programma geschreven waarmee ik, oa, prijsafspraken van klanten wil vastleggen.
Zie bijgevoegd een voorbeeld van een stukje van het programma.
Wat wil ik bereiken?
De code werkt op zich wel, maar is erg omslachtig. Voor een groter aantal regels en wijzigingen, duurt het enkele minuten voordat de macro volledig is uitgevoerd.
Ik heb het vermoeden dat deze hele code een stuk eleganter en efficienter kan worden geschreven.
Hoe is de code geschreven?
1. Ga naar sheet Artikelen, en verwijder alle kolommen vanaf kolom C. Deze regel is geschreven om er voor te zorgen dat eventuele wijzigingen in kolom C van tabblad 'Prijsafspraken' goed te registreren. De lijst in tabblad 'Prijsafspraken' is altijd een geupdate lijst, en deze kunnen wijzigen.
2. Loop door Debiteuren heen en controleer of er een prijsafspraak is vastgelegd of niet. In het originele bestand heb ik een formule staan in kolom C van Debiteuren. Als er een naam wordt toegevoegd in tabblad 'Prijsafspraken' (oftewel, er is voor een klant een prijsafspraak vastgelegd), dan verandert de waarde in kolom C van 'Debiteuren' naar "Ja"
3. Kopieer de naam van de klant met de prijsafspraak naar een nieuwe kolom in tabblad Artikelen.
4. Plant een formule in deze nieuwe kolom in de tweede regel. Deze formule is een index match met twee criteria. Om een link te maken tussen de prijsafspraak, de naam van de klant en het artikel. Omdat het een tabel betreft, wordt de formule automatisch doorgetrokken naar de laatste regel in de tabel.
5. Op 1 of andere manier wordt de index-match formule aangepast als ik hem plaats. Er worden twee '@' tekens in de formule gevoegd zodat deze geen resultaten geeft. Om dit tegen te gaan heb ik regels toegeveogd om in de range alle '@' te vinden en te vervangen door niks "". Als er een match is tussen naam klant en een artikel, moet de vastgelegde prijsafspraak in de tabel komen. Als er geen match is, dan moet de cell voor dat artikel voor die klant leeg blijven.
6. Er staan nu allemaal formules in de tabel die de boel flink vertragen. Daarom heb ik vervolgens een code geschreven die alle formules omzet naar waarden.
Zoals gezegd. Hij doet het wel, maar is erg traag omdat ik te maken heb met 100-en artikelen en 100-en afnemers met prijsafspraken. Deze code werkt daarom erg traag. Ik weet bijna zeker dat hij sneller en beter kan.
Samenvattend doel:
Ik wil dat de prijsafspraken, zoals gevonden in Tabblad Prijsafspraken, gekoppeld worden aan artikelen per afnemer. Tabblad Prijsafspraken kunnen wijzigingen. Hier moet de code rekening mee houden.
Wie helpt me uit de brand?
Ik hoor graag als er vragen of onduidelijkheden zijn!