Macro excel copiar a otra hoja en la fila inferior

Vengo intentando hacer este macro pero frustrantemente no me resulta el resultado que requiero, espero poder contar con su ayuda. Paso a explicar lo que necesito hacer:

Tengo una hoja en donde ingreso las ventas que hizo cada una de mis vendedoras y un par de datos más. Vale decir, en la columna de la vendedora POR en la celda b3 ingreso 150 (ese es el monto que vendió), más tarde ingreso en la celda d3, 250 (el monto que vendió la vendedora Y) y así sucesivamente durante el día, lo que significa que al final del día tengo, por ejemplo, las celdas b3, b4, b5, d3, d4, f3, f4, f5, f6, f7 llenas con información. Al final del día ejecuto un macro que lleva toda mi información a otra hoja y al final de la semana lo copia a otro libro que es donde guardo la información mensual/anual.

Aquí viene mi inconveniente, me toca delegar el trabajo de la supervisión a un tercero y seguramente no entenderá el tema de macros por lo que hice una hoja de ingreso de datos tipo formulario con listas desplegables. La intención es que elija el nombre de la vendedoras POR luego el monto que ya esta en lista desplegable también y mediante un macro llevarlo a la hoja que explicaba inicialmente, sin necesidad de que la persona que ingresa el dato vea nada más. Mi problema es que no logro hacer que según el nombre copie el dato de la venta a la columna apropiada sin sobrescribir el dato que ya estaba anotado de más temprano. En otras palabras necesito llevar el 2do dato a la 2da fila pero manteniendo la columna de la vendedora.

Espero haberlo explicado lo suficientemente claro y de antemano les agradezco su ayuda

1 Respuesta

Respuesta
1

Bernard lo que puedo entender y deducir de lo que necesita es que ya tiene un formulario de captura, a este nada mas se agrega la instrucción para enviar a la hoja desea la información que comenta. Si puede compartir los datos que ya guarda y la macro para ayudarle a agregar lo faltante, o subir imágenes de lo que necesita para que se facilite ayudarle.

En realidad son varios macros que corren, el formulario que hice es bastante simple. Solo es nombre, monto, tiempo, valor a pagar. No tengo ningún macro que me funcione para llevar la información de la vendedora, monto, tiempo y valor a pagar de la hoja "ingresos" a la hoja "diario", haciendo que se anote en la columna de la vendedora y en la fila siguiente. El macro que sin problema hice ya que es muy básico es copiar y pegar. Pero siempre se pega en el mismo lugar sobrescribiendo lo anterior. Y no puedo seleccionar que copie en una columna X, Y o Z.

Si me puedes ayudar con un macro que copie la información de la hoja "Ingresos" celda "E5" y la pegue en la hoja "Diario" las celdas "B3" o "D3" o "F3" según el nombre que esta en "Ingresos!B5" pero que la siguiente vez que copie sea en las celdas "B4" o "D4" o "F4" según el nombre de "Ingresos!B5" y la primera celda vacía de esa columna. Con esto yo ya lo amplio a todos los vendedores..

Mil gracias de antemano

Puede subir una imagen de la hoja "ingresos" y de la hoja "Diario" y mencionar ahí lo que se va a copiar para entender mejor, además me gustaría saber de que manera se captura en la hoja "ingresos" si es de forma manual en cada celda o es mediante un formulario de captura ya que ahí redunda la forma en que podría hacer el proceso de envió de datos a la hoja "Diario". Igual y si comparte un ejemplo de su archivo con datos ficticios, sera más fácil.

Con esa información con mucho gusto puedo apoyarle.

   

Esa es la hoja "Ingresos". Algunos datos están con listas desplegables, y otros se ingresa manualmente, Inicialmente lo que necesito es enviar el monto "pagar" a la hoja "Diario"

Esta es la hoja "diario". En la columna de el/la vendedor/a debería pegar el monto "pagar" proveniente de "Ingresos", en la primera celda vacía de ese vendedor. Como muestra la siguiente imagen

O sea que la persona que ingrese en la hoja "Ingresos" no tendrá acceso a las otras hojas... todo el proceso no me hace problema... solo el pasar a la columna de la vendedora Y o Z en la 1ra celda vacía

Si entendí bien esta macro podría servirle. En la hoja ingresos tuve que agregar un campo de validación "ok", para evitar que se duplique a la hoja Diario el registro, indicando que ya esta el registro en la hoja Diario ( si este campo se borra manualmente se volver a enviar a la hora Diario, se podría bloquear el campo una vez que ya tiene el dato). En la hoja ingresos habrá que agregar un botón y relacionar con la macro para que envíe los datos a la hoja Diario este proceso se puede hacer cada vez que se capture un registro, o al final del día, o en cualquier momento y pasara todos los datos a la hoja mencionada.

Envío imágenes de la hoja Ingresos y diario y la macro.

Cualquier comentario me comenta, saludos

Sub CopiarIngresos_Diario()
ultimaFila1 = Sheets("Ingresos").Range("A" & Rows.Count).End(xlUp).Row
Dim MiRango As Range
Set MiRango = ThisWorkbook.Sheets("Ingresos").Range("A5").CurrentRegion
MiRango.Select
    Dim Nombre1 As String
    Dim Nombre2 As String
    Dim Pagar As Range
    Nombre1 = Worksheets("Diario").Range("B1").Value
    Nombre2 = Worksheets("Diario").Range("D1").Value
    For i = 5 To ultimaFila1 + 1
    ufilaD1 = Sheets("Ingresos").Range("H" & Rows.Count).End(xlUp).Row
    If Sheets("Ingresos").Cells(i, 8) = "ok" Then
    Else
        If Sheets("Ingresos").Cells(i, 1) Like Nombre1 Then
            Dato1 = Sheets("Ingresos").Cells(i, 4)
            ufilaN1 = Sheets("Diario").Range("B" & Rows.Count).End(xlUp).Row
            If Dato1 = Empty Then
            Else
                Sheets("Ingresos").Cells(i, 8) = "ok"
            End If
            Sheets("Diario").Cells(ufilaN1 + 1, 2) = Dato1
        End If
    End If
    Next i
    For i = 5 To ultimaFila1 + 1
    ufilaD2 = Sheets("Ingresos").Range("H" & Rows.Count).End(xlUp).Row
    If Sheets("Ingresos").Cells(i, 8) = "ok" Then
    Else
        If Sheets("Ingresos").Cells(i, 1) Like Nombre2 Then
            Dato2 = Sheets("Ingresos").Cells(i, 4)
            ufilaN2 = Sheets("Diario").Range("D" & Rows.Count).End(xlUp).Row
            If Dato2 = Empty Then
            Else
                Sheets("Ingresos").Cells(i, 8) = "ok"
            End If
            Sheets("Diario").Cells(ufilaN2 + 1, 4) = Dato2
        End If
    End If
    Next i
    Range("A1").Select
End Sub

Gracias mil, aun no la corri pero en cuanto la ejecute te comento que tal fue

corre perfecta la copiada en la hoja "Diario". Mi objetivo es que la persona que haga los ingresos no pueda ver que otros ingresos hay, para lo cual despues ocultare todas las hojas y solo dejare visible "Ingresos". Por este motivo es que hice para listas desplegables como esta en la imagen

Cosa que al ejecutar el macro desaparezca la informacion que se acaba de ingresar y quede en blanco nuevamente para el sgte ingreso de datos. 

Si lo tengo asi, puedo ver todos los datos ingresados y mi idea es hacer un formulario mas adelante solo para ingresar un dato y que quede eliminado de esta hoja una vez ejecutado el macro y salvado a la hoja "Diario".

Ademas le hice un par de modificaciones hasta donde me da mi poco conocimiento, aumentando la cantidad de vendedoras que podria tener,

Sub CopiarIngresos_Diario()
ultimaFila1 = Sheets("Ingresos").Range("A" & Rows.Count).End(xlUp).Row
Dim MiRango As Range
Set MiRango = ThisWorkbook.Sheets("Ingresos").Range("B5").CurrentRegion
MiRango.Select
Dim Nombre1 As String
Dim Nombre2 As String
Dim Nombre3 As String
Dim Nombre4 As String
Dim Nombre5 As String
Dim Nombre6 As String
Dim Nombre7 As String
Dim Pagar As Range
Nombre1 = Worksheets("Diario").Range("B1").Value
Nombre2 = Worksheets("Diario").Range("D1").Value
Nombre3 = Worksheets("Diario").Range("F1").Value
Nombre4 = Worksheets("Diario").Range("H1").Value
Nombre5 = Worksheets("Diario").Range("J1").Value
Nombre6 = Worksheets("Diario").Range("L1").Value
Nombre7 = Worksheets("Diario").Range("N1").Value
For i = 5 To ultimaFila1 + 1
ufilaD1 = Sheets("Ingresos").Range("H" & Rows.Count).End(xlUp).Row
If Sheets("Ingresos").Cells(i, 8) = "ok" Then
Else
If Sheets("Ingresos").Cells(i, 1) Like Nombre1 Then
Dato1 = Sheets("Ingresos").Cells(i, 4)
ufilaN1 = Sheets("Diario").Range("B" & Rows.Count).End(xlUp).Row
If Dato1 = Empty Then
Else
Sheets("Ingresos").Cells(i, 8) = "ok"
End If
Sheets("Diario").Cells(ufilaN1 + 1, 2) = Dato1
End If
End If
Next i
For i = 5 To ultimaFila1 + 1
ufilaD2 = Sheets("Ingresos").Range("H" & Rows.Count).End(xlUp).Row
If Sheets("Ingresos").Cells(i, 8) = "ok" Then
Else
If Sheets("Ingresos").Cells(i, 1) Like Nombre2 Then
Dato2 = Sheets("Ingresos").Cells(i, 4)
ufilaN2 = Sheets("Diario").Range("D" & Rows.Count).End(xlUp).Row
If Dato2 = Empty Then
Else
Sheets("Ingresos").Cells(i, 8) = "ok"
End If
Sheets("Diario").Cells(ufilaN2 + 1, 4) = Dato2
End If
End If
Next i
Range("A1").Select
End Sub

Pero me volvi a perder en los IF- ELSE
 

Podría subir una copia de su archivo a googledrive o a onedrive y compartirlo y en el mismo archivo comentar los detalles.

No uso ninguno de los dos, o sea esta bien asi la unica diferencia es que tendria que ser tipo formulario. Donde elijo de la lista desplegable el nombre, monto, etc, etc. corro la macro y todo se pasa a la hoja "diario" elmininando lo que se acaba de ingresar....solo un ingreso por vez

En este link puede descargar un archivo de nombre "Ingresos.xlsm" donde se captura en la hoja Ingresos los datos y se envía a la hoja Diario, borrando los datos de la hoja Ingresos. No lleva lista desplegable pero las puede agregar a las celdas como ya lo tiene. Si es lo que necesita puede adaptarlo a su archivo. Saludos.

Link para descargar el archivo:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas