Bienvenido a la mayor comunidad de usuarios EXCEL

Regístrate ahora y podrás: / 💪 Hacer preguntas a los expertos / ⬇️ Descargar ejemplos y plantillas / 🏅 Acceder a contenidos premium

Regístrate gratis

Macro para obtener un valor de una matriz

CELSOCAS

Member
Hola, TodoExcel:

Tengo un formulario y una tabla de datos donde voy registrando las facturas emitidas.

La cuestión se centra en el tema PRECIO. En la BBDD el precio final se obtiene de una matriz llamada CATÁLOGO: En vertical los CLIENTES y en horizontal los PRODUCTOS O SERVICIOS, el precio se obtiene del cruce de dichas variables, y si no hay cruce (por ser distinto cliente o distinto producto a los recogidos en la tabla “CATÁLOGO”), entonces el precio hay que ponerlo de forma manual en el Textbox” – Precio”.

Por Ejemplo: Para obtener con una macro el precio 90 del cruce entre el Cliente "EMILIO GAR" y el Producto "Ases. Lab. Trim."
¿Cual sería la macro que permitiese bajo 2 condiciones (Cliente, Producto) obtener el Precio?


PANTALLAZO FORMULARIO.jpg
1614018700054.png


A quien me pueda ayudar
 

CELSOCAS

Member
Ok.
Voy con ello.
Al abrir salen unos mensaje, pero no he dado importancia pues supongo que serán vínculos, por copiar y pegar en un archivo de prueba.
El Catálogo esta a la derecha del todo de la BBDA.
 

Adjuntos

  • FORMULARIO FACTURA.xlsm
    98,5 KB · Visitas: 1

Antoni

Well-known member
No he podido probar porqué hay nombres cuyo rango no coinciden con al archivo que has subido.
Más o menos sería así:
Código:
Private Sub Abreviatura_Change()
Dim Celda As Range
Precio = ""
Set Celda = Sheets("FACTURA").Columns("BB").Find(Cliente, , , xlWhole)
If Not Celda Is Nothing Then
   Precio = Celda.Offset(Abreviatura.ListIndex + 1)
End If
End Sub
 

CELSOCAS

Member
Perdona, estaba esperando el email de existencia de respuesta y no me apareció en el correo.
Haciendo pruebas no salia, pero simplemente era una coma en el offset:
Precio = Celda.Offset(, Abreviatura.ListIndex + 1) y ¡EURECA! Perfecto!
Muchísimas Gracias. Antoni
 

CELSOCAS

Member
Hola, Antoni
Solo requiere de un pequeño ajuste. Como el precio cruzado de la matriz depende del valor del Cajón Cliente y del Cajón Abreviatura, pues mientras introduzco un cliente, aunque este no esté definido en la matriz como nombre de campo de filas, ponga la abreviación que ponga el precio sale cero ¡Correcto!, pero si es al contrario, es decir, si pongo una abreviatura que no existe como nombre del campo de las columnas, pues entonces sale el nombre del penúltimo cliente. ¿Será porque toma como valor de índice de abreviatura el cero? ¿Cómo sería la solución?
 

Temas similares

Arriba