hola, gracias a todos por las respuestas.
si me imagine que por ahi falta explicar algo mas de base, mas conceptual a donde apunte. resulta que la idea es teniendo el mes poder sacar la posicion donde tengo que trabajar, aqui es dodne se une la consulta anterior de variables con esta de meses. La idea es, teniendo el mes con el que quiero actuar poder descrubrir donde debo insertar el dato. No puse la implementacion, pero esto seria algo asi: internal abstract class ExcelMonthPosition { private ExcelVariablePosition excelVariablePosition = new ExcelVariablePosition(); public abstract string MonthColumn { get; } public abstract string Avance { get; } public abstract List<string> HideColumns { get; } public string GetMonthLabel() { ... } public string GetCartera() { ... } public string GetAvanceByVariable(VariableIdEnum var) { string excelRow = excelVariablePosition.GetValueByType(var); return string.Format("{0}{1}", this.Avance, excelRow); } } internal class ExcelPosition { private short MonthCount = 1; public ExcelMonthPosition GetNextMonth() { ExcelMonthPosition excelMonthPosition = this.GetMonthByNumber(MonthCount); MonthCount++; return excelMonthPosition; } public ExcelMonthPosition GetMonthByNumber(short monthNumber) { ExcelMonthPosition excelMonthPosition = null; switch (monthNumber) { case 1: excelMonthPosition = new ExcelMonth1Position(); break; case 2: excelMonthPosition = new ExcelMonth2Position(); break; case 3: excelMonthPosition = new ExcelMonth3Position(); break; case 4: excelMonthPosition = new ExcelMonth4Position(); break; case 5: excelMonthPosition = new ExcelMonth5Position(); break; case 6: excelMonthPosition = new ExcelMonth6Position(); break; case 7: excelMonthPosition = new ExcelMonth7Position(); break; case 8: excelMonthPosition = new ExcelMonth8Position(); break; case 9: excelMonthPosition = new ExcelMonth9Position(); break; case 10: excelMonthPosition = new ExcelMonth10Position(); break; case 11: excelMonthPosition = new ExcelMonth11Position(); break; case 12: excelMonthPosition = new ExcelMonth12Position(); break; } return excelMonthPosition; } } En negrita es lo que agregue, como veran la clase abstract es la que verdaderamente tiene la utilidad solo que el resultado que devuelve dependera de cual es su concreta instanciada, si es mes1..mesN las posiciones cambiaran o sea el metodo GetAvanceByVariable() arrojara diferentes valores, ya que la propeidad Avance cambia als coordenas por mes. Luego para usarlo solo hago: ExcelPosition excelPosition = new ExcelPosition(); ExcelMonthPosition excelMonthPosition = excelPosition.GetNextMonth(); string avancePosition = excelMonthPosition.GetAvanceByVariable(VariableIdEnum.Facturacion); Como veran el GetNextMonth() me da un mes X, pero me da un concreto del mes con el que tengo que trabajar, igualemtne yo siempre trabajo con la funcionalidad de la clase abstracta, pero lo quee sta devuelva estara determinado por el mes concreto. Entonces con ese concreto y pasandole el enum de la variable es que armo la coordenada de la celda de excel. Por las letras y numeros que doy de ejemplo no se fijen, tme dos al azar, no son correctas, estas pueden variar, pero asm alla de este particular cada mes define sus propias columnas a utilizar. La idea es generar la intersepcion entre variable que define la row y mes que define la columna. buenoe spero se entienda un poco mas la finalidad. gracias por la ayuda. saludos Yahoo! Cocina Encontra las mejores recetas con Yahoo! Cocina. http://ar.mujer.yahoo.com/cocina/