Userform o macro para buscar todos los datos de un cliente solo con el numero de CI, que están almacenados en una base de datos.

Hasta el momento tengo este formulario, lo que necesito es que al ingresar el numero de cédula y presionar el botón buscar automáticamente se llenen las casillas nombre, dirección, email y teléfono, todos estos datos los tengo ingresados en una base de datos.

2 respuestas

Respuesta
2

Hasta el momento tengo esta formula pero cuando pruebo la userform siempre me arroja el mismo resultado.

Private Sub BOTON_BUSCAR_Click()

'definimos rutas y archivos como variables

rutabaseDatos = "C:\Sistema base de datos\"
baseDatos = "EWA BASE DE DATOS.xlsm"
direccionbaseDatos = rutabaseDatos & baseDatos

'damos la orden de abrir la base de datos y pegue el numero de CI en la celda A1

Application.ScreenUpdating = False

Workbooks.Open Filename:=direccionbaseDatos
Worksheets("REG.CLIENTES").Activate
Range("B7").Select
TextBox1 = Range("A1")

'llamamos el macro para buscar

MACRO_BUSCAR_REGCLIENTE
Range("A1"). Activate

'Copiaremos la informacion al formulario

Range("B2").Select
Selection. Copy
TextBox2. SetFocus
TextBox2. Paste
Range("D2").Select
Selection. Copy
TextBox3. SetFocus
TextBox3. Paste
Range("E2").Select
Selection. Copy
TextBox4. SetFocus
TextBox4. Paste
Range("F2").Select
Selection. Copy
TextBox5. SetFocus
TextBox5. Paste
Workbooks(baseDatos).Close savechanges:=False
Application.ScreenUpdating = True
End Sub

Respuesta
2

Cuando tienes el libro abierto en la hoja que necesitas llamas a una macro... No sabemos que hace esa macro: MACRO _BUSCAR_REGCLIENTE, deja también las instrucciones para ajustarla o me comentas si necesitas las instrucciones de búsqueda

Ahora, lo que sigue no es el modo más correcto de pasar datos a los controles.

Imaginemos que encuentras los datos en la fila 'filx'

El pase a los controles seria:

Textbox2 = Range("B" & filx)

Textbox3 = Range("D" & filx)

Comentame sobre tu MACRO... para completar el proceso.

Hola, mira la macro es esta:

Sub MACRO _BUSCAR_REGCLIENTE()
'
' PARTE1 Macro
'
buscar = Range("A1")

Cells.Find(What:=buscar, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Selection.EntireRow.Select
Selection.Copy
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B3").Select
'
End Sub

Lo que sucede es que cuando ejecuto el userform siempre me copia el primer cliente de la lista y no el que le pido que me busque.

Te dejo las instrucciones para realizar la búsqueda y colocar los campos en el formulario.

Private Sub BOTON_BUSCAR_Click()'ajustada x Elsamatilde'definimos rutas y archivos como variablesrutabaseDatos = "C:\Sistema base de datos\"baseDatos = "EWA BASE DE DATOS.xlsm"direccionbaseDatos = rutabaseDatos & baseDatos'damos la orden de abrir la base de datos y pegue el numero de CI en la celda A1Application.ScreenUpdating = FalseWorkbooks.Open Filename:=direccionbaseDatosWorksheets("REG.CLIENTES").ActivateRange("B7").Select'hasta aquí ya estamos posicionados en la hoja Base'para pegar el valor de CI en A1 es así pero no hace falta para la búsqueda:    'Range("A1") = textbox1     'TextBox1 = Range("A1")'Esta macro solo busca el registro y lo pega en fila 3, no se entiende su finalidad    'MACRO_BUSCAR_REGCLIENTE'comienza la búsqueda del dato y devolución del resto del registro en el formularioDim buscoDim filx As LongSet busco = ActiveSheet.Range("A:A").Find(textbox1, LookIn:=xlValues, lookat:=xlWhole)'si encuentra el dato en col A copia el resto de los campos en los controles del formularioIf Not busco Is Nothing Then    'guardo la fila encontrada    filx = busco.Row    textbox2 = Range("B" & filx)    textbox3 = Range("C" & filx)    textbox4 = Range("D" & filx)    textbox5 = Range("E" & filx)Else    'si no encuentra datos deja los controles limpios    textbox2 = "": textbox3 = "": textbox4 = "": textbox5 = ""End If'opcional: posicionarse en el primer controltextbox2.setfocustextbox5.SetFocus'cierra el libroWorkbooks(baseDatos).Close savechanges:=FalseApplication.ScreenUpdating = TrueEnd Sub

No indicas qué tipo de dato es CI: si es numérico la línea del Set sería así:

Set busco = ActiveSheet.Range("A:A").Find(Val(textbox1), LookIn:=xlValues, lookat:=xlWhole)

PD) No debes dejar tus agregados como 'nueva respuesta' sino como 'aclaraciones'

Probala y comentame. Si te surge algún error dejame imagen de la hoja de datos de tu libro base con los encabezados y algunas filas de datos.

Sdos

Elsa

Hola, muchas gracias por tu ayuda.

Mira esta es la base de datos, intente con las instrucciones que me dejaste pero me queda rojo desde donde dice dim

Te detallo lo que necesito; cuando se muestre el formulario en el Texboxt1 debo ingresar el numero de cédula de la persona que deseo buscar y que automáticamente los demás datos se muestren en el formulario.

La fila donde se encuentran los números de cedula es la C

El nombre esta en la fila B y debe ir en el textbox2

La dirección esta en la fila DE y debe ir en el textbox3

El teléfono esta en la fila E y debe ir en el textbox4

El email esta en la fila F y debe ir en el textbox5

Espero que me puedas ayudar muchísimas gracias.

Ultimamente veo que está fallando el cuadro donde colocamos el código dejando todo de corrido.

Elimina el código a partir de la línea de rojo hasta el final y deja las siguientes. Ya ajusté el rango de búsqueda según imagen de tu base y coloqué la función VAL por tratarse de nros.

Dim busco
Dim filx As Long
Set busco = ActiveSheet.Range("C7:C" & ActiveSheet.Range("C" & Rows.Count).End(xlUp).Row).Find(Val(textbox1), LookIn:=xlValues, lookat:=xlWhole)
'si encuentra el dato en col C copia el resto de los campos en los controles del formulario
If Not busco Is Nothing Then
'guardo la fila encontrada
filx = busco.Row
textbox2 = Range("B" & filx)
textbox3 = Range("D" & filx)
textbox4 = Range("E" & filx)
textbox5 = Range("F" & filx)
Else
'si no encuentra datos deja los controles limpios
textbox2 = "": textbox3 = "": textbox4 = "": textbox5 = ""
End If
'opcional: posicionarse en el primer control
textbox2.SetFocus
'cierra el libro
Workbooks(baseDatos).Close savechanges:=False
Application.ScreenUpdating = True
End Sub

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas