
Punto de Venta en Excel – Insertar Cliente para Facturar
En este v铆deo se agrega una secci贸n m谩s del ejemplo de macro denominado Punto de Venta en Excel, en el mismo se muestra como seleccionar un cliente para facturar, se incorpora un buscador de datos en Excel inteligente, que busca datos en Access y muestra en Excel mientras se escribe, es decir a medida que se escribe se van mostrando todas la coincidencias que existen en la base de datos.
Opera Excel como los mejores, hazlo en forma f谩cil, eficaz y sencilla, 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.
Mira la macro en acci贸n, una explicaci贸n m谩s detallada de su codificaci贸n y funcionamiento, recomiendo observar para una m谩s f谩cil comprensi贸n de la macro; suscribe a nuestro canal de You Tube, mira el playlist con聽 v铆deos relacionados donde podr谩s ver la macros relacionadas 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 – Seleccionar cliente para facturar
Para insertar un cliente al que se le desea factura, se deben ingresar las primeras letras del nombre del cliente, del apellido o parte de ellos, la macro buscar谩 en la base de datos y mostrar谩 las coincidencias, no importando en que parte de toda la cadena de texto se encuentre lo que nosotros hemos escrito en el Textbox.
Mostradas la coincidencias, se debe elegir el dato correcto y la macro llenar谩 los Textbox con los registros relacionados con el Cliente Seleccionado.
Para seleccionar el registro se debe hacer click en el Cliente al cual se le desea facturar, en el caso que exista una sola coincidencia en la base datos con el el nombre del cliente ingresado, directamente los carga en los Textbox, no haciendo falta selecci贸n.
Explicaci贸n del c贸digo para seleccionar聽 clientes a facturar
C贸digo del textbox7
Ingresado el dato con el nombre del Cliente o parte del mismo, el Textbox valida que los caracteres ingresados sean mayor a 2 para que se ejecute la macro, luego de dicha cantidad la macro se empezar谩 a ejecutar, para esta validaci贸n se utiliza el siguiente c贸digo:
If Len(UserForm1.TextBox7) > 2 Then
En caso que se hayan ingresado m谩s de dos caracteres se ejecuta la macro, para ello procede a crear un objeto conexi贸n, un objeto recorset y realizar la conexi贸n da la base de datos, con los siguientes c贸digos:
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;”
Luego se crea la string de consulta y se ejecuta la SQL, as铆:
sql = “SELECT * FROM DB_Clientes WHERE Ucase(Nombre_Cliente) LIKE ‘%” & UCase(UserForm1.TextBox7) & “%’ ORDER BY Nombre_Cliente ASC”
Set rs = cn.Execute(sql)
El c贸digo anterior dice: Selecciona todos los campos de la base de datos DB_Clientes cuando el campo Nombre_Cliente de la base de datos coincida con lo escrito en el Textbox7, de esta manera mostrar谩 todas las coincidencias en el nombre del cliente con los caracteres escritos en el Textbox7.
Luego los datos encontrados los muestra en el Listbox3, cargando dicho listbox con los siguientes c贸digos:
rs.MoveFirst
Do While Not rs.EOF
UserForm1.ListBox3.AddItem rs.Fields(1).Value
UserForm1.ListBox3.List(UserForm1.ListBox3.ListCount – 1, 1) = rs.Fields(2).Value
rs.MoveNext
Loop
Con estos c贸digos se cargan los datos de la cabecera,
‘Carga los datos de la cabecera en listbox
For ii = 0 To rs.Fields.Count – 1
UserForm1.ListBox3.List(0, ii) = rs.Fields(ii + 1).Name
Next ii
Si solo hay un dato coincidente directamente lo busca y carga los datos relacionados con el ciente a los Textbox, al seleccionar el dato en el Listbox se ejecuta el evento evento click del Listbox3, logrando as铆 cargar los registros relacionados con el cliente a los distintos Textbox, el c贸digo es el siguiente:
If (UserForm1.ListBox3.ListCount – 1) – 3 = 1 Then
UserForm1.ListBox3.Selected(1) = True
UserForm1.ListBox3.Visible = False
End If
C贸digo del listbox3
Una vez encontradas las coincidencias en la base de datos con lo escrito en el Textbox7 del ejemplo, son mostradas en el Listbox 3, al seleccionar un cliente se pasan todos los registros relacionados a los Textbox destinados a tal fin.
Para realizar lo mencionado en el p谩rrafo anterior, primero se crea un objeto conexi贸n y un objeto recorset en donde se guardar谩n en memoria todos los datos obtenidos de la base de datos y que coincidan con lo escrito en el Textbox7, se usa el siguiente c贸digo:
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Seguidamente se crea el string de conexi贸n o cadena de conexi贸n a la base de datos de Access, que es donde se guardan todos los registros de este ejemplo Punto de Venta en Excel, de la siguiente forma:
cn.Open “Provider=Microsoft.ACE.OLEDB.12.0; ” & “data source=” & ThisWorkbook.Path & “\1000 DBTSPuntoVenta.accdb;”
Luego se busca el dato seleccionado en el listbox en la base de datos, para ello se determina cual es el c贸digo del cliente de la siguiente forma:
busco = (UserForm1.ListBox3.List(ListBox3.ListIndex, 0))
Posteriormente se crea la SQL o string de consulta, as铆
sql = “SELECT * FROM DB_Clientes WHERE N_Cliente = ” & busco & ” “
El c贸digo anterior dice: seleccione todos los campos de la base de datos clientes cuando el registro del campo N_Cliente coincida con el datos buscado, posterior a ello se ejecuta la SQL manteniendo en memoria los datos obtenidos:
Set rs = cn.Execute(sql)
Luego se utiliza el objeto recorset para extraer los datos y cargarlos en los respectivos Textbox, as铆:
With rs
UserForm1.TextBox13 = rs(“N_Cliente”)
UserForm1.TextBox7 = rs(“Nombre_Cliente”)
UserForm1.TextBox8 = rs(“Domicilio_Cliente”)
UserForm1.TextBox9 = rs(“Mail_Cliente”)
UserForm1.TextBox10 = rs(“Telefono_Cliente”)
End With
Descarga el ejemplo Punto de Venta – Como Seleccionar Cliente para Facturar
Al final del post se encuentra el link para descargar el ejemplo usado en el v铆deo y post explicativo, el mismo es totalmente gratuito y libre su uso, solicito aportar para sostener esta web, si est谩 dentro de tus posibilidades, desde ya muchas gracias.
C贸digo del para Generar un C贸digo Consecutivo para una Factura
C贸digo que se ingresa en Listbox3 en este Ejemplo
Private Sub ListBox3_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.ListBox3.List(ListBox3.ListIndex, 0))
sql = “SELECT * FROM DB_Clientes WHERE N_Cliente = ” & busco & ” “
Set rs = cn.Execute(sql)
With rs
UserForm1.TextBox13 = rs(“N_Cliente”)
UserForm1.TextBox7 = rs(“Nombre_Cliente”)
UserForm1.TextBox8 = rs(“Domicilio_Cliente”)
UserForm1.TextBox9 = rs(“Mail_Cliente”)
UserForm1.TextBox10 = rs(“Telefono_Cliente”)
End With
UserForm1.ListBox3.Visible = False
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
C贸digo que se ingresa en Textbox 7 en este Ejemplo
Private Sub TextBox7_Change()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim cn As ADODB.Connection, rs As ADODB.Recordset
On Error Resume Next
If UserForm1.TextBox7 = Empty Then
UserForm1.Label7.Visible = True ‘hace visible el label
Else
UserForm1.Label7.Visible = False
End If
If Len(UserForm1.TextBox7) <= 2 Then
UserForm1.ListBox3.Visible = False
End If
If Len(UserForm1.TextBox7) > 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.TextBox7) & “%’ ORDER BY Nombre_Cliente ASC”
Set rs = cn.Execute(sql)
UserForm1.ListBox3.Clear
UserForm1.ListBox3.ColumnCount = 2
UserForm1.ListBox3.ColumnWidths = “50 pt;100 pt “
‘Adiciona un item al listbox reservado para la cabecera
UserForm1.ListBox3.AddItem
Set rs = cn.Execute(sql)
If rs.EOF = True Then
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
UserForm1.ListBox3.Visible = False
Exit Sub
Else
rs.MoveFirst
Do While Not rs.EOF
UserForm1.ListBox3.AddItem rs.Fields(1).Value
UserForm1.ListBox3.List(UserForm1.ListBox3.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.ListBox3.List(0, ii) = rs.Fields(ii + 1).Name
Next ii
UserForm1.ListBox3.Visible = True
UserForm1.ListBox3.AddItem
UserForm1.ListBox3.AddItem
UserForm1.ListBox3.AddItem
UserForm1.ListBox3.List(UserForm1.ListBox3.ListCount – 1, 1) = “Total Clientes: ” & UserForm1.ListBox3.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.ListBox3.ListCount – 1) – 3 = 1 Then
UserForm1.ListBox3.Selected(1) = True
UserForm1.ListBox3.Visible = False
End If
Set rs = Nothing
cn.Close
Set cn = Nothing
End If
UserForm1.CheckBox1.Value = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
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
























