Saltar al contenido

Ayuda sobre función extraer relacionada con Macros


Recommended Posts

publicado

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

publicado

¿Y porqué no ingresas la matrícula directamente en lugar del ID o Tarjeta?

Déjame que piense una alternativa a lo que tienes.

publicado

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! 

publicado

Buenas JSDJSD! 

Vaya, esto es ya otro nivel! La idea es esa sí, por lo que deduzco que debería cambiar todo el sistema, verdad?? ?

Gracias a ti tambíen por la atención! 

publicado

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.

 

publicado

Madre mía que envidia me dais! 

Sigo atento, voy viendo qué es lo que mejor se me adapta y os voy comentando sobre la marcha!

Mil gracias!!

 

 

publicado

Sres. moderadores, el tema se ha dado por solucionado y no lo está. 

Corregir por favor el estado de la consulta. ?

publicado

Aquí te dejo el archivo prueba y consulta. Las imágenes las tienes en la carpeta img que debes tenerla en el mismo sitio que tengas el excel, es decir si el archivo lo tienes en el escritorio pues la carpeta también debes tenerla en el escritorio.

BD PARQUING Prueba 1.xlsm img.rar

publicado

Y no olvides nunca agradecer a quien te ayuda o intenta ayudar y en este foro la manera de agradecer es mediante el corazoncillo que hay en la parte inferior derecha.

Agradecimiento.gif

publicado

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! 

 

publicado

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!

 

publicado

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

publicado

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?

publicado

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!!

 

 

publicado

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!!

 

 

 

 

publicado

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!

 

publicado

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 ;-)

 

publicado
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:

 

 

publicado

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

 

Archivado

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

  • 109 ¿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
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Hola nuevamente. Por eso la importancia de lo que mencionas tú como "ruta relativa". Tal cual comentas, y aún sin llegar a algunos detalles importantes para ayudarte, en realidad tal cual te comenté le día miércoles, pues sí podías hacer como comentabas, era cosa de obtener los Id de Windows (como tú los llamas) y la ruta de OneDrive en casa usuario y eso sí se puede obtener con VBA y luego pasarlo a PQ, pero medio que te cerraste en que "PQ no puede trabajar con rutas relativas", cosa cierta pero siempre hay formas. Si SAP puede o no guardar en OneDrive o SharePoint, pues si está mapeado en la PC ¡claro que se puede! Pero bueno, creo que si te es útil tu propia propuesta ¡avanza con eso!
    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
    • Hola nuevamente, mi duda sigue siendo la ruta, o rutas, finales que quedan, esas que llamas "relativas"; igual por si acaso pon 3 o 4 de esas, tal cual son y/o se ven en el explorador de cada PC y, de ser posible, en cualquier otro "lado" en que las veas.
  • 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.