I do something close to this - I'm assuming you can use the validation features to create the drop lists - thus I'm including a code snipit to get you through the rest (just needs a little tweaking for your customer portion). Good luck!
Ben
' Set column w/ tab names
Public Const intTabNameCol As Integer = 1
Sub CreateNewExcelFile()
' This counts the number of rows (my list was the last list in column A - starts in row 2 - alter as needed)
Dim intCtRows As Integer
Cells(65536, intTabNameCol).Select
Selection.End(xlUp).Select
Range(Selection, "A1").Select
intCtRows = Selection.Rows.Count
' Create variables for all new tab names
Dim intLoop1, intCtLoops As Integer
ReDim strNewSheetNameArray(intCtRows) As String
For intLoop1 = 2 To intCtRows
intCtLoops = intCtLoops + 1 ' so u aren't dealing w/ variable on where this starts / stops
strNewSheetNameArray(intCtLoops) = Cells(intLoop1, intTabNameCol).Value
Next intLoop1
' Create new workbook
Dim intCtTabs, intNewSheetCtLoop1, intNewSheetCtLoop2 As Integer
Workbooks.Add
intCtTabs = ActiveWorkbook.Sheets.Count ' Number of tabs in worksheet (my default is 3)
For intNewSheetCtLoop1 = 1 To intCtLoops
intNewSheetCtLoop2 = intNewSheetCtLoop2 + 1
' Logic for assessing to few or to many sheets
If intNewSheetCtLoop2 <= intCtTabs Then
Worksheets(intNewSheetCtLoop1).Select
Worksheets(intNewSheetCtLoop1).Name = strNewSheetNameArray(intNewSheetCtLoop2)
ActiveWindow.SplitRow = 8
ActiveWindow.FreezePanes = True
End If
' Too many - delete extra
If intNewSheetCtLoop2 > intCtLoops Then
Worksheets(intNewSheetCtLoop1).Delete
End If
If intNewSheetCtLoop2 > intCtTabs Then
Sheets.Add
ActiveSheet.Select
ActiveSheet.Name = strNewSheetNameArray(intNewSheetCtLoop2)
ActiveWindow.SplitRow = 8
ActiveWindow.FreezePanes = True
Sheets(strNewSheetNameArray(intNewSheetCtLoop2)).Move After:=Sheets(strNewSheetNameArray(intNewSheetCtLoop2 - 1))
End If
Next intNewSheetCtLoop1
End Sub