Saltar al contenido

Ayuda sobre función extraer relacionada con Macros


Recommended Posts

Buenos días ,

Llevo días atascado en un problema relacionado con la función extraer datos. Tengo un nivel de excel muy básico así que cualquier ayuda será de mucho agredecer.

La cuestión es que he creado una base de datos excel para gestionar las entradas y salidas de un párquing. El funcionamiento es simple pero eficaz. Se introduce el número de tarjeta o id del conductor y mediante la fórmula extraer se recuperan el resto de datos suyos que le identifican a él y su vehículo (fotografía, nombre, cargo, matrícula del vehículo, marca, modelo, etc), de modo que te indica que está autorizado. En caso contrario, aparece la indicación no autorizado.

Estos datos a su vez se copian mediante una macro en otra hoja excel donde quedan todos registrados (día y hora de entrada, usuario, matrícula etc).

El problema es que algunos usuarios tiene autorizados hasta tres vehículos distintos (personal, el de la pareja, moto..). Es decir, que en la matriz de los datos tienen informados vehículo 1, vehículo 2 y vehículo 3.

Actualmente al ingresar su id, se recuperan únicamente los datos del vehículo 1, con lo cual no es eficaz si ese día el usuario acude al párquing con el vehículo 2 o 3.

Lo que necesitaría es que, cuando ingrese la id, apareciera en la celda un desplegable con los 3 vehículos de forma que pudiera escoger cuál es el que se corresponde.

En la matriz he conseguido poner en la misma celda los vehículos en un listado, pero cuando me extrae los datos únicamente me recupera el principal, no la lista entera.

Si en el momento de ingresar la id sólo aparece el vehículo principal, cuando se copian los datos de la entrada mediante la macro, únicamente se registra el vehículo 1.Por tanto, si ese día el vehículo es el 2 o el 3 el registro no es correcto.

Adjunto el libro por si puede ayudar.

Soy plenamente consciente que está lleno de errores pero soy muy novato. image.gif.d73ade1a04132a61f3b216d7326c1e3e.gifDe hecho, estoy seguro que las macros creadas, para los que entendéis, os van doler a los ojos (seguramente digo en 10 línias de código lo que se podría resumir en 1.., entre tantas otras aberraciones.. però bueno.. poco a poco. 

Muchísimas gracias de antemano, cualquier pequeña ayuda o idea será de mucho agredecer!

Saludos,

David

BD PARQUING.xlsm

Enlace a comentario
Compartir con otras webs

Hola Antoni, 

El tema de la matrícula es una una idea interesante, pero no resulta del todo práctico por un tema operativo. Tal y como está diseñada la entrada del parking, lo más rápido y cómodo es introducir el número de la tarjeta que el conductor muestra al entrar. En caso que se la haya olvidado está la opción de la ID. Es complicado visualizar la matrícula directamente desde la garita donde se lleva a cabo el control. 

Muchas gracias por tu ayuda! 

Enlace a comentario
Compartir con otras webs

No te preocupes luego te comparto el archivo y haces uso de el, haces las pruebas correspondientes y comentas , pero verás cuando el Maestro Antoni suba su propuesta seguro nos deja con la boca abierta a todos.

 

Enlace a comentario
Compartir con otras webs

Muchas gracias a los dos! (Ahora ya sé que tengo que darle al corazoncito :) 

Mañana en el trabajo lo pruebo JSD JSD, que aquí en casa con la versión del Mac no me va muy bien!

Antoni con gusto esperé tu aportación. Ojalá pudiera encontrar un modo para mantener la base de mi propuesta (que desde mi ignorancia me costó lo suyo jeje). 

Estamos en contacto! 

 

Enlace a comentario
Compartir con otras webs

Madre mía, me acaba de dar un vuelco al corazón! Es perfecto! y funciona!!

Muchísimas gracias por la aportación Antoni

Puedo preguntar cuál es más o menos el sistema para que funcione de este modo? Y ya puestos a preguntar, se puede editar el formato del formulario que sale para seleccionar la matrícula o hacer para que salga ubicado en una esquina de la pantalla?

Ya empezaba a ver la luz con la aportación de JSD JSD, al cual le sigo estando muy agradecido, pero ahora mismo..

¡Estoy emocionado!

 

Enlace a comentario
Compartir con otras webs

Cada vez que informas el TIP o la TARGETA se hace una búsqueda en la hoja USUARIS y se muestra en el formulario USERFORM1. Te he colocado el formulario a la derecha en la parte superior.

Esta es la macro que controla el tema y como tu comprenderás hace falta un nivel intermedio de VBA, que me da a mi que tu todavía no tienes. Hay varios manuales/tutoriales gratuitos en internet. Te dejo uno de ellos:

 Manual de VBA

Private Sub BuscarDades(Target As Range, Columna As Range): On Error GoTo EXITSUB
Dim Usuari As Range

Range("K10") = ""
Range("K12") = ""
Range("K14") = ""
Range("K16") = ""
Range("K18") = ""

Set Usuari = Columna.Find(Target, , , xlWhole)
If Not Usuari Is Nothing Then
   If Usuari <> "!" Then
      With UserForm1
         .Move Range("L1").Left, 0 '------- Controla la posición del formulario
         .TextBox1 = Sheets("USUARIS").Range("A" & Usuari.Row)
         .TextBox2 = Sheets("USUARIS").Range("D" & Usuari.Row)
         .TextBox3 = Sheets("USUARIS").Range("E" & Usuari.Row)
         .TextBox4 = Sheets("USUARIS").Range("F" & Usuari.Row)
         .TextBox5 = Sheets("USUARIS").Range("G" & Usuari.Row)
         If Sheets("USUARIS").Range("H" & Usuari.Row) <> "" Then .ListBox1.AddItem Sheets("USUARIS").Range("H" & Usuari.Row)
         If Sheets("USUARIS").Range("I" & Usuari.Row) <> "" Then .ListBox1.AddItem Sheets("USUARIS").Range("I" & Usuari.Row)
         If Sheets("USUARIS").Range("J" & Usuari.Row) <> "" Then .ListBox1.AddItem Sheets("USUARIS").Range("J" & Usuari.Row)
         .ListBox1.ListIndex = 0
         .Show
      End With
   End If
End If
EXITSUB:
End Sub

 

BD PARQUING (1).xlsm

Enlace a comentario
Compartir con otras webs

En efecto mi nivel es muy de principiante. De hecho no alcanzo a ver dónde está tu macro dentro del excel :-/ ni cómo acceder al formulario..

Tomo nota de tu link y me pongo las piles para aprender bien de inicio.

Dime, ¿cómo puedo agredeceros vuestra ayuda?

Enlace a comentario
Compartir con otras webs

Te dejo mis últimas dudas al respecto:

1.¿ Se podría ser que este mismo formulario de selección de matrícula solo emergiera en los casos que hay varias matrículas informadas y no apareciera en aquellos que solo hay una? (para dar mayor fluidez ya que la mayoría solo tienen un vehiculo).

2. ¿Cómo puedo ubicar el formulario en una zona concreta de la pantalla?

3. Cuando aparece el formulario con las varias matrículas, ¿sería possible que en el formulario solo aparecieran las matrículas para seleccionar y el resto de datos (nombre, cargo, etc) aparecieran directamente en las casillas de la pantalla?

Tal vez es mucho pedir y no quisiera abusar tus conocimientos.. pero es que estre pequeño proyecto personal lleva muchas hores de novato detrás y mucha ilusión.

Me habéis dado el empujón que me faltaba empezar a formarme como diós manda!!

 

 

Enlace a comentario
Compartir con otras webs

Madre mía! Esto es ya nivel sensei! Increíble!!

Por cierto, si protejo la hoja no me permite que emerja el formulario verdad?

Muchas muchas gracias! De verdad!! Lo único que me queda por decir que es si pasas por Bcn alguna vez me lo hagas saber que tienes una comida pagada!!

 

 

 

 

Enlace a comentario
Compartir con otras webs

Buenas tardes,

Antoni disculpa que te moleste de nuevo,

En este última modificación que me pasaste, tengo un problemilla, y es que tres seleccionar entrada o salida, no se borran los datos del usuario que se han importado.

No he sabido verlo en tu macro para subsanar eso.. :(

Por cierto, hay posibilidad de proteger la hoja y que siga saltando el userform? Es que si le doy a proteger para que no se modifiquen las celdas por error entonces no me sale..

Gracias de nuevo!

 

Enlace a comentario
Compartir con otras webs

Increíble! Veo que no hay nada que se te resista :)

Lo único que con esta modificación el "NO AUTORIZADO" me sale en blanco en lugar de rojo como antes, pero ya no pido más :)

Mil gracias por toda tu ayuda y colaboración, y lo dicho, si pasas alguna vez por Bcn recuerda que tienes una comida pagada ;-)

 

Enlace a comentario
Compartir con otras webs

Hace 1 minuto , DavidBF dijo:

A

En 12/5/2020 at 13:16 , Antoni dijo:

 

 

Hace 1 minuto , DavidBF dijo:

Apreciado Antoni, 

La cuestión es que estoy a un par de pasos de poder terminar ese pequeño proyecto que emprendí hace ya mucho,  pero pese las horas invertidas no logro desatascarme (de inicio pensé que me resultaría más sencillo pero claro está que se me ha complicado la cosa para mi escaso nivel). 

En relación a tus magníficas aportaciones, te comento lo siguiente, a ver si me puedes echar un último cable: 

1) NO logro indicar que cuando el vehículo no está autorizado me aparezca en fondo rojo (sólo consigo hacerlo si quito la protección de la hoja). 

2) Algunos usuarios en su número de TIP combinan letras y números. Ejemplo: AD1213. En estos casos, la búsqueda me la hace correctamente pero luego a la hora de copiar el registro de entrada o salida me salta un ERROR, y no consigo corregirlo. 

3) Para dar un poco de seguridad, es factible ubicar la hoja de "USUARIS" en otro libro, y éste a su vez guardarlo en una Unidad de red donde los usuarios no tiene acceso directo desde su perfil,? Podría la macro igualmente extraer los datos de allí para seguir funcionar correctamente? 

Perdona por molestarte en tantas ocasiones, tras este pequeño proyecto prometo empezar de 0 y formarme como Diós manda. 

Independientemente que me puedas seguir ayudando o no, si puedo compensarte de algún modo sólo tienes que decírmelo. 

Una vez más, muchas gracias!!

David. 

 

Hace 1 minuto , DavidBF dijo:

 

 

Enlace a comentario
Compartir con otras webs

Por supuesto! Disculpa pero es que como estaba el tema como resuelto no sabia si llegaba el mensaje :rolleyes:

1) El tema del color ya detecté la incidència, era un error tipográfico en que en lugar de "NO AUTORITZAT" puse " NO AUTORZIAT".

2) El segundo tambíen está resuelto. Cambié el formato de "As Long" por "As String".

3) Al tercero ya no llego..

Gracias por todo, sin nigún tipo de prisa espero a ver si le puedes echar otro ojito..

Saludos,

David

 

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Agradecido Antoni! Tus sugerencias me ayudaron mucho! Como pudiese hacerte llegar el archivo?
    • Prueba este código. Sin el archivo no te puedo ajustar más. Private Sub btnCargaBancos_Click() 'El tipo de dato debe especificase para cada variable Dim TasaCompra As Double, TasaVenta As Double, InvBanesco As Double, InvVzla As Double Dim MontoBanesco As Double, MontoVzla As Double, TasaDiaBan As Double, TasaDiaVzla As Double Dim TasaActual As Double 'Hay que comprobar que los textbox tienen contenido numérico 'Los datos numéricos solo pueden contener números y el separador decimal, cualquier otro caracter dará error al convertir If Not IsNumeric(txtInverBanesco) Or _ Not IsNumeric(txtInverVzla) Or _ Not IsNumeric(txtTasaCompra) Or _ Not IsNumeric(txtTasaVenta) Then MsgBox "Los datos deben ser numéricos", vbCritical Exit Sub End If InvBanesco = CDbl(txtInverBanesco) InvVzla = CDbl(txtInverVzla) TasaCompra = CDbl(txtTasaCompra) TasaVenta = CDbl(txtTasaVenta) 'Los datos de los divisores no pueden ser 0 (Indeterminación matemática) If TasaCompra = 0 Or _ InvBanesco = 0 Or _ InvVzla = 0 Then MsgBox "Los datos no admiten valor cero", vbCritical Exit Sub End If MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055) TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then TasaActual = TasaDiaBan Else TasaActual = TasaDiaVzla End If 'En VBA, los datos numéricos no admiten ser formateados, formatear directamente en las celdas, 'MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) 'MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) 'TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco = MontoBanesco txtBcoVenezuela = MontoVzla txtTasaDiaria = TasaActual End Sub  
    • Hola a ambos, @MarianoCruz, si con la respuesta de @Israel Cassales ya tienes resuelto el problema, perfecto. Punto final y a otra cosa. Pero piensa que tu archivo lleva vínculos externos, así que se hace difícil (prácticamente imposible) comprobar si las propuestas dadas ofrecen el resultado esperado. A tal efecto, te sugiero que vuelvas a subir otro archivo, esta vez insertando nuevas hojas que contengan los datos existentes en esos archivos externos.  Tal vez así se vea claro qué es lo que buscas conseguir, y se puedan hacer pruebas que verifiquen la bondad de el/los resultado/s. Tampoco iría mal que insertaras a mano qué resultado debe aparecer en la celda C3 en cada uno de los 3 casos: cuando se inserte 'XI', 'XL' o unos u otros números en los lugares apropiados. Así iremos totalmente sobre seguro acerca del método a emplear. Saludos,
    • Hi Trate de ver que hacían las fórmulas en cuestión pero a su libro le falta o le faltan hojas, por lo que solo podría participar con un par de ideas en general. Lo que entiendo es que según el valor de B3 en C3 debe poner una fórmula u otra, así que es posible que si combina DIRECCION() con INDIRECTO() pueda intercambiar de una fórmula a otra. =SI(B3="Xl",INDIRECTO(DIRECCION(3,5)),SI(O(B3=1,B3=2,B3=3),INDIRECTO(DIRECCION(4,5)),"")) Otra forma sería poner nombre a esas fórmulas en el cuadro de nombres para que las pueda mandar llamar a una o a la otra según el resultado de B3. Por favor tome en cuenta, es solo una idea.
    • Buenas tardes! Tengo el siguiente código: Private Sub btnCargaBancos_Click() Dim TasaCompra, TasaVenta As Double Dim InvBanesco, InvVzla, MontoBanesco, MontoVzla As Double Dim TasaDiaBan, TasaDiaVzla, TasaActual As Double 'Inversion = Val(txtInversion.Text) InvBanesco = Val(CDbl(txtInverBanesco.Text)) InvVzla = Val(CDbl(txtInverVzla.Text)) TasaCompra = Val(CDbl(txtTasaCompra.Text)) TasaVenta = Val(CDbl(txtTasaVenta.Text)) MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055)      TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then     TasaActual = TasaDiaBan Else     TasaActual = TasaDiaVzla End If MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco.Value = MontoBanesco txtBcoVenezuela.Value = MontoVzla txtTasaDiaria.Value = TasaActual End Sub   Como se puede apreciar InvBanesco ,  InvVzla , TasaCompra y TasaVenta, son valores que introduce el usuario a través de los respectivos cuadros de texto. Tengo los siguientes problemas: a. Las fórmulas no se ejecutan correctamente (pareciese que no reconociese los números entrados vía cuadros de texto). b. Al darle valor cero (0) a cualquiera de los valores de InvBanesco o  InvVzla, me genera un error en TasaDiaBan o TasaDiaVzla (según sea el caso), aunque, como se puede apreciar, debería generar un valor cero (0). Como dije en mi presentación estoy empezando en esto de la codificación...y quiero aprender de Uds! Agradezco su ayuda! Nota: lamentablemente el fichero es mas grande de lo permitido y no pude anexarlo.  
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.