Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Punto de Venta con Excel – Busqueda de Clientes #1004

Punto de Venta en Excel Busqueda Datos en Tiempo Real

Punto de Venta en Excel – Buscar Clientes Mientras se Escribe 

Siguiendo con la creación del Punto de Venta en Excel – Access, en esta oportunidad se muestra como buscar clientes en tiempo real o dicho de otra forma mientras se escribe, es decir al escribir en un textbox se buscarán en la base de datos Access las coincidencias con lo escrito y se mostrarán en el listbox de excel.

Si necesitas manejar excel en forma dinámica haz click acá, si quieres aprender sobre Excel en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet, te lo recomiendo no te arrepentirás.

Suscribe a nuestro canal de You Tube, mira el playlist con  vídeos relacionados donde podrás ver la macro en acción con una explicación en forma visual que ayudará a entender el ejemplo en forma más fácil.

Punto de Venta Búsqueda de Clientes en Tiempo Real

Al descargar el ejemplo se observará en el archivo una vez abierto, que contiene el formulario de Punto de Venta sobre el cual veníamos trabajando, presionando el botón de búsqueda se despliega un textbox oculto, al escribir tres o más letras en el mismo la macro comienza a funcionar buscando los datos que coinciden con lo escrito y mostrándolos en el listbox, lo interesante es que no hace falta presionar ningún botón para que busque se busca y muestran en tiempo real las coincidencias con lo que se va escribiendo en el textbox.

Explicación del código que va dentro del textbox para que busque en tiempo real

Antes de seguir es preciso recordar que los datos se encuentran guardados en Access y desde Excel se consultan, mostrando los mismos en un formulario o userform Excel – VBA.

Al escribir más de tres letras y por cada letra que se vaya escribiendo, la macro se conecta con la base de datos  de Access con el siguiente código:

cn.Open «Provider=Microsoft.ACE.OLEDB.12.0; » & «data source=» & ThisWorkbook.Path & «\1000 DBTSPuntoVenta.accdb;»

Luego la macro crea una sentencia SQL que luego ejecuta, la cual contiene los caracteres escritos, consultando en la base de datos y mostrando los datos que coincidan con los caracteres escritos, sean que se encuentren al principio de la palabra, medio o final de la misma, el código es el siguiente:

sql = «SELECT * FROM DB_Clientes WHERE Ucase(Nombre_Cliente) LIKE ‘%» & UCase(UserForm1.TextBox1) & «%’ ORDER BY Nombre_Cliente ASC»
Set rs = cn.Execute(sql)



Luego los datos encontrados los carga en un Listbox que se encuentra a la derecha del formulario, irá borrando y cargando los datos mostrando las coincidencias con la cadena de texto escrita, esto se hace con el siguiente código.

rs.MoveFirst
Do While Not rs.EOF
UserForm1.ListBox1.AddItem rs.Fields(1).Value
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount – 1, 1) = rs.Fields(2).Value
rs.MoveNext
Loop

Quizás también interese leer:

Como Buscar Mientras se Escribe y Cargar Listbox con SQL

Como acelerar al maximo busqueda en listbox mientras se escribe en textbox

Explicación del código que va dentro del listbox para que muestre los datos en textbox

Una vez mostrados los datos encontrados, si solo hay carga los datos directamente en los textbox del Sistema de Punto de Venta destinado a ello (Número Cliente, Nombre, Dirección, Teléfono, Mail).

En caso que hayan varias coincidencias con lo escrito se muestran en el listbox, el usuario puede hacer click en un ítem y se mostrará los datos en los textbox destinados a ello,  para lograr esto debe buscar el Numero de Cliente del ítem deleccionado en la base de datos una vez encontrado los carga en los textbox, se logra con el siguiente código:

busco = (UserForm1.ListBox1.List(ListBox1.ListIndex, 0))
sql = «SELECT * FROM DB_Clientes WHERE N_Cliente = » & busco & » «
Set rs = cn.Execute(sql)

With rs
UserForm1.TextBox2 = rs(«N_Cliente»)
UserForm1.TextBox3 = rs(«Nombre_Cliente»)
UserForm1.TextBox4 = rs(«Domicilio_Cliente»)
UserForm1.TextBox5 = rs(«Mail_Cliente»)
UserForm1.TextBox6 = rs(«Telefono_Cliente»)
End With

Descarga del código del aplicativo Punto de Venta en Excel Access

Desde el final del post se puede descargar sin ninguna restricción el ejemplo que contiene el código explicado, más los avances que tuvo en Sistema de Punto de Venta con Excel – VBA – Access, en caso que puedas recuerda aportar para sostener la web.

Código que va en el textbox de excel donde se ingresan datos a buscar

En el textbox se debe ingresar los datos a buscar, cuando se hayan ingresado tres caracteres o más la macro muestra en el listbox todos los datos coincidentes.



Private Sub TextBox1_Change()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim cn As ADODB.Connection, rs As ADODB.Recordset
On Error Resume Next

If UserForm1.TextBox1 = Empty Then
UserForm1.Label1.Visible = True ‘hace visible el label
Else
UserForm1.Label1.Visible = False
End If

If Len(UserForm1.TextBox1) <= 2 Then
UserForm1.ListBox1.Visible = False
End If

If Len(UserForm1.TextBox1) > 2 Then
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open «Provider=Microsoft.ACE.OLEDB.12.0; » & «data source=» & ThisWorkbook.Path & «\1000 DBTSPuntoVenta.accdb;»

sql = «SELECT * FROM DB_Clientes WHERE Ucase(Nombre_Cliente) LIKE ‘%» & UCase(UserForm1.TextBox1) & «%’ ORDER BY Nombre_Cliente ASC»
Set rs = cn.Execute(sql)

UserForm1.ListBox1.Clear

UserForm1.ListBox1.ColumnCount = 2
UserForm1.ListBox1.ColumnWidths = «50 pt;100 pt «

‘Adiciona un item al listbox reservado para la cabecera
UserForm1.ListBox1.AddItem

Set rs = cn.Execute(sql)
If rs.EOF = True Then
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
UserForm1.ListBox1.Visible = False
Exit Sub
Else

rs.MoveFirst
Do While Not rs.EOF
UserForm1.ListBox1.AddItem rs.Fields(1).Value
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount – 1, 1) = rs.Fields(2).Value
rs.MoveNext
Loop
End If

‘Carga los datos de la cabecera en listbox
For ii = 0 To rs.Fields.Count – 1
UserForm1.ListBox1.List(0, ii) = rs.Fields(ii + 1).Name
Next ii

UserForm1.ListBox1.Visible = True

UserForm1.ListBox1.AddItem
UserForm1.ListBox1.AddItem
UserForm1.ListBox1.AddItem
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount – 1, 1) = «Total Clientes: » & UserForm1.ListBox1.ListCount – 4

‘Si solo hay un dato coincidente directamente lo busca y carga sus datos, al seleccionarlo se ejecuta el evento click del listbox
If (UserForm1.ListBox1.ListCount – 1) – 4 = 1 Then
UserForm1.ListBox1.Selected(1) = True
UserForm1.ListBox1.Visible = False

busco = (UserForm1.ListBox1.List(ListBox1.ListIndex, 0))
sql = «SELECT * FROM DB_Clientes WHERE N_Cliente = » & busco & » «
Set rs = cn.Execute(sql)

With rs
UserForm1.TextBox2 = rs(«N_Cliente»)
UserForm1.TextBox3 = rs(«Nombre_Cliente»)
UserForm1.TextBox4 = rs(«Domicilio_Cliente»)
UserForm1.TextBox5 = rs(«Mail_Cliente»)
UserForm1.TextBox6 = rs(«Telefono_Cliente»)
End With

End If

Set rs = Nothing
cn.Close
Set cn = Nothing

End If

Application.ScreenUpdating = True
Application.ScreenUpdating = True
End Sub

Código que va en el Listbox del Formulario Punto de Venta Excel – Access

El siguiente código se inserta en el listbox donde se muestran los datos encontrados coincidentes con lo escrito en el textbox, haciendo click en un dato se muestran en los textbox destindados a ello.

Private Sub ListBox1_Click()
On Error Resume Next
Dim cn As ADODB.Connection, rs As ADODB.Recordset, sql As String, maxCliente As Long
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open «Provider=Microsoft.ACE.OLEDB.12.0; » & «data source=» & ThisWorkbook.Path & «\1000 DBTSPuntoVenta.accdb;»
busco = (UserForm1.ListBox1.List(ListBox1.ListIndex, 0))
sql = «SELECT * FROM DB_Clientes WHERE N_Cliente = » & busco & » «
Set rs = cn.Execute(sql)

With rs
UserForm1.TextBox2 = rs(«N_Cliente»)
UserForm1.TextBox3 = rs(«Nombre_Cliente»)
UserForm1.TextBox4 = rs(«Domicilio_Cliente»)
UserForm1.TextBox5 = rs(«Mail_Cliente»)
UserForm1.TextBox6 = rs(«Telefono_Cliente»)
End With

rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Donate:
Cuenta Paypal: https://paypal.me/programarexcel
Cuenta Bitcoin: 1KBGGb8fyDzyR3X1Rie6m7VguzaAfngNbd
Cuenta Ether: 0x41Bbd24556914C83a31217eBb3BC49789b66e407

Summary
Author Rating
1star1star1star1star1star
Aggregate Rating
no rating based on 0 votes