Copiar Datos de un libro a otro, pero solo cuando la celda POR cumpla con una condición X

Tengo dos bases de datos en Excel una se llama: DataBase Bewerber y la segunda se llama DataBase Arbeitnehmer. El punto es que quiero copiar ciertas filas de la hoja DataBase Bewerber del libro DataBase Bewerber (Esa hoja se llama igual que el libro. El libro tiene 4 hojas) a la hoja DataBase Arbeitnehmer del libro DataBase Arbeitnehmer, pero solo cuando en la columna N de la hoja DataBase Bewerber aparezca la palabra activo.

Estos son dos libros relacionados entre si. El primero DataBase Bewerber (base de datos de canditatos) y el segundo DataBase Arbeitnehmer (base de datos de Empleados) El puntos es que quiero crear una macro para que cuando un candidato cambia su estatus a Activo pase automáticamente al libro de base de datos de empleados

Agradecería mucho su ayuda ya que recién estoy empezando con esto de los macros y me apasiona hacerlo.

1 respuesta

Respuesta
1

H  o la:

Para copiar de forma automática la fila de un libro a otro, se tiene que poner la macro en los eventos de la hoja "DataBase Bewerber".

También es necesario que me digas, si en la columna "X" escribes la palabra "activo" o es resultado de alguna fórmula; si en la columna "X" tienes una fórmula, puedes poner la fórmula para revisarla.

Sería más práctico si mencionas los datos reales, es decir, en cuál columna se va a buscar la palabra "activo".

En dónde se encuentra el archivo destino "DataBase Arbeitnehmer", ¿o siempre va a estar abierto?

¿Qué datos se van a copiar o toda la fila se va a copiar? Y exactamente en dónde se va apegar.

E spero tus comentarios

Hola Dante Amor,

Primeramente quiero felicitarte por el excelente trabajo que realizas aquí en favor de las personas como yo que quieren aprender a programar en Visual Basic.

Ayer, buscando entre las preguntas de otros usuarios encontré una macro que me sirvió pero, aun no esta completa. Te la copio

Sub copiar()
'Establecer las hojas a utilizar

    Set l1 = Workbooks("Database bewerber") 
    Set l2 = Workbooks("Database Arbeitnehmer")
    Set h1 = l1.Sheets("DataBase Bewerber")
    Set h2 = l2.Sheets("DataBase Arbeitnehmer")

    col = "N"
        'Encuentra la ultima fila disponible de la hoja 2
    u = h2.UsedRange.Rows(h2.UsedRange.Rows.Count).Row + 1
    'Revisa un ciclo de la hoja1 desde la fila 5 hasta el _
    final de los datos
    For i = 5 To h1.Range(col & Rows.Count).End(xlUp).Row
    'Si en la hoja2 en la culumna N dice Aktiv
        If h1.Cells(i, col) = "Aktiv" Then
        'Copia las celdas indicadas
            h2.Range("A" & u) = h1.Range("A" & i)
            h2.Range("B" & u) = h1.Range("B" & i)
            h2.Range("C" & u) = h1.Range("c" & i)
            h2.Range("D" & u) = h1.Range("d" & i)
            h2.Range("E" & u) = h1.Range("e" & i)
            h2.Range("F" & u) = h1.Range("f" & i)
            h2.Range("G" & u) = h1.Range("g" & i)
            h2.Range("H" & u) = h1.Range("h" & i)
            h2.Range("I" & u) = h1.Range("i" & i)
            h2.Range("J" & u) = h1.Range("j" & i)
            h2.Range("k" & u) = h1.Range("k" & i)
            h2.Range("l" & u) = h1.Range("l" & i)
            h2.Range("M" & u) = h1.Range("m" & i)
            h2.Range("N" & u) = h1.Range("n" & i)
            u = u + 1
        End If
    Next
    'Danke Dante Amor. Gracias mil
End Sub

La macro funciona pero, me Copia los datos asi:

Como puedes ver me deja una línea entre el dato que ya estaba y los datos importados desde el Libro DataBase Bewerber. ¿Cómo puedo solucionar esto?

Otro punto es que cada vez que corro la macro se copian siempre los mismo datos y me gustaría mejorarla para que compie solo los que no tenga ya copiados en el Libro DataBase Arbeitnehmer.

Me explico: Hoy 3 candidatos fueron contratdos y pasaron a estar activos (col. N) Ejecuto el macro y me los Copia a la hoja deseada pero, mañana 2 candidatos más son contratados y pasaron a ser activos. Cuando ejecuto la macro me Copia nuevamente los tres del día anterior más los dos del día actual.

Como puedo Hacer para que la macro haga primeramente una verificación en la hoja DataBase Arbeirnehmer y copie solo los nuevos empleados que no estén ya en la data.

Gracias anticipada por tu apreciada ayuda.

Gilda Montero

Te anexo la macro actualizada.

Sub copiar()
'Establecer las hojas a utilizar
    Application.ScreenUpdating = False
    Set l1 = Workbooks("Database bewerber")
    Set l2 = Workbooks("Database Arbeitnehmer")
    Set h1 = l1.Sheets("DataBase Bewerber")
    Set h2 = l2.Sheets("DataBase Arbeitnehmer")
    '
    col = "N"
    'Encuentra la ultima fila disponible de la hoja 2
    u = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
    'Revisa un ciclo de la hoja1 desde la fila 5 hasta el final de los datos
    For i = 5 To h1.Range(col & Rows.Count).End(xlUp).Row
        'Si en la hoja2 en la culumna N dice Aktiv
        If h1.Cells(i, col) = "Aktiv" Then
            'Revisa si existe el ID
            Set b = h2.Columns("A").Find(h1.Cells(i, "A"), lookat:=xlWhole)
            If b Is Nothing Then
                'Copia las celdas indicadas
                h1.Range("A" & i & ":N" & i).Copy: h2.Range("A" & u).PasteSpecial xlValues
                u = u + 1
            End If
        End If
    Next
    MsgBox "Update Abgeschlossen", vbInformation, "Persönliche Daten"
End Sub

Para no repetir los datos, estoy tomando como referencia el ID No., si ya existe no lo copia, si no existe lo copia.

También corregí la parte para no dejar una fila vacía.

Prueba y me comentas.

Sal u dos

Hola Dante,

Solo quiero decirte que eres vormidable. la Macro funciona a la prefeccion.

Tengo otra pregunta relacionada con la tabla. puedo hacerla a aqui o quieres que habra una nueva pregunta.

Gracias Mil.

PS. no sabia que hablabas Aleman. El mensaje del MsgBox lo escribiste en aleman.

H  o l  a:

Con mucho gusto te ayudo con todas tus peticiones. Crea una nueva pregunta, en el desarrollo de la pregunta escribe: "para Dante Amor". Ahí me describes con detalle lo que necesitas.

P.d. No sé hablar alemán, supuse que era alemán por las imágenes que pusiste, honestamente utilicé el traductor de google para traducir el mensaje, jeje

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas