A spreadsheet that quietly bled time
CareCenter operates a service garage at Hotel Continental in Oslo. Mechanics log every job — the work performed, the customer, the price, and the payment method — into a shared Excel sheet as the day unfolds. That part worked fine.
The problem started at the end of each billing cycle. To prepare invoices, the manager had to scan the entire chronological log, manually identify every row tied to a single corporate customer, highlight them as he went, and re-enter each one into Tripletex by hand. Then repeat for the next customer. And the next. And the next.
It was slow, but more importantly it was fragile: a single missed row meant an unbilled job — revenue lost without anyone noticing.
One macro that does five things at once
The system keeps the mechanics' workflow untouched — they still log every job into a simple form on a single sheet. The complexity sits behind a button labelled "Lagre".
When pressed, the macro validates the input, writes the raw entry to a master log, separates invoice customers into their own sheet, generates a unique order number per customer per month, looks up the customer's Tripletex ID from a database of 568 corporate accounts, and finally produces a Tripletex-ready import file with a single additional click.
Five things that used to be five different mental steps — collapsed into one.
The biggest change is structural, not just technical: invoice customers now live grouped in their own sheet. The manager no longer hunts for "Bravo AS" through fifty rows of mixed entries — every Bravo-job is already gathered, ordered, and tagged with its customer ID.
See it in motion
The animation below shows what happens when a mechanic enters a job and clicks save. All jobs land in the master log; only invoice rows continue down to the invoice queue, automatically tagged with an order number and customer ID.
From entry to Tripletex
The data path moves through five sheets, each with a clear purpose. The mechanic only ever sees the first.
Three problems worth solving carefully
Most of the macro is straightforward bookkeeping. Three pieces required actual design decisions.
Each customer should receive one invoice per month with multiple line items grouped together. The macro uses a Scripting.Dictionary keyed on customer + month to either fetch the existing order number or assign the next available one in that month — ensuring jobs for the same customer collapse into one Tripletex order.
A separate sheet holds CareCenter's full corporate customer database — 568 entries with Tripletex IDs, addresses, and contact details. Every invoice row gets enriched with the correct customer ID via a name-based match before export. No manual ID entry required.
The export macro copies the formatted sheet into a new workbook, applies a timestamped filename (Tripletex_Export_yyyymmdd_hhmmss.xlsx), and saves it directly to the Desktop in xlOpenXMLWorkbook format. Tripletex accepts the file as-is — no manual reformatting.
The form blocks submission unless all mandatory fields are filled, preventing the silent loss of jobs that plagued the old system. A separate row of "kladd"-shortcuts lets mechanics queue up several jobs and copy them into the form one at a time during quiet moments.
Order number generation — the core of the design
The snippet below shows the simplified logic used to assign order numbers. Customer names and IDs are illustrative only.
What changed
The improvement is measured in two dimensions — the time the manager spends on each billing cycle, and the number of jobs that quietly disappeared between the spreadsheet and Tripletex.
The system has been in daily production use at CareCenter since 2024 and replaced an entirely manual workflow. The mechanics' input experience is unchanged — only the manager's end-of-month workflow was transformed.