Saltar al contenido

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


pinoji

Recommended Posts

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

Enlace a comentario
Compartir con otras webs

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.

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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.

 

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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

 

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

Archivado

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

  • 97 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Hola que tal amigos programadores por favor me podrían ayudar con una macro que me genere un archivo CSV delimitado por comas, la estructura del archivo CSV no deberá llevar encabezado, los datos del archivo CSV serán obtenidos de la hoja “Datos”. En la columna A: deberá tener la clave clues que se toma de la columna B de la hoja Datos En la Columna B: el Código (son 230 codigos que van del rango G1:IB1 de la hoja datos) En la Columna C: el valor almacenado a su correspondiente al código y clues En la Columna D: el número del mes que se obtendrá de la de la columna E de la hoja Datos En la Columna E: el año que se tomará de la columna F de la hoja de Datos   Son 230 códigos por lo que la macro generará 230 filas por cada clave clues que tenga la hoja Datos En el archivo anexo una hoja llamada CSV para que vean la estructura que tendrá, el archivo CSV estará delimitado por comas   Les agradecería mucho que me ayuden por favor, Dios los bendiga Exportar datos a csv.xlsx
    • Hola buenas tardes.   Debido al trabajo debo estar comparando en un periodo unos archivos dentro de una carpeta o subcarpeta. en base a la fecha de creacion o modificacion.  pero tengo que estar viendo carpeta por carpeta y aveces son varios. Con una macro intente  listar los archivos de cualquier carpeta y subcarpeta, esto activandolo segun la celdaactiva. El problema es que tiene algunos errores. 1. si la carpeta cuenta con subcarpetas me los manda a muchas filas abajo. Mi idea es hoja(Así debe quedar) Que con una macro pueda seleccionar la carpeta desde el buscador y me de la lista de archivos a partir de la fila 6. siendo columna A= fecha de modificación, columna B =Fecha de creación y columna C=Nombre del archivo con hiperlink. Con otro o con la misma macro poder seleccionar otra carpeta y sus subcarpetas, según sea el caso. y me liste a partir de la columna F de la fila 6 Siendo La columna F=Nombre del archivo, columna H=fecha de creación, columna I=ultima modificación   Para así poder acceder y comparar mis archivos, directamente desde excel.   Muchas gracias Mariano       Listar archivos de 2 carpetas para comparar.xlsm
    • Hola buenas, Os presento mis dudas. Tengo un libro  (llamémosle LibroDestino) con dos módulos, uno de definición de variables "ModDef" y otro de inicializacion de esas mismas variables "ModCfg". Necesito que al copiarme una hoja de otro libro(llamémosle LibroOrigen), mediante un procedimiento, sobrescribir el modulo de inicialización de variables del LibroDestino con el  contenido del módulo que hay en el LibroOrigen. Destacar que los dos módulos de cada libro tienen el mismo nombre "ModCfg". Y tienen una única variable llamada "Mensaje". En el LibroDestino tiene el valor "Hola" y en el LibroOrigen el valor "Adiós" Este procedimiento lo realiza perfectamente,  es decir se sobrescribe, pero si en el mismo procedimiento quiero utilizar el nuevo valor de esa variable, me conserva el valor de la variable anterior. Para hacer las comprobaciones he ejecutado un MsgBox al empezar y al acabar el procedimiento, pero en los dos casos me devuelve el valor original del LibroDestino el valor "Hola", cuando mi idea es que al sobrescribir el modulo con el nuevo valor de la variable, el último MsgBox me devuelva el valor "Adios". Mi objetivo es poder tener la inicialización de esas variables en un libro que no sea el de trabajo (LibroDestino), ya que según la hoja que importe puedo requerir que las variables tengan un valor u otro. ¿Por que no me coge en el procedimiento el nuevo valor de la variable? ¿Cómo podría conseguirlo? He tenido que activar en VBA  la referencia Microsoft visual basic for applications extensibility 5.3 desde  Herramientas -> Referencias. Creo que es la única manera de poder trabajar con los módulos desde VBA, aunque si se pudiera de otra manera creo que sería mas óptimo. Mil gracias de antemano, un saludo!         Libro1_Prueba.xlsm Libro2_Prueba.xlsm
    • Agradecido Antoni! Tus sugerencias me ayudaron mucho! Como pudiese hacerte llegar el archivo?
    • Prueba este código. Sin el archivo no te puedo ajustar más. Private Sub btnCargaBancos_Click() 'El tipo de dato debe especificase para cada variable Dim TasaCompra As Double, TasaVenta As Double, InvBanesco As Double, InvVzla As Double Dim MontoBanesco As Double, MontoVzla As Double, TasaDiaBan As Double, TasaDiaVzla As Double Dim TasaActual As Double 'Hay que comprobar que los textbox tienen contenido numérico 'Los datos numéricos solo pueden contener números y el separador decimal, cualquier otro caracter dará error al convertir If Not IsNumeric(txtInverBanesco) Or _ Not IsNumeric(txtInverVzla) Or _ Not IsNumeric(txtTasaCompra) Or _ Not IsNumeric(txtTasaVenta) Then MsgBox "Los datos deben ser numéricos", vbCritical Exit Sub End If InvBanesco = CDbl(txtInverBanesco) InvVzla = CDbl(txtInverVzla) TasaCompra = CDbl(txtTasaCompra) TasaVenta = CDbl(txtTasaVenta) 'Los datos de los divisores no pueden ser 0 (Indeterminación matemática) If TasaCompra = 0 Or _ InvBanesco = 0 Or _ InvVzla = 0 Then MsgBox "Los datos no admiten valor cero", vbCritical Exit Sub End If MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055) TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then TasaActual = TasaDiaBan Else TasaActual = TasaDiaVzla End If 'En VBA, los datos numéricos no admiten ser formateados, formatear directamente en las celdas, 'MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) 'MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) 'TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco = MontoBanesco txtBcoVenezuela = MontoVzla txtTasaDiaria = TasaActual End Sub  
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • 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.