ok, l'unico problema è però che l'ordine in cui compaiono le colonne può essere differente tra i vari file...e credo che la macro non tenga in considerazione questa cosa, o sbaglio?
No, non sbagli: hai correttamente interpretato il mio criptico "assummendo che l' ordine in cui compaiono le colonne e' sempre lo stesso salvo che alcune possono mancare, e che le intestazioni di colonna siano in riga 1, da col A in avanti, etc etc"
Immagino che i file mensili siano dei report aziendali, quindi il primo consiglio che devo dare e' di trasferire qualcuno dentro il reparto IT al reparto imballi; vedi tu cosa farne...
Per quanto riguarda la possibile soluzione:
-Fai un file che contiene un foglio MODELLO con tutte le intestazioni di colonna che aspetti di trovarti.
-Metti in questo file questa macro e salva:
- Codice: Seleziona tutto
Sub mormadiss2()
Dim C As Integer, I As Integer
CWb = ActiveWorkbook.FullName
MsgBox (CWb)
If ActiveWorkbook.Name = ThisWorkbook.Name Then
MsgBox ("Selezionare il File /Foglio da normalizzare e poi lanciare la macro")
Exit Sub
End If
For C = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
If IsError(Application.Match(Cells(1, C), _
ThisWorkbook.Sheets("Modello").Range("1:1"), 0)) Then
MsgBox ("Valore " & Cells(1, C).Value & " in " & Cells(1, C).Address & " non in MODELLO")
Exit Sub
End If
Next C
For C = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
CDest = Application.Match(Cells(1, C), ThisWorkbook.Sheets("Modello").Range("1:1"), 0)
Cells(1, C).EntireColumn.Copy _
Destination:=ThisWorkbook.Sheets("Modello").Cells(1, CDest)
Next C
ThisWorkbook.Activate
NWbName = Replace(CWb, ".xls", "_NORM.xls") '<< *** vedi testo
ActiveWorkbook.SaveAs Filename:=NWbName, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
End Sub
-Apri poi il file da "normalizzare", sul foglio con i dati, e manda in esecuzione la macro.
Essa ti dira' se ci sono intestazioni su riga 1 che non sono presenti su MODELLO; si ferma sulla prima segnalazione, cioe' non riporta tutte le mancanze perche' ho assunto che sia una cosa quasi eccezionale.
(fin qui, a parte la macro, le istruzioni sono quelle gia' date)
Poi la macro prelevera' i dati dal file mensile e li copiera' sul foglio MODELLO, nella colonna appropriata; infine salvera' il file col modello col nome "IlFileDiPartenza_NORM.xls"
Nota ***: Se usi XL2007 il formato di out dovra' essere _NORM.xlsm"; aggiusta la riga se il file di partenza non e' un .xls.
Il lato negativo di questo metodo, ampiamente copiato dal precedente, e' che il file generato contiene anche lui la macro che ti ho detto.
Se questo da' fastidio, allora fai un triangolo:
-un file di servizio con la macro
-un file Modello col foglio MODELLO
-il file da convertire
Quindi aggiusta la macro in modo che invece di ThisWorkbook sia usato Workbooks("Modello"), ed eventualmente inserisci in testa l' istruzione
- Codice: Seleziona tutto
Workbooks.Open Filename:= _
"C:\Documents and Settings\Utente\Documenti\Modello.xls" _
, Editable:=True
In questo modo tu aprirai il file mensile piu' il file di servizio (con la macro), e sara' la macro ad aprire il modello, che altrimenti dovra' essere aperto manualmente insieme al file mensile.
Ciao