Necesito modificar el valor de un txtBox que trae por defecto el resultado de un VLookup

Tengo un txtBox, en el que elijo un valor que contiene en una lista; y al elegir "x" valor, en un segundo TxtBox se completa con otro dato (que me lo trae un Vlookup)
El código me funciona correctamente; pero lo que necesito es que el formulario, me permita, modificar el valor devuelto en el segundo txtbox de manera manual.

Para ser más especifica.. El primero txtbox elijo un producto de venta, al elegirlo y darle entrada.. El segundo txtbox se completa con el precio correspondiente al articulo; pero en varias situaciones, necesito poder cambiar ese precio que me trae el buscarv; por otro que pacto en el momento con el cliente.

¿Me podrían ayudar?

Mi código:

Private Sub cmdtotal_Click()

Dim Producto As Variant
Dim Rango As Range
Dim Precio As Variant

Set Rango = Sheets("REGISTRO DE VENTAS").Range("AA6:AB2000")

Precio = Me.comprod.Value

Producto = Application.WorksheetFunction.VLookup(Precio1, Rango, 2, 0)

With Me

.txtvru.Value = Producto
End With

End Sub

1 respuesta

Respuesta
2

¿Quieres capturar un nuevo valor en el textbox txtvru y regresar ese dato a la hoja?

Si es así, pon el siguiente código en un botón:

Private Sub CommandButton1_Click()
  Dim Rango As Range, f As Range
  '
  Set Rango = Sheets("REGISTRO DE VENTAS").Range("AA6:AB2000")
  Set f = Rango.Find(Precio1, , xlValues, xlWhole)
  If Not f Is Nothing Then
    f.Offset(, 1).Value = txtvru.Value
  End If
End Sub

No me ha servido mucho.. tené en cuenta que solo soy una aficionada... no tengo fuertes conocimientos.. soy más bien autodidacta.. (de hecho ya me has ayudado hace un par de años con otro archivo)
Lo que tengo acá puntualmente, es un formulario para registrar ventas... donde podemos ingresar hasta 4 productos.. cuando hacemos click en el botón "totalizar venta" suceden 3 cosas...

  1. El textbox Valor U. de cada línea, se completa mediante un vlookup el precio correspondiente del producto.
  2. El label "subtotal" de cada línea multiplica la cantidad por cada valor unitario.
  3. El label, que esta al lado del botón totalizar venta, suma todos los subtotales y nos da el total de la venta.

Lo que necesito, es poder modificar el precio del valor u de cualquiera de las líneas.. actualmente me deja modificarlo, pero cuando vuelvo a presionar el botón "totalizar" me devuelve nuevamente el valor que le corresponde según el vlookup.

(Espero haber podido explicarme bien) GRACIAS!

Lo que necesito, es poder modificar el precio del valor

No entiendo en dónde quieres modificar el precio, ¿directamente en el textbox? ¿O quieres que la hoja se actualice con el precio que captures en el textbox?

Puedes poner tu código completo. TODO el código de tu userform


Recomendación.

El VALOR U de cada producto, debes buscarlo cada que cambies el dato en el combobox1.

El botón Totalizar solamente debería realizar la suma.


Pon aquí una imagen con datos genéricos de tus hojas, con una muestra de datos de 4 ó 5 renglones. Procura que se vean las filas y las columnas de excel y el nombre de la hoja.

Hola... gracias por tus respuestas.. no.. no necesito que los datos de la hoja se actualicen con el precio que se cargue en el textbox. Quizá la lógica que utilice en los códigos que pude hacer, no sean los más adecuados.. seguramente se podrían hacer de otra manera..
Mi archivo tiene una hoja con un formulario, en el que se registran las ventas.. es el formulario que te pase en la imagen anterior.
El VALOR U de cada producto se completa en txtvru1, txtvru2, txtvru3, y txtvru4 respectivamente, cada vez que escojo un producto en los combobox comprod1, comprod2, comprod3, y comprod4.; esto ocurre cada vez que activo el boton "totalizar venta" (quisiera que se completaran ni bien termino de colocar el nombre del producto en el combobox, pero no lo conseguí).

El problema al que me enfrento, por ejemplo, es que hay productos como "vacunas", "cirugias" y otros que no tienen un precio exacto definido, porque varia según el caso, o el peso del animal, y otras variantes.. Entonces lo que se sucede, es que si hoy elijo el articulo Cirugía.. se completa el VALOR 1, con $3000... pero tengo la necesidad de que esa cirugía tenga un valor de $5000... en el formulario, tengo la oportunidad de colocar el numero 5000 en lugar de los 3000.. pero cuando totalizo la venta con el botón.. ese numero 5000 que escribí manualmente, se cambia a 3000... porque el botón toalizar, tal como dice la macro del vlookup, devuelve el precio estipulado para ese producto.

Para más información.. el formulario, tiene también los botones, "efectivo", y "tarjeta" y lo que hacen esos botones es trasladar los datos cargados en el formulario, en una tabla de registro de ventas, para un análisis posterior.

Esta la imagen de la hoja donde se activa el formulario:

No se ven las filas y las columnas en la imagen.

Envíame el archivo y te ayudo con todo el código. Te explico cada cambio para que vayas aprendiendo

Mi correo [email protected]

Prueba el siguiente código en tu formulario: "formvtasaurora"

Option Explicit
Dim sh As Worksheet
'
Private Sub cmdtotal_Click()
  'codigo para totalizar
  lblsubt1 = Val(txtcant1) * Val(txtvru1)
  lblsubt2 = Val(txtcant2) * Val(txtvru2)
  lblsubt3 = Val(txtcant3) * Val(txtvru3)
  lblsubt4 = Val(txtcant4) * Val(txtvru4)
  lbltotal = Val(lblsubt1) + Val(lblsubt2) + Val(lblsubt3) + Val(lblsubt4)
End Sub
'
'CODIGO PARA ACTUALIZAR EL VALOR U
Private Sub comprod1_Change()
  Call Pon_Valor_U(1)
End Sub
Private Sub comprod2_Change()
  Call Pon_Valor_U(2)
End Sub
Private Sub comprod3_Change()
  Call Pon_Valor_U(3)
End Sub
Private Sub comprod4_Change()
  Call Pon_Valor_U(4)
End Sub
Sub Pon_Valor_U(n As String)
  Dim f As Range
  Controls("txtvru" & n).Value = ""
  If Controls("comprod" & n).ListIndex = -1 Then Exit Sub
  Controls("txtvru" & n).Value = sh.Range("AB" & Controls("comprod" & n).ListIndex + 6)
End Sub
'
'CARGAR LOS COMBOBOX
Private Sub UserForm_Initialize()
  Dim sProd As String
  Txtfecha = Date
  Set sh = Sheets("REGISTRO DE VENTAS")
  sProd = "'" & sh.Name & "'!AA6:AA" & sh.Range("AA" & Rows.Count).End(3).Row
  comprod1.RowSource = sProd
  comprod2.RowSource = sProd
  comprod3.RowSource = sProd
  comprod4.RowSource = sProd
End Sub
'
'LIMPIA LOS CONTROLES
Private Sub cmdborrar_Click()
  Dim i As Long
  For i = 1 To 4
    Controls("comprod" & i) = ""
    Controls("txtvru" & i) = ""
    Controls("lblsubt" & i) = ""
    Controls("txtcant" & i) = "1"
  Next
  lbltotal = ""
  Txtfecha = Date
End Sub
'
Private Sub cmdpagoefvo_Click()
  Dim fila As Long
  fila = Application.WorksheetFunction.CountA(Range("C:C")) + 5
  Cells(fila, 2).Value = Me.Txtfecha.Value
  Cells(fila, 3).Value = Me.comprod1.Value
  Cells(fila, 4).Value = Me.txtcant1.Value
  Cells(fila, 5).Value = Me.txtvru1.Value
  Cells(fila, 7).Value = Me.comprod2.Value
  Cells(fila, 8).Value = Me.txtcant2.Value
  Cells(fila, 9).Value = Me.txtvru2.Value
  Cells(fila, 11).Value = Me.comprod3.Value
  Cells(fila, 12).Value = Me.txtcant3.Value
  Cells(fila, 13).Value = Me.txtvru3.Value
  Cells(fila, 15).Value = Me.comprod4.Value
  Cells(fila, 16).Value = Me.txtcant4.Value
  Cells(fila, 17).Value = Me.txtvru4.Value
  Cells(fila, 19).Value = Me.lbltotal
  'Registra y graba los datos de las ventas con pago en efectivo
  Unload Me
End Sub
'
Private Sub cmdtarjeta_Click()
  Dim fila As Long
  fila = Application.WorksheetFunction.CountA(Range("C:C")) + 5
  Cells(fila, 3).Value = Me.comprod1.Value
  Cells(fila, 4).Value = Me.txtcant1.Value
  Cells(fila, 5).Value = Me.txtvru1.Value
  Cells(fila, 7).Value = Me.comprod2.Value
  Cells(fila, 8).Value = Me.txtcant2.Value
  Cells(fila, 9).Value = Me.txtvru2.Value
  Cells(fila, 11).Value = Me.comprod3.Value
  Cells(fila, 12).Value = Me.txtcant3.Value
  Cells(fila, 13).Value = Me.txtvru3.Value
  Cells(fila, 15).Value = Me.comprod4.Value
  Cells(fila, 16).Value = Me.txtcant4.Value
  Cells(fila, 17).Value = Me.txtvru4.Value
  Cells(fila, 20).Value = Me.lbltotal
  'Registra y graba los datos de las ventas con pago con TC
  Unload Me
End Sub
'
Private Sub cmdcerrar_Click()
  End
End Sub

Todavía se pueden hacer otras mejoras. Pero empieza a jugar un poco con tu formulario para que veas el funcionamiento.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas