Buscar un dato en otra hoja con VB excel

Tengo una hoja con unos datos de la siguiente manera

Hoja1

Los datos empiezan a partir de la fila 10 y están las siguientes columnas

Col. A - contiene códigos

Col. B - contiene Nombres de personal

Col. C - contiene Puestos

Entonces yo tengo la Hoja2 en donde

En un tabla que tengo realizado

A partir de la fila 10

Quisiera que en la Columna C

en el rango de filas de la 10 a la 20

Al colocar un código, la macro me haga una búsqueda en la Hoja1 del código que puse en

[C10] y me devuelve el valor de Nombre de personal en la celda D10 y el puesto en la celda E10

Y así sucesivamente si se llegase a requerir en el rango de celdas C10:C20

En caso de que el código que se coloque en la Hoja1 no exista en la Hoja2 que salga un mensaje de NO encontrado

O en caso de que si exista el código pero no tenga NOMBRE O PUESTO que salga un mensaje que induque QUE SI EXISTE el código pero que no tiene más datos

Respuesta
3

Hay algo que no queda claro en tu consulta:

'...Al colocar un código, la macro me haga una búsqueda en la Hoja1 del código que puse en [C10]

Quiere decir que la que manda es la Hoja1.

Pero luego solicitas: '...En caso de que el código que se coloque en la Hoja1 no exista en la Hoja2 que salga un mensaje de NO encontrado...

¿No será al revés? Si desde la Hoja2 se busca el dato, ¿es aquí donde se tiene que colocar el mensaje o devolver los valores encontrados?

Hacé la prueba en Hoja2, con esta fórmula en celda [D10]:

=SI.ERROR(BUSCARV($C10;Hoja1!$A$2:$C$5;2;FALSO);"No encontrado")      'devuelve nombre

y en [E10] :  =SI.ERROR(BUSCARV($C10;Hoja1!$A$2:$C$5;3;FALSO);"No encontrado")    'devuelve puesto

Comentame si esto resuelve tu consulta, sino deja alguna imagen de cómo se encuentran las tablas o rangos en cada hoja y lo que necesitas obtener.

Hola Elsa Matilde agradezco me hayas respondido...una disculpa si no me pude explicar bien.. 

ahora lo corrijo

Hoja1 (Base de datos)

Los datos empiezan a partir de la fila 10 y están las siguientes columnas

Col. A - contiene códigos

Col. B - contiene Nombres de personal

Col. C - contiene Puestos

Hoja2 - lugar donde iré colocando datos para que regresen los valores encontrados

En un tabla que tengo realizado en la HOJA2

A partir de la fila 10

Quisiera que en la Columna C

en el rango de filas de la 10 a la 20

Al colocar un código en la Hoja2, la macro me haga una búsqueda en la Hoja1 del código que puse [C10] de la Hoja2 y me devuelve el valor de Nombre de personal en la celda D10 y el puesto en la celda E10 (Siempre de la Hoja2)

Y así sucesivamente si se llegase a requerir en el rango de celdas C10:C20

En caso de que el código que se coloque en la Hoja2 (Hoja que manda) no exista en la Hoja1 (Base de datos) que salga un mensaje de NO encontrado

O en caso de que si exista el código pero no tenga NOMBRE O PUESTO que salga un mensaje que induque QUE SI EXISTE el código pero que no tiene más datos
espero me haya podido dar a entender

te agradezco 
saludos

Entra al Editor, selecciona el objeto llamado Hoja2 y allí copia lo siguiente:

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'se controlan cambios en col C a partir de fila 10
Set hox = Sheets("Hoja1")      'ajustar nombre de hoja
x = hox.Range("A" & Rows.Count).End(xlUp).Row
If Target.Column = 3 And Target.Row >= 10 Then
    If Target.Value <> "" Then
        Target.Offset(0, 1) = "": Target.Offset(0, 2) = ""
        Set busco = hox.Range("A10:C" & x).Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
        If busco Is Nothing Then
            MsgBox "NO se encuentra este código en Hoja1", , "Atención"
        Else
            If busco.Offset(0, 1).Text = "" Or busco.Offset(0, 2).Text = "" Then
                MsgBox "Al registro encontrado le faltan datos.", , "Atención"
            Else
                Target.Offset(0, 1) = busco.Offset(0, 1)
                Target.Offset(0, 2) = busco.Offset(0, 2)
            End If
        End If
    End If
End If
End Sub

Tal como quedó, te mostrará el mensaje de que faltan datos cuando se cumpla el 'O' tal como solicitaste.

Pero si quieres que te muestre el dato que sí está, quizás sea solo nombre o solo puesto, además del mensaje, debieras dejar el código de este modo:

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'se controlan cambios en col C a partir de fila 10
Set hox = Sheets("Hoja1")      'ajustar nombre de hoja
x = hox.Range("A" & Rows.Count).End(xlUp).Row
If Target.Column = 3 And Target.Row >= 10 Then
    If Target.Value <> "" Then
        Target.Offset(0, 1) = "": Target.Offset(0, 2) = ""
        Set busco = hox.Range("A10:C" & x).Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
        If busco Is Nothing Then
            MsgBox "NO se encuentra este código en Hoja1", , "Atención"
        Else
            If busco.Offset(0, 1).Text = "" Or busco.Offset(0, 2).Text = "" Then
                MsgBox "Al registro encontrado le faltan datos.", , "Atención"
            End If
            If busco.Offset(0, 1) <> "" Then Target.Offset(0, 1) = busco.Offset(0, 1)
            If busco.Offset(0, 2) <> "" Then Target.Offset(0, 2) = busco.Offset(0, 2)
        End If
    End If
End If
End Sub

* Te invito a mirar los videos N° 45 al 47 de mi canal donde se tratan los Eventos de Hoja.

Sdos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas