Contact lijst sorteren en invullen

Status
Niet open voor verdere reacties.

Csuki

Gebruiker
Lid geworden
4 okt 2010
Berichten
21
Hoi mensen,

In de bijlagen vinden jullie een versimpelde versie van mijn werkboek.
Deze wordt iedere week bijgewerkt in een bepaald format, dus ik leest het geheel uit in VBA.

Ik loop vast op mijn laatste benadering in het geheel.
Ik moet een planning maken per week waarin de contactmomenten met een aantal klanten vaststaan.

Alle weergeven data is in mijn geval al bekend en verwerkt door VBA.
Ik kan het bestand zelf ook niet plaatsen ivm geheimhouding.

In het voorbeeld zie je hoe er een aantal contacturen per jaar wordt vastgesteld en vervolgens de periode die er tussen mag zitten.
Uiteindelijk zullen de klanten gelijkmatig moeten worden verdeeld over het gehele jaar.

In het groen zie je voor het voorbeeld een potentiële oplossing...
Heeft iemand hier een benadering voor? Ik heb kom niet op een benadering...

Het gaat in totaal om meer dan 200 klanten met een zeer uiteenlopend aantal contacturen die per dag/week worden ingepland.
Dus ik zou het liefst het geheel variabel willen houden.

Als ik een benadering vindt op het invullen van de momenten, dan kan ik deze zelf vertalen naar een passende macro...
Ik hoop dat iemand me een zetje in de goede richting kan geven!

En oplossing voor een soortgelijk probleem is wellicht ook welkom!

Bekijk bijlage Temp.xlsx
 
Csuki,

Een lijst maken om de gegevens in te kunnen vullen is het probleem niet.
Een groter probleem is het maken van een planning. Excel is hier niet zo goed in.
Wel zijn er andere programma's die dit voor je kunnen doen.

Als je toch Excel wil gebruiken zou ik beginnen met het maken van onderstaande
tabel waarin per week de taken worden geteld en wordt vastgesteld of aan de
contracten wordt voldaan. Door in dit schema ook de benodigde tijd vast te
leggen per taak kun je vaststellen of er voldoende capaciteit op een bepaald moment
aanwezig is.
Met behulp van VBA kun je altijd nog een tabel zoals hieronder omzetten in een lijst.

week
Contract 1 2 3 4
Klant 1 3 x x x 0
Klant 2 3 x x x 0
Klant 3 2 x x 0
Klant 4 2 x x 0
Klant 5 1 x 0
Klant 6 1 x 0

Taken 3 3 3 3

Veel Succes.
 
Bedankt voor je antwoord, dit is echter niet helemaal de richting die ik op wil.
Het moet een macro worden die via een Button word geactiveerd.

De macro moet de geplande weeknummers verplaatsen naar een verticale opstelling.
Hierbij moeten ook alle klantnamen worden gekopieerd voor iedere regel.

Daarna moeten de klanten op weeknummer gesorteerd worden, en als tweede op het totaal aantal contactmoment per jaar.
Ik loop vast op het verplaatsen van alle weeknummers naar verticaal, en het opnieuw beginnen van de eerste stap bij de volgende klant.

Het staat allemaal wat duidelijker uitgelegd in de bijgevoegde EXCEL file.
Wellicht is het makkelijker om eerst 19 rijen toe te voegen tussen iedere klant, vervolgens alle waarden te kopiëren en dan de lege rijen te verwijderen?

Hierna zal ik de data verder verwerken met de macro, waar ik dan zelf uitkom als ik weet hoe ik de variabelen moet toepassen.


Bekijk bijlage Temp.xlsm
 
Contactlijst omzetten

Csuki,

Ik vind zelf je oplossing erg bewerkelijk.
Ik ben er zelf een voorstander van om gegevens die op een andere manier gepresenteerd moeten
worden eerst om te zetten in een Array en deze dan in tweede instantie opnieuw weg te schrijven.
(Waarschijnlijk nog een tik vanuit mijn database achtergrond).

Dit voorkomt invoegen / deleten en verschuiven van regels die je later niet meer nodig blijkt te hebben.
Verder is dan ook de VBA structuur makkelijker te onderhouden en te beheersen.

Ik heb mijn oplossing voor je uitgewerkt in je macro.

Bekijk bijlage HelpMijContactlijst.xlsm

Veel Succes.
 
Elsendoorn,

Dit is echt geweldig! Ik had niet gedacht een kant en klare oplossing te ontvangen!
Ik zal het niet klakkeloos overnemen maar ook het geheel proberen te doorgronden...

Sommige delen van de macro zijn me niet helemaal duidelijk.
Het commentaar is wel prettig en met goed zoekwerk kom ik hier zeker uit...

Ik zal dit in de toekomst zeker gebruiken in andere 'projecten'...
Enorm bedankt voor de hulp en de moeite, ik kan hier weer goed mee vooruit!
 
Laatst bewerkt:
@Elsendoorn

Hetzelfde effekt bereik je met deze code:

Code:
Sub ProcVBAOmzetting()
   sn = Sheets("Start").Cells(1).CurrentRegion
  
   y = 1
   For j = 2 To UBound(sn)
     For jj = 9 To UBound(sn, 2)
       If sn(j, jj) = "" Then Exit For
       y = y + 1
       Sheets("oplossing").Cells(y, 1).Resize(, 9) = Array(sn(j, 1), sn(j, 2), sn(j, 3), sn(j, 4), sn(j, 5), sn(j, 6), sn(j, 7), sn(j, 8), Int(sn(j, jj)))
     Next
   Next
End Sub
 
Draag de titel 'Giga Senior' met trots!
Ik zal het proberen uit te pluizen...

Nogmaals bedankt!
 
@SNB,

Fantastische demonstratie van compact programmeren.
Niet helemaal mijn manier maar toch prachtig in zijn compactheid.
Ik vrees dat ik een beetje te veel leraar ben om een programma zo te maken.

Groetjes.
 
@Elsendoorn

Ik dacht al aan jouw suggestie te zien (en door jou ook zo geformuleerd) dat jij rijen als 'records' beschouwde en ze ook als zodanig behandelde (zoals je in Access zou doen).
Het aardige van Excel is nu juist dat die niet alleen maar objecten bevat, maar met array variabelen overeenkomstige bewerkingen kan uitvoeren.
Wat mij betreft is altijd de vraag: 'kan dat niet simpeler ?'
Vind ik ook de taak van een docent... ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan