Saltar al contenido

Hacer copia de Registro a otra Hoja según Tipo de Dato.


pinoji

Recommended Posts

publicado

Hola Foristas. Espero se encuentren bien de salud.
De nuevo por acá.
Esta vez necesito me ayuden con algo. Tengo este Proyecto que estoy desarrollando para mi esposa sobre las Pre-Nóminas
pero necesito algo:
En el FrmPreNomina ella hace los cargos de cada trabajador según el tiempo trabajado y los salario que devenga, 
pero tiene varios Tipos de Pre-Nóminas (Salario, Dejado de Pagar, Feriado, Estimulación, Objeto de Obra y Sobre Cumplimiento)  que se detallan en el CmbPrenomina, pero en un mismo mes, un trabajador puede tener varias prenóminas, por ejemplo:
El trabajador :
8045 Luis Carlos Avila Pupo 66062804844    O    Contratos Carrocero Chapista A    Salario        4210.00
8045 Luis Carlos Avila Pupo 66062804844    O    Contratos Carrocero Chapista A    Feriado          120.00
8045 Luis Carlos Avila Pupo 66062804844    O    Contratos Carrocero Chapista A    Dejado de Pagar  500.00
8045 Luis Carlos Avila Pupo 66062804844    O    Contratos Carrocero Chapista A    Estimulación    1250.00

No encuentro solución a como hacer, que según el Tipo de Pre-Nómina me las separe.
Yo creé en mi Libros una Hoja para cada una de estas Pre-Nóminas, pero no se como hacer para que según se vayan insertando o modificando los trabajadores en el FrmPreNomina y se le vaya definiendo el Tipo de Pre-Nómina todos los datos de este trabajador hagan una copia en la Hoja predetermina (OJO una Copia porque debo conservar la Hoja Nomina con todos los datos de todos los trabajadores) para la Pre-Nómina. O sea, si se declara que es Salario, haga una copia de toda la Fila en la Hoja Salario, si es Feriado, haga una copia, igualmente de toda la Fila en la Hoja Feriado y así  sucesivamente.
En estas hojas creadas no se va a hacer ningún tipo de Alta, Baja, Modificación u otra cosa, solamente es para imprimirlas y guardarlas como constancias para posibles revisiones o auditorías.
Creo haberme explicado bien...de todas maneras si algo no entienden por favor me escriben.

Gracias a todos y que tengan una excelente noche.

Los aprecia y respeta.
JIPM
        
PD
Usuario: Pino    
Password: 123
 

Pre Nómina Foro .xlsm

publicado

Creo que lo más fácil para ti es copiar el contenido de todas las hojas (Nomina,Salario, Dejado de Pagar, Feriado, Estimulación, Objeto de Obra y Sobre Cumplimiento) en una hoja auxiliar y una vez tengas todos los datos en la misma realiza el filtrado en ella con lo que obtendrás por separado los distintos cobros de la persona seleccionada.

publicado

Buenos días Foristas. Buenos días JSD.

Realmente no entiendo bien su sugerencia, pero usted es el experto y siempre me ha ayudado con resultados excelentes. Si usted entiende que eso es lo mejor ADELANTE!

Espero por su propuesta que siempre es bien recibida porque algo se aprende de todos ustedes... siempre se aprende.

Un saludo.

Pino

publicado
En 27/11/2021 at 17:41 , pinoji dijo:

Si usted entiende que eso es lo mejor ADELANTE!

Buenas a lo que yo me refería es que lo intentes hacer tu mismo y si no lo consigues dilo, y ya haremos algún apaño en tu archivo. Creo que por el código contenido en tu archivo debes tener la suficiente capacidad para poder hacerlo, en caso contrario dilo y aquí estaremos. Eso sí, si no lo consigues por lo menos pon un ejemplo suficientemente claro de como están originalmente los datos y como deben quedar para mostrarlos.

 

publicado

Buenas noches Foristas.

Buenas noches JSD.  Desde un principio en este Foro he comentado que no pretendo que me hagan las cosas, no soy un "arreguindado" (por decir algo), aunque es otra manera de aprender, porque cuando ustedes me dan una solución la repaso y estudio el código y en lo adelante ya no tengo que volver con esa duda, pero si escribí es porque no tengo ni idea de como hacerlo.

Creeme que cuando escribo al Foro es porque ya he agotado todos mis pocos conocimientos. No me avergüenza decir que NO SÉ ALGO... porque estaría por una parte atrasando mis enseñanzas y por otra engañándome a mi y es algo que no debo permitirme, al menos NO a estas alturas de mi vida.

Mediante el Formulario Consulta puedo lograr saber y filtrar cualquiera de los datos, incluyendo Tipo de PreNomina, pero no es eso exactamente lo que quiero. Necesito que cada una de las Hojas con los nombre de los Tipos de Prenóminas se vayan llenando automáticamente a medida que se van insertando.

Mi esposa debe ir introduciendo los datos y por lo general primero es la Prenóminas de Salario, después irá y a través del evento Dobleclick y Modificará a los trabajadores que tengan otro tipo de Prenóminas  (Dejado de Pagar por algún tipo de error, Feriado si es que el mes en cuestión lo tiene, Sobre Cumplimiento  si algún trabajador lo amerita y así sucesivamente) y la primer Prenóminas de Salario que se hizo, ya no va a existir, no al menos como se concibió originalmente.

Pensé hacerlo también a través de la Grabadora de Macros, pero me quedan un par de "Lagunas" que no sé cómo "nadarlas".

Lo otro es aplicar Filtros Avanzados (en Excel, no VBA), pero me gustaría hacerlo todo desde VBA.

Eso es lo que tengo, no hay más...

Gracias a todos, es especial a JSD por su interés.

Tengan una excelente semana.

Pino

publicado

Buenos días Foristas.

Buenos días JSD.

Ya encontré como resolver el problema para ejecutar un código y transferir los datos de toda la Fila a otra hoja según el Tipo de Prenomina.

Por el Momento doy el tema por RESUELTO y les agradezco su interés.

Gracias una vez más.

Saludos

Pino

publicado

Buenas Tardes JSD, claro que se puede mostrar y también creo posible mejorarlo. Siempre estoy abierto a sugerencias, sobre todo de expertos como ustedes. Este es el código.

Sub ExtraerSalario()
Dim uFilaNomina As Long
Dim uFilaSalario As Long

Dim Codigo As String
Dim Nombre As String
Dim Identidad As String
Dim Categoria As String
Dim Departamento As String
Dim Tipo As String
Dim Ocupacion As String
Dim Sexo As String
Dim SalarioB As Double
Dim Tiempo As Long
Dim Horas As Long
Dim F As Integer
Dim D As Integer
Dim N As Integer
Dim A As Integer
Dim SalarioR As Double
Dim X As Integer
Dim Noct As Double
Dim Bon As Double
Dim SobreC As Double
Dim Pagado As Double
Dim Fecha As Date

Dim Cont As Long

uFilaNomina = Sheets("Nomina").Range("A" & Rows.Count).End(xlUp).Row
For Cont = 5 To uFilaNomina
    Codigo = Sheets("Nomina").Cells(Cont, 1)
    Nombre = Sheets("Nomina").Cells(Cont, 2)
    Identidad = Sheets("Nomina").Cells(Cont, 3)
    Categoria = Sheets("Nomina").Cells(Cont, 4)
    Departamento = Sheets("Nomina").Cells(Cont, 5)
    Ocupacion = Sheets("Nomina").Cells(Cont, 6)
    Tipo = Sheets("Nomina").Cells(Cont, 7)
    Sexo = Sheets("Nomina").Cells(Cont, ?
    SalarioB = Sheets("Nomina").Cells(Cont, 9)
    Tiempo = Sheets("Nomina").Cells(Cont, 10)
    Horas = Sheets("Nomina").Cells(Cont, 11)
    F = Sheets("Nomina").Cells(Cont, 12)
    D = Sheets("Nomina").Cells(Cont, 13)
    N = Sheets("Nomina").Cells(Cont, 14)
    A = Sheets("Nomina").Cells(Cont, 15)
    SalarioR = Sheets("Nomina").Cells(Cont, 16)
    X = Sheets("Nomina").Cells(Cont, 17)
    Noct = Sheets("Nomina").Cells(Cont, 18)
    Bon = Sheets("Nomina").Cells(Cont, 19)
    SobreC = Sheets("Nomina").Cells(Cont, 20)
    Pagado = Sheets("Nomina").Cells(Cont, 21)
    Fecha = Sheets("Nomina").Cells(Cont, 22)

If Tipo = "Salario" Then
    uFilaSalario = Sheets("Salario").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("Salario").Cells(uFilaSalario + 1, 1) = Codigo
    Sheets("Salario").Cells(uFilaSalario + 1, 2) = Nombre
    Sheets("Salario").Cells(uFilaSalario + 1, 3) = Identidad
    Sheets("Salario").Cells(uFilaSalario + 1, 4) = Categoria
    Sheets("Salario").Cells(uFilaSalario + 1, 5) = Departamento
    Sheets("Salario").Cells(uFilaSalario + 1, 6) = Ocupacion
    Sheets("Salario").Cells(uFilaSalario + 1, 7) = Tipo
    Sheets("Salario").Cells(uFilaSalario + 1, ? = Sexo
    Sheets("Salario").Cells(uFilaSalario + 1, 9) = SalarioB
    Sheets("Salario").Cells(uFilaSalario + 1, 10) = Tiempo
    Sheets("Salario").Cells(uFilaSalario + 1, 11) = Horas
    Sheets("Salario").Cells(uFilaSalario + 1, 12) = F
    Sheets("Salario").Cells(uFilaSalario + 1, 13) = D
    Sheets("Salario").Cells(uFilaSalario + 1, 14) = N
    Sheets("Salario").Cells(uFilaSalario + 1, 15) = A
    Sheets("Salario").Cells(uFilaSalario + 1, 16) = SalarioR
    Sheets("Salario").Cells(uFilaSalario + 1, 17) = X
    Sheets("Salario").Cells(uFilaSalario + 1, 18) = Noct
    Sheets("Salario").Cells(uFilaSalario + 1, 19) = Bon
    Sheets("Salario").Cells(uFilaSalario + 1, 20) = SobreC
    Sheets("Salario").Cells(uFilaSalario + 1, 21) = Pagado
    Sheets("Salario").Cells(uFilaSalario + 1, 22) = Fecha
End If
Next Cont
MsgBox "Depuración de Salario realizada con Éxito", vbInformation, "COLOSSUS"
End Sub

Un saludo hermano para ti y los demás foristas.

Los respeto mucho y los estimo.

Pino

 

publicado

Ahora tengo que buscar la manera de Borrar los datos de esas 6 Hojas cuando haya concluido el proceso para que quede listo para el próximo mes. Recuerda que yo hago un Backup (en cualquier momento del mes o semana).

Si puedes ayudame con eso, de todas maneras yo voy pensando por acá. Con la Grabadora de Macro lo puedo hacer, pero quiero buscar otra manera.

Gracias por su ayuda.

Saludos

Pino

publicado

Hola Foristas.

Hola JSD. Ya resolví también el problema de borrar las Pre-Nóminas y dejarlas listas para el próximo mes.

Este es el código. También creo que se puede mejorar, pero voy resolviendo...

Sub LimpiarNominas()
Dim Nombre As String
Nombre = "Bases de Datos"
If MsgBox("Recuerde hacer un Backup. Seguro Desea borrar las " & Nombre & " " & Chr(13), vbQuestion + vbYesNo, "COLOSSUS") = vbYes Then
        Hoja16.Range("A5:V80").ClearContents
        Hoja17.Range("A5:V80").ClearContents
        Hoja18.Range("A5:V80").ClearContents
        Hoja18.Range("A5:V80").ClearContents
        Hoja20.Range("A5:V80").ClearContents
        Hoja21.Range("A5:V80").ClearContents
        MsgBox "Las Nominas fueron Vaciadas con Total Éxito."
        Exit Sub
        End
    End If
End Sub
Gracias una vez más.

Saludos

Pino

publicado

Prueba el adjunto y comenta, en el momento que abras tu formulario FrmPreNomina    se realiza todo el proceso tanto el borrado de los datos anteriores en las hojas citadas por ti, como la colocación de los nuevos datos en sus respectivas hojas.

Pre Nómina Foro .xlsm

publicado

Este es el código utilizado.

Sub filtrado(): Application.ScreenUpdating = False
    With Hoja9
        .Range("G:G").AdvancedFilter 2, , .Range("AZ2"), 1
    End With
        For cont = 5 To Hoja9.Range("AZ" & Rows.Count).End(xlUp).Row
            buscada = Hoja9.Cells(cont, 52)
    
            With Hoja9.Range("A4", "V" & Hoja9.Range("A" & Rows.Count).End(xlUp).Row)
                .AutoFilter 7, buscada
                Sheets(buscada).Range("A1", "V" _
                & Sheets(buscada).Range("V" & Rows.Count).End(xlUp).Row).Delete
                .SpecialCells(12).Copy Sheets(buscada).Range("A1")
                .AutoFilter
            End With
        
        Next cont
        Hoja9.Range("AZ:AZ").Delete

End Sub

que se encuentra en el módulo ModDifePagos

publicado

Buenas noches Foristas.

Buenas noches JSD. Excelente. Evidentemente su propuesta me gusta más y me quedo con ella.

Gracias una vez más hermano. Nos seguiremos "viendo" en el camino y yo seguiré aprendiendo de usted y todos los demás miembros de este prestigioso Foro que por demás son verdaderos expertos.

Un abrazo a todos los miembros y en especial a usted y cuídese mucho y a su familia.

Pino

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.