Modificación de Búsqueda en Macro

Buenas a todos;
Les consulto si me podes ayudar a modificar esta macro que me paso D2Enri (si estas por ahí, help me!) Que es un experto de este sitio.
Se trata de una macro que busca en una lista de nombres de empleados, copia y elimina datos del empleado cuando es dado de baja y lo traslada de la hoja de ACTIVOS a la hoja de BAJAS.
El problema que tengo es que si hago la búsqueda por apellido y hay dos iguales solo encuentra el primero que esta en la columna. ¿Me explico?
No se de que manera solucionarlo ya que no soy muy bueno en macros.
Espero puedan ayudarme.
Desde ya muchas gracias.
Esta es la macro en cuestión:
Busca un dato copia la fila en hoja2 y elimina la fila en hoja1
Sub busco_copia_y_elimina()
'creada x d2enri 23-02-2011
Dim n As Range
    palabra_a_buscar = InputBox("Ingresar datos del empleado", "Buscador")
    If palabra_a_buscar = "" Then Exit Sub
    Set n = Worksheets("ACTIVOS").Cells.Find(what:=palabra_a_buscar)
    If n Is Nothing Then
        MsgBox "No he encontrado nada. Lo siento."
    Else
         MsgBox "Empleado encontrado:  " & UCase(palabra_a_buscar) & " "
'posicionarse en el dato encontrado:
n.Select
'a continuación guarda la fila (para borrarla) y consulta si eliminaro no. (*)
        fila = n.Row
        sino = MsgBox("¿Deseas cambiar la fila a BAJAS?", vbYesNo, "Confirmar")
If sino = vbYes Then
n.EntireRow.Copy
 Sheets("BAJAS").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'xlAll
    Application.CutCopyMode = False
    Sheets("ACTIVOS").Select
n.EntireRow.Delete
End If
End If
End Sub

1 Respuesta

Respuesta
1
Te paso la macro modificada la cual te buscara hasta 2 nombres iguales si dices no al primero se situara en el segundo solo que si tienes tres deberíamos modificar para crear un bucle que te siguiera buscando
Sub busco_copia_y_elimina()
'creada x d2enri 23-02-2011
Dim n As Range
    palabra_a_buscar = InputBox("Ingresar datos del empleado", "Buscador")
    If palabra_a_buscar = "" Then Exit Sub
    Set n = Worksheets("ACTIVOS").Cells.Find(What:=palabra_a_buscar)
If n Is Nothing Then
        MsgBox "No he encontrado nada. Lo siento."
    Else
         MsgBox "Empleado encontrado:  " & UCase(palabra_a_buscar) & " "
n.Select
fila = n.Row
intRespuesta = MsgBox("¿Deseas cambiar la fila a BAJAS?", vbYesNo + vbQuestion, "MsgBox como función")
If intRespuesta = vbYes Then
n.EntireRow.Copy
Sheets("BAJAS").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'xlAll
    Application.CutCopyMode = False
    Sheets("ACTIVOS").Select
n.EntireRow.Delete
Else
 Cells.FindNext(After:=ActiveCell).Activate
 fila = ActiveCell.Row
        intRespuesta = MsgBox("¿Deseas cambiar el nuevo emplaado a BAJAS?", vbYesNo + vbQuestion, "MsgBox como función")
If intRespuesta = vbYes Then
ActiveCell.EntireRow.Copy
Sheets("BAJAS").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'xlAll
    Application.CutCopyMode = False
    Sheets("ACTIVOS").Select
ActiveCell.EntireRow.Delete
End If
End If
End If
End Sub
Ya me cuentas si te vale así y si no buscaremos otra solución
Hola D2Enri, que bueno que contestaste mi pregunta, quería enviártela a vos directamente pero salias como "no disponible".-
Ya probé la moficicacion que hiciste y funciona bien, me sirve, pero donde la voy a aplicar es en una base de aproximadamente 200 empleados; por lo que es muy posible que un apellido común, como PEREZ o FERNÁNDEZ se repita tres o más veces.
Si es que no es mucha molestia, me gustaría que la macro siga buscando más allá de la segunda opción.
Te pido disculpas si es que resulto muy pesado! Sino; no te quito más tiempo y hago la búsqueda del empleado por otro item.-
Desde ya agradezco tu amabilidad y paciencia.-
Saludos!
De nuevo quizá sea un poco larga pero funciona
te realiza hasta 5 búsquedas si crees necesitar más solo has de copiar el rango que te puse en negrita i pegarlo justo donde acaba la negrita
Sub busco_copia_y_elimina()
Dim n As Range
    palabra_a_buscar = InputBox("Ingresar datos del empleado", "Buscador")
    If palabra_a_buscar = "" Then Exit Sub
    Set n = Worksheets("ACTIVOS").Cells.Find(What:=palabra_a_buscar)
If n Is Nothing Then
        MsgBox "No he encontrado nada. Lo siento."
    Else
         MsgBox "Empleado encontrado:  " & UCase(palabra_a_buscar) & " "
n.Select
fila = n.Row
intRespuesta = MsgBox("¿Deseas cambiar la fila a BAJAS?", vbYesNo + vbQuestion, "MsgBox como función")
If intRespuesta = vbYes Then
n.EntireRow.Copy
Sheets("BAJAS").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'xlAll
    Application.CutCopyMode = False
    Sheets("ACTIVOS").Select
n.EntireRow.Delete
Else
 Cells.FindNext(After:=ActiveCell).Activate
 fila = ActiveCell.Row
        intRespuesta = MsgBox("¿Deseas cambiar el nuevo emplaado a BAJAS?", vbYesNo + vbQuestion, "MsgBox como función")
If intRespuesta = vbYes Then
ActiveCell.EntireRow.Copy
Sheets("BAJAS").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'xlAll
    Application.CutCopyMode = False
    Sheets("ACTIVOS").Select
ActiveCell.EntireRow.Delete
Else
Cells.FindNext(After:=ActiveCell).Activate
 fila = ActiveCell.Row
        intRespuesta = MsgBox("¿Deseas cambiar el nuevo emplaado a BAJAS?", vbYesNo + vbQuestion, "MsgBox como función")
If intRespuesta = vbYes Then
ActiveCell.EntireRow.Copy
Sheets("BAJAS").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'xlAll
    Application.CutCopyMode = False
    Sheets("ACTIVOS").Select
ActiveCell.EntireRow.Delete
Else
Cells.FindNext(After:=ActiveCell).Activate
 fila = ActiveCell.Row
        intRespuesta = MsgBox("¿Deseas cambiar el nuevo emplaado a BAJAS?", vbYesNo + vbQuestion, "MsgBox como función")
If intRespuesta = vbYes Then
ActiveCell.EntireRow.Copy
Sheets("BAJAS").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'xlAll
    Application.CutCopyMode = False
    Sheets("ACTIVOS").Select
ActiveCell.EntireRow.Delete
Else
Cells.FindNext(After:=ActiveCell).Activate
 fila = ActiveCell.Row
        intRespuesta = MsgBox("¿Deseas cambiar el nuevo emplaado a BAJAS?", vbYesNo + vbQuestion, "MsgBox como función")
If intRespuesta = vbYes Then
ActiveCell.EntireRow.Copy
Sheets("BAJAS").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False 'xlAll
    Application.CutCopyMode = False
    Sheets("ACTIVOS").Select
ActiveCell.EntireRow.Delete
End If
End If
End If
End If
End If
End If
End Sub
Ya me cuentas que tal

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas