Vuelvo con las macros

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
1
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!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas