¿Cómo programar una macro que capture datos de una hoja base a otras según condición?

Alguien que me pueda ayudar a programar una macro que capture datos mediante un formulario de excel ubicada en la "hoja1" del mismo libro (No es Userform) donde los datos capturados se peguen en la "hoja2", "hoja3"... U "hojaN" dependiendo de que se cumpla una condición y mientras esta condición este activa, los datos capturados se vayan pegando en la siguiente fila libre de la hoja que cumpla la condición.

Específicamente tengo en la "hoja1" un campo con una validación de datos donde se almacenas los meses del año (celda A5) en otra el N° de documento (celda A7) en la siguiente el Nombre (celda A9) y por último el Monto (celda A11). Estos campos son comunes para las siguientes "n" hojas, entonces lo que se necesita es que a partir del texto que se encuentra en la celda A5, los datos se peguen en la hoja que lleva el mismo nombre, por ejemplo si el texto es "Enero" los datos se peguen en la siguiente hoja llamada "Enero" y así se vayan ingresando consecutivamente en la celda o fila vacía hasta que la condición cambie, por ejemplo que el texto sea "Febrero" en ese caso los datos se peguen en la hoja "Febrero" y que al final se vayan sumando los valores de la columna "Monto"

1 respuesta

Respuesta
1

H   o l a: Te anexo la macro

Sub CapturarDatos()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    '
    mes = h1.Range("A5")
    If mes = "" Then
        MsgBox "Falta el mes"
        Exit Sub
    End If
    '
    existe = False
    For Each h In Sheets
        If LCase(h.Name) = LCase(mes) Then
            existe = True
            Set h2 = Sheets(mes)
        End If
    Next
    '
    If existe = False Then
        MsgBox "No existe la hoja: " & mes
        Exit Sub
    End If
    '
    u = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
    h2.Cells(u, "A") = mes
    h2.Cells(u, "B") = h1.[A7]
    h2.Cells(u, "C") = h1.[A9]
    h2.Cells(u, "D") = h1.[A11]
    MsgBox "Datos copiados", vbInformation, "CAPTURAR DATOS"
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Hola Dante.

Primero, Gracias por responder a la pregunta. 

Con respecto al código, no me funcionó  al final me sale un mesanje de error "Se requiere un Objeto" que se ubica extamnete en la línea " h2.Cells(u, "A") = Mes" y bueno, supongo que para los siguientes sería igual. Obviamente los rangos de las celdas las cambié a las del formulario.

Te comparto las imágenes de los formatos y las hojas para una mejor ilustración de lo que necesito:

Asi serían para todas las hojas desde Enero a Diciembre

Según tus indicaciones, en la celda A5 de la "Hoja1" debes poner la palabra del mes, por ejemplo:

"enero".

Si no existe la hoja llamada "enero" te envía un aviso.

La macro funciona para lo que pediste, si modificaste la macro, tienes que decirme qué cambios le hiciste.

Si ahora pones otras consideraciones, tengo que revisar la macro, ajustarla, probarla y enviarla nuevamente.

Te pido que pruebes la macro tal como te la envié y pongas la información tal como la solicitaste.

Después de que pruebes la macro y su funcionamiento, si gustas le hacemos los cambios que quieras.

Hola Dante.

De hecho corrí una con la indicaciones dadas tal cual. Y las modificaciones de las que me refiero, por ejemplo fue en estas líneas:

Set H1 = Sheets("Datos"). Este sería el nombre de la hoja base donde se encuentra el formuario
Mes = H1.Range("B5"). Este el rango de la celda que contiene o donde se ingresan el mes que en las inicaciones era "A5" y yo lo cambié a "B5" eso no debería de modificar el procedimiento de la macro según yo, la verdad no sé mucho en cuanto a ese tema. Y así, cambie los rangos de las celdas, nada más eso.

Igual agradezco que me brindes tu ayuda

Y qué tienes en B5, ¿una lista de validación?

Debes revisar que en la celda diga "enero" y la hoja se llame "enero", exactamente iguales, sin espacios antes o después de la palabra.

Envíame tu archivo con la macro que ya modificaste, para revisarlo

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “elmer ortiz” y el título de esta pregunta.

Buen día Dante.

Siguiendo con el tema, ya envié el archivo según tus indicaciones.

Gracias....

Macro actualizada

Sub CapturarDatos()
'Por.Dante Amor
    Set h1 = Sheets("Datos")
    Mes = h1.Range("B5")
    If Mes = "" Then
        MsgBox "Falta mes"
        Exit Sub
    End If
    Existe = False
    For Each h In Sheets
        If LCase(h.Name) = LCase(Mes) Then
            Existe = True
            Set h2 = Sheets(Mes)
            Exit For
        End If
    Next
    If Existe = False Then
        MsgBox "No existe la Hoja:" & Mes
        Exit Sub
    End If
    u = h2.Range("A" & Rows.Count).End(xlUp).Row + 1 'encuentra la última celda con datos
    h2.Cells(u, "A") = h1.[B7]  'Así también se puede indicar la celda
    h2.Cells(u, "B") = h1.[B9]
    h2.Cells(u, "C") = h1.[B11]
    MsgBox "Datos Copiados", vbInformation, "Capturar Datos"
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas