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

    • buenas noches, quisiera saber si puedo mejorar mi macros que se encuentra en el evento change de la hoja de calculo de Excel, son códigos de cálculos básicos, además si me pudieran ayudar a reducir el código o darme algún tip para reducirlo yo mismo estaría muy agradecido.  de ante mano muchas gracias     Private Sub Worksheet_Change(ByVal Target As Range)     Application.ScreenUpdating = False     Application.Calculation = xlManual     Application.EnableEvents = False              If Not Intersect(Target, Range("$L$5:$Y$9")) Is Nothing Then             Sub todo()          Range("E22") = WorksheetFunction.Sum(Range("E4:E21"))     Range("E23") = WorksheetFunction.Sum(Range("E4:E19"))     Range("E24") = WorksheetFunction.Sum(Range("E23") - WorksheetFunction.Sum(Range("I4:I7")))     Range("i22") = WorksheetFunction.Sum(Range("I4:I21"))     Range("I4") = Range("E23") * 0.1     Range("I6") = Range("E23") * 0.0127     Range("I5") = Range("EN10") * Range("EN11")     Range("I7") = Range("E23") * 0.006     Range("I25") = Range("E22") - Range("I22")     Range("I12") = Range("E24") * 0.03     Range("C7") = WorksheetFunction.Sum(Range("EQ8") - (Range("EQ9"))) + Range("EN13") + Range("EN14") + Range("EN15") + Range("EN16")     'Range("E7") = WorksheetFunction.Sum(Range("C7") * ((Range("E4") * 0.0077777)))     Range("C9") = Range("EQ9") + Range("EN17") + Range("EN18") + Range("EN19")     'Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 1.3) * 1.5) * Range("C9")     'Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 0.3)) * (Range("C8"))     Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 1.3) * 1.5) * Range("C9")     Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 0.3)) * (Range("C8"))     Range("E7") = WorksheetFunction.Sum((((Range("E4") / Range("C4")) * 7) / 44) * 1.5) * Range("C7")          End Sub              End If                  Application.Calculation = xlAutomatic     Application.ScreenUpdating = True     Application.EnableEvents = True     End Sub
    • Buenas perdonad la espera adjunto el fichero Excel y explico mas detallado lo que me solicitan: Lo que me solicitan es que esos CP de la pestaña Casos de prueba los cuales tienen formulas para que cuando se copien y peguen junto a sus pasos el CP se va autoincrementando a 1,2,3 etc...., pero si copias ese CP bien solo con el primer paso o con todos sus  pasos y lo insertas entre dos CP no continua con la numeración, como se ve en la foto al hacer eso el CP insertado continua con la numeración CP2 y el de abajo pone también CP2 no se incrementa ni ese ni el valor de CU que hay a la derecha que también es incremental. Necesitaría que continuara con esa numeración aun insertándolo entre medio de 2 tanto el CP como el CU de la derecha. También me solicitan que el campo Ciclo 1 de la pestaña Resumen es auto incremental cuando copias y pegas va sumando 1, pero en las formulas referentes a Ok KO Y bloqueo al copiar y pegar se mantiene la misma formula , la idea es que cuando copies y pegues la fila donde están los ciclos se autoincremente Ciclo a 1,2,3,4 etc... y la formula de los campos OK,KO y Bloqueos se incremente también pasando de la columna I a la J  luego a la k etc... y que en Resultados Ciclo el numero de la formula también se incremente Resultados Ciclo 1 , 2 ,3 etc... que cambie la columna a la vez que el numero de Resultados Ciclo. Gracias por adelantado un saludo. Plantilla v3 Pruebas.xlsx  
    • Saludos amigos espero estén bien Estoy intentando hacer un formulario que me convierta unidades de masa sin embargo  en el mejor de los casos solo he podido lograr la conversión de una unidad a la vez en los TextBox 1, 3, 5, 7, 9, 11 y 13 y cuando lo logro el resultado que se copia  en la celda no se corresponde con el obtenido originalmente en el Textbox del Formulario (frmconv)  ejemplo al convertir 1900 Kg a Lb el resultado en el TextBox1 =4188,78298142 sin embargo al guardar el resultado lo que se copia en la Celda  "F11" es  418.878.298.142,00, adicionalmente el resultado de la conversión no se visualiza inmediatamente por lo que debo de hacer click en los TextBox 1, 3, 5, 7, 9, 11 y 13  para ver el resultado. Mucho les sabre agradecer la ayuda que me puedan brindar. PRUEBA.xlsm
    • Saludos a ambos. Copiar y pegar por sí solas, no tengo el conocimiento de que sirvan como "evento" para actualizar las referencias que buscas hacer, en la forma que lo quieres hacer, ó la fórmula como la quieres hacer. Te recomiendo abrir un tema similar en Macros, es posible que algún Maestro te de alguna idea. Por otro lado, si debe ser con funciones, entonces tendías que interactuar con COLUMNA() y FILA() para que al pegar el destino "sepa" donde está ubicado e intentar cambiar la referencia. =INDIRECTO(CARACTER(COLUMNA()+64)&FILA()) Algo como eso se podría usar para obtener el código ASCII de la letra de la columna (donde 65 es el código para “A”), y FILA() devuelve el número de la fila. La función CARACTER() convierte el código ASCII en una letra. Luego, INDIRECTO() toma la cadena resultante (por ejemplo, “A1”, “B2”, etc.) y la usa como una referencia de celda. En ese caso, una posible idea de editar tu ejemplo sería: =SI(INDIRECTO("'Casos de Prueba'!"&CARACTER(COLUMNA()+64)&"1")="Resultados Ciclo 1"; SI(CONTAR.SI(INDIRECTO("'Casos de Prueba'!"&CARACTER(COLUMNA()+64)&":"&CARACTER(COLUMNA()+64)); "OK")=0; 0; CONTAR.SI(INDIRECTO("'Casos de Prueba'!"&CARACTER(COLUMNA()+64)&":"&CARACTER(COLUMNA()+64)); "OK")); 0)   Enfatizo que es una idea, es muy probable que haya que editar. Así como esta su tema, la recomendación del maestro toma relevancia porque especular o deducir no es lo adecuado para intentar ayudar en este tipo de consultas. Por esta causa de mi parte por ejemplo no puedo aportar algo adicional.
    • En el ejemplo te he puesto 1 segundo para no hacer largo el gif, cámbialo a tu necesidad
  • 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.