You could by crosstable-load the number of columns specify which will be loaded normally and you didn't need to create this key and split it then again. Try therefore the following:
CrossTable (Mois,Montant, 5)
LOAD * FROM [$(vQVDPath)\$(vProjet)\forfait.xls] (biff, embedded labels, table is Sheet1$);
for i = 1 to fieldvaluecount('Dept')
let vTable = fieldvalue('Dept', $(i))
Load Type, CodeClient, Media, Dept, Fichier, Mois, num(Montant,'# ##0.00000') as Montant
store $(vTable) into [$(vQVDPath)\$(vProjet)\ $(vTable)_Actuals.txt] (txt, no labels, delimiter is '\t');
The store-statement to text is limited and I'm not sure if it's considered the additionally entries with labels and delimiter but in general it should work.