Utilizar Find en macros o procedimiento similar

Necesitaría que me ayudarais a buscar los distintos nombres de una persona, copiar toda la fila donde aparece, pegarla en otra hoja. Esto con cada nombre que se encuentre igual al indicado por nosotros.
Yo lo que he intentado son dos formas pero ninguna me funciona:
Do
Sheets(1).Select
Set c = Cells.Find(ComboBox1.Value, LookIn:=xlValues)
c.Select
c.EntireRow.Select
Selection.Copy
Sheets(2).Select
Cells(i, 1).Select
ActiveSheet.Paste
i = i + 1
ActiveCell.Offset(1, 0).Activate
Loop While c.Value <> ""
Esto me crea un bucle infinito y nada, no consigo solucionarlo para que funcione bien. Otra forma que he intentado es con un procedimiento buscar que me he hecho yo, pero también me da error:
Do
Sheets(1).Select
Casilla = Buscar("Hoja1", inicial, combox1.Value)
Range(Casilla).Select
ActiveCell.EntireRow.Select
Selection.Copy
Sheets(2).Select
Cells(i, 1).Select
ActiveSheet.Paste
i = i + 1
ActiveSheet.Offset(1, 0).Activate
inicial = ActiveCell.Offset(1, 0).Select
Loop While Range(Casilla).Address = "A1"
Function Buscar(Hoja As String, Casilla_Inicial As String, SDM As String) As String
Dim posicion As String
Worksheets(Hoja).Activate
ActiveSheet.Range(Casilla_Inicial).Activate
Do While (ActiveCell.Value <> SDM) And (ActiveCell.Value <> "")
ActiveCell.Offset(1, 0).Activate
Loop
If ActiveCell.Value = SDM Then
Buscar = ActiveCell.Address
Else
Buscar = "A1" 'no encontrado, posiciona en A1
End If
End Function
Por favor ayuda! Guiarme un poco para poder continuar please!

1 Respuesta

Respuesta
1
He Modificado la primera rutina que envías
Prueba con estos cambios y me avisas
Sheets(1).Select
Set c = Cells.Find(ComboBox1.Value, LookIn:=xlValues)
On Local Error Resume Next
c.Select
If Err.Number = 0 Then
c.EntireRow.Select
Selection.Copy
Sheets(2).Select
Range("A1").Select
If IsEmpty(Range("A1").Value) = False Then
If IsEmpty(Range("A2").Value) = True Then
Cells(ActiveCell.Row + 1, 1).Select
Else
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Activate
End If
End If
ActiveSheet.Paste
Else
MsgBox "Nombre No Encontrado", vbExclamation, "No Encontrado"
End If
On Error GoTo 0
Muchas gracias por contestar.
Lo acabo de probar pero solamente me copia la primera linea. ¿Cómo pongo el bucle para que me ponga todos los datos en la hoja nueva? Tengo en una hoja algo así:
Nombre caso numero
javier 4 3435
elena 7 6666
Eduardo 6 8889
javier 8 980
Y quiero que en la hoja dos quede:
Nombre caso numero
javier 4 3435
javier 8 980
Tendría que quedar así cuando pongo en el combobox el nombre de javier, si pusiera el de Elena tendría que salir el de Elena...
Muchas gracias
Realice algunas modificaciones chequealas y me avisas.
Dim Buscar_Proximo As Double
Dim Cantidad_Registros As Double
Dim Ultima_Fila_Celda_Encontrada As Double
Dim Fila_Celda_Encontrada As Double
Cantidad_Registros = 0
Ultima_Fila_Celda_Encontrada = 0
Fila_Celda_Encontrada = 0
Do While Err.Number = 0 And Ultima_Fila_Celda_Encontrada < Fila_Celda_Encontrada + 1
Sheets(1).Select
Range("A1").Select
Cells.Find(ComboBox1.Value, LookIn:=xlValues).Activate
Buscar_Proximo = 0
Do While Cantidad_Registros > Buscar_Proximo
Cells.FindNext(After:=ActiveCell).Activate
Buscar_Proximo = Buscar_Proximo + 1
Loop
Fila_Celda_Encontrada = ActiveCell.Row
On Local Error Resume Next
If Err.Number = 0 And Ultima_Fila_Celda_Encontrada < Fila_Celda_Encontrada + 1 Then
Cantidad_Registros = Cantidad_Registros + 1
Ultima_Fila_Celda_Encontrada = ActiveCell.Row
ActiveCell.EntireRow.Select
Selection.Copy
Sheets(2).Select
Range("A1").Select
If IsEmpty(Range("A1").Value) = False Then
If IsEmpty(Range("A2").Value) = True Then
Cells(ActiveCell.Row + 1, 1).Select
Else
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Activate
End If
End If
ActiveSheet.Paste
Application.CutCopyMode = False
Else
If Ultima_Fila_Celda_Encontrada < Fila_Celda_Encontrada + 1 Then
MsgBox "Nombre No Encontrado", vbExclamation, "No Encontrado"
End If
End If
Loop
On Error GoTo 0

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas