Macro buscar sin imputbox

Buenas tardes, estoy buscando una macro que me busque el valor que coloco en la celda A1 en toda la columna C, y que cuando lo encuentre se pare encima de la celda donde esta el valor. No quiero ningún cuadro imputbox ni nada, sólo la macro a la cual le asignaré un botón. ¿Es posible?
Gracias

1 respuesta

Respuesta
1
La siguiente rutina se ejecutará al ingresar un valor en A1 (no necesitas del botón- si lo preferís escribime nuevamente para el ajuste)
Entrá al editor, seleccioná con clic derecho el objeto HOJA que corresponda (del panel a tu izquierda) y allí copiá esto:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "A1" Then   'controla el cambio en A1
Set busco = ActiveSheet.Range("C:C").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)     'busca ese dato en col C
If Not busco Is Nothing Then busco.Select    'si la búsqueda no quedó vacía es que lo encontró y lo selecciona
Set busco = Nothing
End If
End Sub
Saludos y no dejes de comentarme si esto resolvió tu consulta.
Buenas tardes Elsa Matilde, muy buena tu respuesta, la ejecute y funcionó a la perfección pero no fui claro al hacer la pregunta. Ahora que trate de ajustarla a mi necesidades no pude. Además de que me busque el valor, necesito que me selecciones las cinco celdas adyacentes a la derecha, me las copie a partir de la celda b5 de la hoja 3 y sino lo encontró me ubique en la celda B2 de la hoja 2.
Gracias por tu tiempo.
Tu consulta requería que '... cuando lo encuentre se pare encima de la celda donde esta el valor...' y eso es exactamente lo que hace.
Lamento que no expliquen de entrada lo que realmente quieren, nos evitaría pérdida de tiempo a unos y otros.
Bien, aquí va entonces con el agregado:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "A1" Then 'controla el cambio en A1
Set busco = ActiveSheet.Range("C:C").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole) 'busca ese dato en col C
If Not busco Is Nothing Then
fila = busco.row
range("C" & fila & ":H" & row).copy destination:=sheets("Hoja3").range("B5")  (ver*)
else   'si no encontró el dato
sheets("Hoja2").range("B2").select
end if
Set busco = Nothing
End If
End Sub
Nota (*) : ajustá el nombre de las col si no corresponde a C:H
Si debe copiar en la primer fila libre a partir de B5, previamente deberás guardar en una variable esa fila:
filibre = sheets("Hoja3"). Range("B65536").end(xlup). Row +1
y luego copiar los datos a partir de esa celda. En esa línea, en lugar de Range("B5") colocá:
Cells(filibre, 2)
Buenas noches Elsa, te cuento que cuando encuentra el dato tengo problemas con esta liena:
Range("C" & fila & ":H" & Row).Copy Destination:=Sheets("Hoja3").Range("B5")
y sino lo encuentra tengo problemas con esta otra linea

Sheets("Hoja2").Range("B2").Select

Saludos
Pedime el ejemplo al correo que encontrarás en mi sitio (o dejame el tuyo aquí). No olvides tu alias o motivo de consulta
Buenas noches Elsa, disculpa que abuse de tu amabilidad, he tratado de hacerlo funcionar a mis necesidades pero me arroja el mismo error en la misma parte. Ya cuando no lo encuentra el valor me quedo bueno, el problema persiste es cuando encuentra el valor, se interrumpe la acción y me saca el error ´1004´ en tiempo de ejecución: error en el método select de la clase Range. No se cómo solucionarlo o que es lo que esta mal. Te subrayo la fila del error.
Gracias por tu amable atención.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "A8" Then 'controla el cambio en A1
Sheets("hoja2").Select
Set busco = ActiveSheet.Range("c:c").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole) 'busca ese dato en col C
If Not busco Is Nothing Then
fila = busco.Row
ActiveCell.Offset(1, 5).Select
Application.CutCopyMode = False
    Selection.Copy
    Sheets("Hoja3").Select
    Range("B7").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
Else   'si no encontró el dato
Sheets("Hoja2").Range("B6").Select
ActiveCell.EntireRow.Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Offset(0, 0).Select
ActiveCell.FormulaR1C1 = "=TODAY()"
    ActiveCell.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveCell.Offset(0, 1).Select
End If
Set busco = Nothing
End If
End Sub
Probá con esta sintaxis, considerando que la hoja3 ya está seleccionada:
Activesheet.range("B7").select
Seguramente cuando avances te dará error en esta otra línea:
Sheets("Hoja2").range("B6").select
Lo correcto aquí sería:
Sheets("Hoja2").select
activesheet.range("B6").select
Sdos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas