Estimado Fernando: Ahora te pregunto como hago el proceso al revés con la macro que me enviaste. Esta vez quiero copiar desde el rango B5:G269, introduciendo el mes y que me pegue si es enero en B5:G269 y si es Febrero que me pegue en I5:N269.
1 Respuesta
Respuesta de fejoal
1
1
fejoal, Por falta de tiempo para responder como me gusta hacerlo suspendo...
No veo que sea al revés. ¿O es que tengo que entender que SIEMPRE copiará el rango desde B5:G269? Te douy las dos opciones: El siguiente macro copia el rango en la serie de columnas donde se encuentre en "Liquidación" (según el número de mes"), a la misma serie de columnas en la hoja "Recibos": Sub CopiaMes() Dim Mes As String Dim Recibos As String Dim NumMes, CantCol As Long 'Fernando, ingresa la cantidad de columnas a copiar por cada mes CantCol = 6 Celdasini = "B5:B269" ' celdas desde donde deberá contar las columnas y cantidad de lineas a tomar" '============================================ NumMes = InputBox("Ingrese Nº de Mes de Liquidación", "NUMERO DE MES?") If Len(NumMes) = 0 Then M_Tit = "FALTA NUMERO DE MES" M_Mens = "Al no ingresar un número de mes alguno, proceso termina aquí" MsgBox M_Mens, vbCritical, M_Tit 'esta forma de estructurar los mensajes se parece "mucho" a la que suelo utilizar yo ;) ElseIf NumMes > 12 Then M_Tit = "NUMERO DE MES INCORRECTO" M_Mens = NumMes & " no es un número de mes correcto, proceso termina aquí" MsgBox M_Mens, vbCritical, M_Tit Else NomMeses = Array("", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Setiembre", "Octubre", "Noviembre", "Diciembre") Mes = NomMeses(NumMes) ActiveSheet.Range("C2").Value = Mes Worksheets("Liquidacion").Select Range(Range(Celdasini).Offset(0, (CantCol + 1) * (NumMes - 1)), Range(Celdasini).Offset(0, (CantCol + 1) * (NumMes - 1) + CantCol - 1)).Copy Worksheets("Recibos").Select Range(Range(Celdasini).Offset(0, (CantCol + 1) * (NumMes - 1)), Range(Celdasini).Offset(0, (CantCol + 1) * (NumMes - 1) + CantCol - 1)).Select Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False Range(Celdasini).Select End If End Sub Nota que la columna de referencia ahora es una variable que cargas en el inicio del código. ----------- Este otro, en cambio, siempre copia el rango que le indiques en la variable "CopieRango" a las columnas correspondientes al mes en la hoja "Recibo": Sub CopiaMes() Dim Mes As String Dim Recibos As String Dim NumMes, CantCol As Long 'Fernando, ingresa la cantidad de columnas a copiar por cada mes CantCol = 6 CopieRango = "B5:G269" ' Rango a copiar y pegar en la otra hoja. Celdasini = "B5:B269" ' celdas desde donde deberá contar las columnas y cantidad de lineas a pegar" '============================================ NumMes = InputBox("Ingrese Nº de Mes de Liquidación", "NUMERO DE MES?") If Len(NumMes) = 0 Then M_Tit = "FALTA NUMERO DE MES" M_Mens = "Al no ingresar un número de mes alguno, proceso termina aquí" MsgBox M_Mens, vbCritical, M_Tit 'esta forma de estructurar los mensajes se parece "mucho" a la que suelo utilizar yo ;) ElseIf NumMes > 12 Then M_Tit = "NUMERO DE MES INCORRECTO" M_Mens = NumMes & " no es un número de mes correcto, proceso termina aquí" MsgBox M_Mens, vbCritical, M_Tit Else NomMeses = Array("", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Setiembre", "Octubre", "Noviembre", "Diciembre") Mes = NomMeses(NumMes) ActiveSheet.Range("C2").Value = Mes Worksheets("Liquidacion").Select Range(CopieRango).Copy Worksheets("Recibos").Select Range(Range(Celdasini).Offset(0, (CantCol + 1) * (NumMes - 1)), Range(Celdasini).Offset(0, (CantCol + 1) * (NumMes - 1) + CantCol - 1)).Select Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False Range(Celdasini).Select End If End Sub ---- Elige el que corresponda a tu pedido. Por favor coméntame si funciona bien para ti. Un abrazo! Fernando Pd: Disculpa pero estoy medio tapado de trabajo. Pronto te envío un archivo con la macro que efectúa este proceso considerando líneas. Chau!