Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

PUNTO de VENTA con Excel Seleccionar CLIENTE a FACTURAR en Excel VBA #1016

Punto de Venta en Excel - Alta de factura cargar cliente

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

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