Búsqueda Inteligente en Excel sin formulario ActiveX (versión simplificada)

Es esta entrada  veremos un método alternativo para lograr “Búsquedas inteligentes en Excel”. En la entrada “Búsqueda Inteligente con ComboBox” habíamos utilizado un formulario ActiveX. En esta oportunidad vamos a utilizar solo TextBox y macros.
El código a utilizar sigue el mismo razonamiento que en la entrada de referencia,  solo que hacemos una simplificación utilizando las propiedades de las tablas dinámicas, para ahorrarnos código complicado. Quizás no sea el método más elegante  pero es muy simple y se llegan a tener buenos resultados.

De la otra forma tendríamos que programar el equivalente a lo que hace la tabla dinámica al actualizarse. Así que con este método se olvidan de eso.
 
Proceso:
1.       En una hoja tenemos los datos, que es la misma base de datos que utilizamos en el ejemplo de  “Búsqueda Inteligente con ComboBox”.

Como ven, se agrego una imagen con una lupa, que vinculada a una macro simple nos llevará a la parte de búsqueda. También se puede hacer un hipervínculo sobre la imagen hacía la hoja de “buscar”, que es mas simple aún.
2.       En otra hoja tenemos lo que sería el “formulario de búsqueda”.

El formulario de búsqueda lo creamos de acuerdo  a nuestra imaginación, a nuestra necesidad o a nuestra comodidad. Debe contener todos los campos que nos interesan.
o   Campo ID: en este campo es donde introduciremos el código de empleado correspondiente.
o   Campo Ubicación: en este campo introduciremos una formula “BuscarV” para que de acuerdo al código que figura en “ID” me muestre la ubicación para ese empleado.
o   Campo Teléfono: utilizamos un “BuscarV” para ver el teléfono para el empleado con ese ID.
o   Campo Puesto: de acuerdo al valor introducido en ID con un “BuscarV” vemos el puesto que ocupa el empleado.

o   El campo dónde dice nombre es una celda en blanco donde se introducirá el campo para la búsqueda. En la imagen no se ve pero en ese lugar colocaremos un Control ActiveX,  un “TextBox” al que se le quitaran los colores de borde y relleno.


o   Imagen Home: esta imagen se utilizara que para vinculada a una macro simple nos lleve a la base de datos de nuevamente. También se puede hacer un hipervínculo sobre la imagen hacía la hoja de “Empleados”, que es mas simple aún.

Lo anterior es acerca de los elementos que se ven, los elementos que hacen al panel de control.

3.       El control “TextBox” nos sirve para utilizar el método “Texbox_Change”. Es decir que cuando cambia algo dentro del control ejecute una acción determinada.
4.       Otro elemento que utilizaremos es una tabla dinámica, esta tabla estará ubicada en la parte inferior del campo “nombre”. Esta estará vinculada a los datos de los empleados pero utilizaremos en el campo “fila” solo el campo “nombre de empleado”.


El rotulo de la fila se ocultara y cuando no haya dato dentro del “TextBox” no veremos nada, ya que equivale a poner en el filtro de la tabla dinámica el valor “vacío” o doble comillas.

5.       La parte complicada es la macro, por decirlo de alguna manera, ya que debemos hacer algunas ediciones de un código básico.

Debemos grabar una macro en donde usemos un filtro sobre la tabla dinámica con “contiene”. Luego editaremos esta macro vinculando el texto de filtro con el texto que figura en el “TextBox” del campo Nombre. El objetivo de esto es que cuando varié el contenido del Textbox actualice el filtro de la tabla dinámica.

El código es el siguiente:
-------------------------------------------------------------------------------------------------------------------------
Private Sub TextBox1_Change()
‘el código siguiente es para ocultar los refrescos de pantalla
Application.ScreenUpdating = False
‘utilizamos el condicional if para que de acuerdo al contenido del texbox ejecute una acción,
If TextBox1.Text = "" Then
‘si el texto de la caja se vuelve vació ejecuta lo siguiente
‘el código siguiente es el que se uso como base, que es la macro grabado en primera instancia.
‘se cambio la variable “Value1” a vacío.
 ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("NOMBRE COMPLETO").ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("NOMBRE COMPLETO").PivotFilters.Add Type:=xlCaptionEquals, Value1:=""
‘el código siguiente es para restablecer el ancho de columna cuando actualicemos la tabla dinámica.
 Columns(4).ColumnWidth = 30.29
‘este código se utiliza para vaciar todos los campos del formulario.
Range("D4").FormulaR1C1 = ""
‘si la caja contiene algún texto ejecuta las siguientes acciones.
Else
‘este código lo obtenemos con la macro básica pero cambiamos en “Value1” por el contenido del  TexBox como ven.
 ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("NOMBRE COMPLETO").ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("NOMBRE COMPLETO").PivotFilters.Add Type:=xlCaptionContains, Value1:=TextBox1.Text
 Columns(4).ColumnWidth = 30.29
End If
End Sub
-------------------------------------------------------------------------------------------------------------------------
El código anterior es el corazón de la mini aplicación pero falta un par de consideraciones.
6.       Seleccionar un elemento de la lista desplegable.
Cuando utilicemos el formulario para realizar una búsqueda podría mostrarnos varios elementos, debemos seleccionar uno de ellos. Para eso utilizamos un método doble clic.

El código es el siguiente:
-------------------------------------------------------------------------------------------------------------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
‘el código siguiente es para evitar que al hacer doble clic me genere el ruido molesto de error
Cancel = True
                ‘utilizamos un condicional if que funciona solamente cuando coincide la posición de la celda en la que hacemos doble clic con el rango determinado, en este caso como es un ejemplo “D12:D100”
If Not Intersect(Target, Range("D12:D100")) Is Nothing Then
‘seteamos el texbox von el valor de la celda seleccionada en la tabla dinámica
TextBox1.Text = ActiveCell.Text
‘usamos la función coincidir “match” de Excel para buscar el valor del ID para el empleado seleccionado.
Range("D4").Value = WorksheetFunction.Match(TextBox1.Text, Sheets("empleados").Range("C7:C26"), 0)
‘luego dejo vacía la tabla dinámica ya que encontramos nuestro valor buscado.
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("NOMBRE COMPLETO").ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("NOMBRE COMPLETO").PivotFilters.Add Type:=xlCaptionEquals, Value1:=""
Columns(4).ColumnWidth = 30.29
‘hacemos foco sobre el textbox
TextBox1.Activate
End If
End Sub
-------------------------------------------------------------------------------------------------------------------------
7.       Falta una ultima parte, hay que prever que pasa cuando introducimos un código manualmente en “ID”. Utilizaremos el método “worksheet_change”
-------------------------------------------------------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
‘se usa este código para evitar el error cuando introducimos un código que no esta en la BD.
On Error Resume Next
If Not Intersect(Target, Range("D4")) Is Nothing Then
‘utilizo la función buscarv para ubicar el valor en el textbox correspondiente al código introducido.
TextBox1.Text = WorksheetFunction.VLookup(Range("D4"), Sheets("empleados").Range("B7:F26"), 2, False)
‘limpio la lista
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("NOMBRE COMPLETO").ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("NOMBRE COMPLETO").PivotFilters.Add Type:=xlCaptionEquals, Value1:=""
Columns(4).ColumnWidth = 30.29
Range("D4").Select
End If
End Sub
-------------------------------------------------------------------------------------------------------------------------
Nota: los códigos anteriores deben estar en la hoja de código de la hoja “buscar”.
Espero que les guste la idea, lo pueden poner en práctica. En las próximas entradas veremos como podemos utilizar un formulario ActiveX nuevamente.
Para recibir las actualizaciones se pueden inscribir por alguno de los medios. Además pueden revisar la página de Descargas dónde iremos colgando algunos ejemplos.
Éxitos!
Keys:
·         Búsqueda inteligente en Excel
·         Search Engine in Excel

62 comentarios:

rogelio perez dijo...

Excelente aplicación, gracias por compartir el código, solo tengo una duda ¿porque al modificar las celdas de la columna ID ya no me regresa ese valor a la celda D4 siempre regresa el numero de la fila donde esta el nombre, que es lo que tengo que modificar en el código para que se haga ese cambio?, saludos y espero puedan ayudarme

Juan Pablo Torres dijo...

Hola Amigo, gracias por los comentarios! Recuerda que lo que intentamos más bien es compartir una idea para inspirar a otros con sus propias ideas. El código es solo un extra , lo importante esta en la metodología que es básicamente una macro modificada. Es decir, que teniendo en cuenta el último comentario puedes hacer que haga lo que tú quieres solo modificando la macro, los pasos que vas grabando. Esperamos hayamos orientado a la solución. Nos puedes escribir directamente mediante el formulario de contacto. Saludos

Anónimo dijo...

Hols como puedo puedo desaparecer todos los nombres completos el valor "vacio" donde va dentro de esta formula

ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("Nombre Apellidos").ClearAllFilters

ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("Nombre Apellidos").PivotFilters.Add Type:=xlCaptionContains, Value1:=TextBox1.Text


Gracias

Juan Pablo Torres dijo...

Hola Amigo, cómo estas! No hay necesidad ni de conocer el código para hacer esto. Recuerda que se parte de una macro. Lo que tienes que hacer es grabar la macro y luego en todo caso haces las modificaciones necesarias. Espero se comprenda el concepto? Si quieres nos puedes consultar directamente mediante el formulario de contacto. Respondemos lo más rápido posible.
Saludos

Roberto Jiménez Vega dijo...

Buenas tardes, por alguna el razon, al copiar el codigo del macro w introducirlo en el textbox, a la hora de correr el codigo, solo me deja teclear una sola letra e inmediatamente despues se brinca a una celda en blanco. me podria ayudar? este es el codigo del textbox:

Private Sub TextBox1_Change()
ActiveSheet.PivotTables("PivotTable1").PivotFields("Encabezado").PivotFilters. _
Add Type:=xlCaptionContains, Value1:=TextBox1.Text
ActiveSheet.PivotTables("PivotTable1").PivotFields("Encabezado"). _
ClearAllFilters
Columns("B:B").Select
Selection.ColumnWidth = 85


End Sub

Juan Pablo Torres dijo...

Hola amigo, cómo estas! A simple vista parece ser que estas limpiando la tabla dinámica después de introducido el valor. Si te fijas en el código, primero hacemos clear en el pivotable y luego establecemos el valor del textbox1 al value1. Pruébalo, de otra forma nos puedes consultar directamente desde el formulario de consulta. Saludos

ramon perales dijo...

Hola amigo baje la muestra de búsqueda inteligente esta muy buena quería adaptarla a mis necesidades pero no me deja modificar la base de datos esta protegida y me pide clave como la des protejo tenes la clave desde ya muchas gracias por tu tiempo de enseñarnos

Juan Pablo Torres dijo...

Hola amigo, cómo estas!
La plantilla esta disponible para poder ver los elementos, las formulas, el código, etc. La idea es que la puedan ver y que puedan, con el artículo y el video, crear su propia mini aplicación. Esa es la forma en que van a ir aprendiendo con los errores y van a crear algo único. Recuerda que también nos puedes contactar directamente mediante el formulario.
Saludos

Ricardo Cano dijo...


HOLA AMIGO, TENGO UN INCONVENIENTE, CUANDO YA ESTA ESCRITO EL NOMBRE, EN EL ID ME MUESTRA LA POSICION QUE TIENE EN LA TABLA DE DATOS Y NO EL CODIGO, PERO CUANDO INGRESO EL CODIGO SI ME MUESTRA EL NOMBRE Y TELEFONO, O SEA ESTÁ BIEN POR UN LADO Y A LA INVERSA NO, TENGO QUE CAMBIAR ALGUN CODIGO ??? 

Juan Pablo Torres dijo...

Hola amigo, cómo estas!
En cuanto a tu consulta seguramente hay algún detalle en el código que hay que ver. Si quieres nos puedes escribir directamente al formulario de contacto.
Saludos

anthony Martinez dijo...

HOLA AMIGO..
tengo un inconbeniente ya que no se oculta mi tabla dinamica..
ya inserte la formula que indicas pero nada.
sigo eniendo mi tabla dinamica a la vista(un filtro)
¿como le puedo hacer?
de ante mano gracias¡¡

Juan Pablo Torres dijo...

Hola amigo, cómo estas!
Lo puedes ocultar ocultando la fila o simplemente dentro de las opciones de la tabla hay una para ocultar la primera fila.
Saludos

Alfredo Silva dijo...

Hola amigo.
Tengo una duda, no comprendo para qué sirve la formula If Not Intersect(Target, Range("D12:D100")) Is Nothing Then. La estoy adaptando a una base de datos que tengo, y si busca mis dato y todo pero al momento de seleccionar o darle doble click, me aparece otro de los artículos con todo y sus demás características, creo que es por los inteervalos que le doy en esta fórmula, pienso que no corresponde, por ello quisiera que me explicaras para que sirve y porque tomaste el intervalo ("D12:D100")) en tu ejercicio para que yo lo pueda analizar y pueda entenderle.
Te agradecería mucho tu respuesta .

Francisco Uriel Arce Cruz dijo...

Hola amigo no se si me puedes ayudar soy nuevo en esto y quisiera hacer una tabla de registros pero con un poco mas de recuadros como la que muestras solo que no se como incrustar mas recuadros

Edwin Zuluaga dijo...

Buenas tardes y muchas gracias por el aporte, Yo tengo el incoveniente al colocar el codigo manual ya que no me actualiza el nombre en el TextBox

TextBox1.Text = WorksheetFunction.VLookup(Range("D4"), Sheets("Codigo").Range("B2:C750"), 2, False)

Y por otra parte en el campo del codigo se ve es la posicion donde se encuentra el dato buscado y no el codigo

Range("D4").Value = WorksheetFunction.Match(TextBox1.Text, Sheets("Codigos").Range("C2:C750"), 0)

Me podrias decir que estoy haciendo mal?? Muchas gracias.

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por comentar!
En cuanto a tu consulta, tienes que revisar la formular ya que solo es el BuscarV con la forma de código VBA. Para revisar si esta bien el dato puedes crear la formular equivalente en una celda.
Por otro lado, recuerda que en este caso nuestro ID o código es numérico y es simple mostrar el código porque solo debemos sumar las filas por arriba, que no cuentan. Si cambias la forma del código no te servirá este procedimiento. Si te queda alguna duda o consulta nos puedes escribir directamente mediante el formulario del blog. Saludos

Edwin Zuluaga dijo...

Hola muchas gracias por tu respuesta, ya verifique la formula y funciona, pero no me pone nada en el TextBox :( No se que estoy haciendo mal.

Giancarlo yamir mora cortez dijo...

HOLA QUE TAL ESTA MUY BUENA LA MINIAPP PERO TENGO UN PROBLEMA A LA HORA DE FILTRAS POR TEXTO Y SELECCIONAR NO ME ARROJA LOS DEMÁS CAMPOS PERO CUANDO SI INGRESO EL CÓDIGO ME ARROJA TODOS LOS CAMPOS MIS CODIGOS NO SON COMO LOS TUYOS 001,SON ASI 790920128914 DE REPENTE ES POR EL CODIGO?

Juan Pablo Torres dijo...

Hola, cómo estas amigo! Gracias por comentar!
Así es, todo tiene que ver con el código. Recuerda que en una base de datos siempre indexa con un orden especifico, por decir "1,2,3,4,5, etc". Luego si tu tienes otros códigos deberías relacionar con esa base para que te sirva. No sé si entiende. Sino nos puedes escribir. Saludos

miguel angel dijo...

Hola Como le puedo hacer si camio el id de Juan gonzalez por ejemplo
6540 Juan Gonzalez 011-4678-5694 Argentina Distibucion pero me sigue saliendo en id 0001 en vez de 6540 y no me aparecen los demas datos x lo mismo espero me ayudes gracias

Juan Pablo Torres dijo...

Hola amigo, cómo estas!
El tema del id es una cosa de concepto. Siempre vas a tener una columna ID en una base de datos, la veas o no. Es decir, en realidad es número que identifica una posición en la matriz. Nosotros para hacer fácil la explicación siempre utilizamos nuestros ID's como números de 1 para adelante pero tu puedes utilizar en la posición el número identificatorio que quieras. para eso en todo caso deberías agregar otra columna que se llame por ejemplo "código" o lo que sea, pero para tomar la fila cómo elemento único, utilizas o la identificación de la fila o la columna ID del 1 al "---".
Espero se entienda algo, lo que queremos decir.
Ahora deberías ajustar el código o las formulas para que tomen tu ID o código personalizado.

Esperamos tus comentarios.

Saludos

SPACIO odontologico dijo...

Miguel ANgel, no se si ya lo has ubicado, pero la forma de hacer que esta aplicacion no nos tome un id autonumerico sino un id propio es haciendo una formula INDICE+CONICIDIR, que en VBA seria, como sigue para el ejercicio planteado:

Range("D4").Value = WorksheetFunction.Index(Sheets("empleados").Range("a5:a500"), WorksheetFunction.Match(TextBox1.Text, Sheets("empleados").Range("B5:B500"), 1))

hay que tener en cuenta que la numeracion debe estar en orden para que funcione adecuadamente.

profesores dijo...

HOLA, EXCELENTE TUTORIAL, MUY CLARO..CUESTA AGARRARLE EL HILO, PEOR ME HA SALIDO DE MARAVILLAS.
TENGO UNA SOLA COSA QUE NO PUEDO CORREGIR.

HE LOGRADO QUE ME INDIQUE TODOS LOS CAMPOS SIGUIENDO LAS FORMULAS BUSQCARv Y USANDO EL TEXTBOX ..PERO AL SELECCIONAR UN NOMBRE DE LA LISTA, QUEDA EN ESA MISMA COLUMNA DEBAJO DEL CUADRO LAS CELDAS VACIAS, Y NO LOGRO QUE NO ME QUEDE MARCADO NADA DEBAJO DEL CUADRO COMO EN TU EJEMPLO..(SI PINTO EL FONDO DE UN COLOR, ESAS CELDAS QUEDAN SIEMPRE EN BLANCO...(NO SE SI ME EXPLICO).
EN TU PLANILLA DE EJEMPLO, CUANDO SELECCIONAS UN NOMBRE DEL CUADRO, TODO EL FONDO SE MANTIENE IGUAL, NO QUEDAN MARCADAS LAS CELDAS DEBAJO DE LA LISTA...
COMO LO HAGO?

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por tus comentarios!
En cuanto a tu consulta, no sabemos si entendemos bien pero te refieres al color de fondo del formulario?
En este caso, lo que hacemos es ocultar las lineas de cuadricula por lo que se ve todo blanco. La tabla dinámica auxilar que utilizamos es de color blanco, el fondo, por lo que el efecto es que parece que todo tiene el mismo fondo. En el caso que cambies de fondo debes también cambiar el formato de la tabla dinámica original así coinciden ambos.
Esperamos te haya servido.
Saludos

Rodrigo dijo...

Hola... Otra consulta... Al ingresar un nombre al cuadro, no me aparece completo...
Ejemplo si escribo Juan, me salen todos los Juan en la lista, pero si escribo Juan Per, deja de aparecer las opciones...
Qué debo hacer?

MARIO MARTINEZ dijo...
Este comentario ha sido eliminado por el autor.
MARIO MARTINEZ dijo...

Donde encuentro el archivo el cual estas realizando.. seria bien ejemplo

Juan Pablo Torres dijo...

Hola amigos, cómo están? Gracias por comentar y disculpen la demora en responder.
En cuanto a los nombres, si hay muchas personas que sus nombres empiezan con Juan, si introduces "juan" esta bien que te muestre toda la lista. Por otro lado si introduces "Juan Per" te mostrará los nombres con esa coincidencia.
Por otro lado, en la solapa "Descargas" están los ejemplos.
Saludos

amanda bernal dijo...

Hola esta excelente, pero no desaparece la lista de nombres y no me funciona el doble click, o como puedo hacer para que si selecciono un nombre me aparezcan los datos que quiero de esa persona?
Porfavor

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por escribirnos!
Tienes el código, para el tema del doble-click se usa el evento "double-Click". Seguramente estas realizando algo mal en el procedimiento, si lo revisas seguramente lo lograras.
Saludos

P.D.: recuerda habilitar las hojas para las macros, que suele pasar.

amanda bernal dijo...

Esta perfecto me funciono muy bien, Gracias
Pero no se si me puedas ayudar, quiero que desaparezca la fila de etiquetas de fila, cuando dejo vacio el textbox aparece la fila con todos los nombres, no se que hacer.
Muchas gracias

JoseLuis PQ dijo...

Hola, muy buen material lo he adaptado a un trabajo que estoy haciendo y ha quedado muy bien pero no logro dar con la solucion para un ID que no existe, el textbox deberia de quedar en blanco tambien al igual que los demas campos. Espero que me puedas ayudar desde ya muchas gracias... Sigue asi

Juan Pablo Torres dijo...

Hola amigos, cómo están! Gracias por escribirnos!
En cuanto a sus consultas, para Amanda : la fila de etiquetas se oculta, hay dos maneras. Revisa los comentarios que ya se habló de eso.

Para José Luis, no se entiende bien la pregunta pero se supone que el buscados busca (valga la redundancia) en una lista de datos que esta completo, sin embargo siempre se puede arreglar. Hay que pensarlo.

Esperamos sus comentarios.
Saludos

DAFNE Y VIVI dijo...

Hola amigo una consulta hay dos videos tuyos con respecto a este tema mi pregunta es el recuedro de buscar nombre empleado obligotoriamente tiene que ir una macro? gracias por tu respuesta

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por escribirnos!
Hay mas de dos artículos acerca de búsquedas y precisamente hay otros métodos con formulas que no necesitas utilizar macros. Revisa los artículos del blog y los encontrarás.
Esperamos tus comentarios.
Saludos

DAFNE Y VIVI dijo...

hola amigo hago todo lo que indica los codigos pero al momento de cerrar la hoja visual basic me sale un mensaje se ha producido el error 10004 en tiempo de ejecucion: no se puede obtener la propiedad pivottables de la clase worksheet

hise los 3 pasos pero no me sale lo que mas me interesa a mi es la busqueda para mi base de datos que son mas de 1000 y quisiera que con un par de letras me filtre para asi ingresar mis datos de venta y o compra aver si me ayudas paso a paso porfavor gracias mi correo el e_vasquezmeza@hotmail.com

Juan Pablo Torres dijo...

Hola amigos, cómo están! Gracias por sus comentarios!
En realidad, en el blog tenemos varios métodos de búsqueda. Según complejidad y nivel de conocimiento de la gente. Si no tienes tanta experiencia trabajando con macros o código deberías empezar de los más simple a lo mas complejo. En este caso lo mas simple es usar la búsqueda con filtro, cuando se usa formulario ya es algo más avanzado y se generaran ciertos errores.
Esperamos tus comentarios.
Saludos

rebeca dijo...

HOLA AMIGO SOY NUEVA EN ESTO DE EXCEL MIRE TU TORIAL MUY BUENO POR CIERTO SEGUI LOS PASO COPIE EL CODIGO CREE UNA BASE DE DATO CON LOS MISMO TERMINO PERO CON LOS DATOS DISTINTOS EN LA CUAL TENGO UN INCONVENIENTE, CUANDO YA ESTA ESCRITO EL NOMBRE, EN EL ID ME MUESTRA LA POSICION QUE TIENE EN LA TABLA DE DATOS Y NO EL CODIGO, PERO CUANDO INGRESO EL CODIGO SI ME MUESTRA EL NOMBRE Y TELEFONO, O SEA ESTÁ BIEN POR UN LADO Y A LA INVERSA NO, TENGO QUE CAMBIAR ALGUN CODIGO ??? 

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por tus comentarios!
En cuanto a tu consulta, revisa el código pero ten muy en cuenta el concepto de lo que hace cada parte. Como lo ponemos en el blog. Lo importate es el concepto más que el código.
Esperamos tus comentarios.
Saludos

Nataly dijo...
Este comentario ha sido eliminado por el autor.
Walfred Sam dijo...

POR FAVOR SI PUDIERA AYUDARME ME FUNCIONAN LOS CODIGOS Y GUARDO EL ARCHIVO PERO AL ABRIRLO NUEVAMENTE NO ME FUNCIONA EL CONTROL ACTIVEX COMO HAGO

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por escribirnos!
En cuanto a tu consulta, depende de tu versión de word pero suponemos que tienes una de las ultimas versiones en donde puedes guardar el libro con macros (*.xlsm). Si lo guardaste en formato común no te guarda las macros o si lo guardas en una versión anterior necesitas habitarla. Revisa bien la hoja.
Esperamos tus comentarios.
Saludos

Unknown dijo...

Buenas sobre el tema me sale error en la función worksheetfunction.match solo en esa línea como puedo solucionarlo. Cuando le pongo' en esa línea sale casi todo esepto la búsqueda del id

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por escribirnos!
En cuanto a tu consulta, esta parte de código define una función de excel de las que tienes disponible en la hoja. Si tienes un error aquí se deba probablemente a que hay algo mal en la sintaxis. Revisa las variables y que este correcta la información.
Esperamos tus comentarios.
Saludos

danilo dijo...

Buenas me gusta tu idea

actualmente estoy haciendo un programa para facturar y quisiera una opcion
similar al ingresar los diferentes productos que te los busque de un inventario y te de las permita seleccionar pero el ejemplo tuyo a sido lo
mas cercano que e visto y no me funciona ya que no se puede poner varias
tablas dinámicas una sobre otra conoces alguna otra opción.

si conoces alguna te lo agradecería mucho

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por escribirnos!
En cuanto a tu consulta, lo hemos utilizado por ejemplo en el "Gestor de Restos" para seleccionar productos. Se puede hacer tranquilamente con validación de datos.
Esperamos tus comentarios.
Saludos

pilgrin dijo...

Excelente aportación, Gracias mil por compartir. Lo apliqué a mi propia lista de clientes y me funciona de "arriba a abajo": si tecleo ID conocido, muestra el resultado correctamente pero, de "abajo a arriba" no: le doy doble clic al nombre de la lista dinámica pero, en vez de presentarme el ID que le corresponde, me muestra su posición de fila. ¿Es fácil saber (y que me digas) que puedo hacer para corregirlo?

pilgrin dijo...

Bueno, si hubiese leído todos los comentarios antes, me hubiese ahorrado la consulta. Otros han consultado lo mismo y SPACIO odontologico (allá por el 17 de enero de 2016) aporta la solución: dentro del

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean),
en la línea donde ponía
Range("D4").Value = WorksheetFunction.Match(TextBox1.Text, Sheets("DatosClientes").Range("B6:B1006"), 0)
debe ser
Range("D4").Value = WorksheetFunction.Index(Sheets("DatosClientes").Range("A6:A1006"), WorksheetFunction.Match(TextBox1.Text, Sheets("DatosClientes").Range("B6:B1006"), 0))

Eso sí, 0 al final, igual que la línea original y no 1 como indica la respuesta que, corrigiendo esto, hace que todo funciona como lo indica Juan Pablo pero, con "nuestros" propios ID

Juan Pablo Torres dijo...

Muchas Gracias por comentar! Que bueno que lo hayas podido solucionar y que hayas aprendido algo nuevo.
Saludos

Tito Antonio Calderón Mora dijo...

Hola, trate de implantar este codigo a una tabla en mi trabajo pero no logre hacer que al dar doble click me colocaen la celda D4 no el ID sino el numero de la fila de la izquierda. y por ende tampoco me trae los demas datos de BuscarV. -esa linea de masrch o COINCIDIR NO ME funciona, hay algo que estoy haciendo mal y no se que es. Yo lo estoy haciendo con una tabla en la cual el textbox va una direccion de un predio y en D4 va un numero de varios digitos que guian sobre la identificancon de ese predio.

Gracias por su ayuda

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por escribirnos!
Como bien dices es algún error en la formula o en el código que esta sucediendo al adaptar el código. Creemos que con un poco de maña lo podrás resolver. El concepto siempre es el mismo.
Saludos

MaríaLaura dijo...

Hola! Primero que todo muchisimas gracias!! Esta buenisimo este post... Segundo, estoy construyendo un documento muy similar al del ejemplo; los unicos cambios es que hay más columnas de información, por ende en el buscador tengo más campos. Seguí las indicaciones y todo me funciona perfect, EXCEPTO una cosita: cuando termino de hacer la macro y voy a ver si funciona me da el error 1004 donde dice que no se pueden usar las propiedades de la función MATCH.... he buscado porque me puede estar dando este error, he escrito el código de nuevo pero nada me sirve. He checkeado infinidad de veces que las referencias a las celdas esten bien, pero nada... siempre me da el mismo error... sabes como podria arreglarlo o si hay alguna alternativa?? GRACIAS!

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por escribirnos!
Como tu bien lo has dicho es la función MATCH que es la misma de "Coincidir" que puedes usar en las celdas. Como toda función tiene una sintaxis que hay que respetar, a veces sucede que se equivocan porque en el código no hay ayuda como cuando lo haces en la celda. Seguramente es solo eso. Revísalo, cuando escribes match te da las opciones en ingles. Quizás te convenga ver algún ejemplo en internet.
Esperamos tus comentarios.
Saludos

Meriann Gonzalez dijo...

Buenas tardes,
Juan tu ayuda con relación a poder hacer que este tipo de búsqueda funcione para varios Textbox, estoy haciendo un cotizador de servicios, y agregue a mi formularios unos 10 textboxt que requiero hagan la búsqueda inteligente dentro de la misma BD. Gracias por tu respuesta

Juan Pablo Torres dijo...

Hola amiga, cómo estas! Gracias por escribirnos!
No es que no se pueda pero esto más bien esta pensado para un solo campo de busqueda para todo el formulario, si fueran más campos con esto no lo vas a poder hacer pero si de la forma en que lo hicimos en el nuevo artículo. Ya con un formulario.
Esperamos tus comentarios y disculpa si tardamos en responder.
Saludos

Cristian David Hincapie Marin dijo...

BUENOS DIAS

no entiendo por que me sale siempre el "erros 9" en esta linea.

Range("D3").Value = WorksheetFunction.Match(TextBox1.Text, Sheets("PRODUCTOS").Range("D12:D100"), 0)

muchas gracias por la ayuda

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por escribirnos! En cuanto a tu consulta, tienes que revisar la formula, la sintaxis, de seguro el error esta ahí. Puedes guiarte averiguando sobre el error en internet pero de seguro es eso.
Esperamos tus comentarios.
Saludos

Marcela Paz dijo...

Hola muchas gracias por compartir y explicar tan bien :)

Juan Pablo Torres dijo...

Muchas Gracias!!
Saludos

Freddy Alcívar Dick dijo...

EXCELente....(=

Juan Pablo Torres dijo...

Gracias amigo! Saludos

Unknown dijo...

Hola a muchas gracias, tengo un inconveniente logre llevar todo a la perfección sin embargo programe otra macro para copiar y pegar información cuando termina de ejecutarse (copiar pegar) trato de hacer nuevamente doble click en el desglose de la tabla dinámica para selección de datos y me suena un error sabes a que se debe esto??