Saltar al contenido

Simulaciones genéticas VBA: usar UserForm para pasar variables a una macro y ejecutarla

publicado

Hola a todos,

sigo con mis macros para simulaciones genéticas. La última que he escrito permite simular el cruce de dos poblaciones. Para ejecutarse necesita que el usuario proporcione información (elegir de entre las poblaciones creadas cuáles son las dos poblaciones a cruzar, cuántos descendientes de cada genotipo se quieren obtener y cómo se va a llamar la nueva población). A parte, se deben de hacer dos comprobaciones previas a la ejecución de la macro (que las dos poblaciones a cruzar tengan el mismo número de genotipos y que no se elija por error dos veces la misma población). Creo que lo más adecuado es utilizar un UserForm para recabar esta información del usuario. El problema es que no se usarlos bien y no se como pasar a la macro las variables que recogen esta información del usuario desde el UserForm. Adjunto un archivo comprimido. En el archivo hay varias hojas. Las dos primeras (Poblaciones y Caracteres) son las que utilizo para generar poblaciones y asignar características a los genotipos respectivamente. La idea es que la macro acabe ejecutándose al pulsar un boton (Cruzamientos específicos) que hay en la hoja Poblaciones. Para comprobar que la macro (Cruzar2Poblaciones, que está en el módulo Reproducción) se ejecuta correctamente he añadido dos poblaciones de ejemplo (HT_P1 y HT_P2) con 5 genotipos cada una. En la macro se han especificado los nombres de estas hojas para trabajar con ellas, pero la idea es que esta información se elija en el UseForm. Para ejecutar la macro, de momento, hay que hacerlo desde la ventana de ejecución de macros no desde el botón. He añadido otra hoja de ejemplo (c3) que es el resultado de aplicar la macro a las dos poblaciones anteriores. En este ejemplo, como lo que queria eran 3 descendientes/genotipo al cruzar las dos poblaciones iniciales, lo que la macro ha hecho es generar 2 pares de gametos/genotipo, generar una nueva hoja de población (c3) y pegar en ella los gametos que ha "cortado" previamente de las dos poblaciones iniciales para la dar la tercera. Finalmente borra en las poblaciones de partida el juego de gametos no usado. La macro funciona bien a falta de añadir la funcionalidad del UserForm. Este (Seleccionar2PoblacionesCruce) lo he empezado a diseñar pero me falta el codigo necesario para que funcione en conjunto con la macro (esto es lo que no se hacer). También me gustaría saber como puedo proteger las dos hojas principales (Poblaciones y Caracteres) para que los usuarios no puedan borrarlas accidentalemente. El fichero es:

https://1drv.ms/u/s!ArSI6ZjR1bGVlNQLYTkasQUbmiR-4A

Espero vuestros cometarios y gracias por vuestra atención. Como la idea principal sigue sindo aprender, se agradecerá mucho cualquier comentario que mejore o simplifique lo que he hecho (seguro que se os ocurren cosas).

PD: En el archivo hay otras macros, si tal como está resulta confuso, decidmelo e intento eliminar cosas.

PD2: @Antoni, espero que te guste como va quedando, he hecho algunas modificaciones a contribuciones anteriores tuyas (creo que no he estropeado nada).

Featured Replies

publicado

Solo para que quede constancia, con tu último archivo y sin tocar nada, he probado con las poblaciones HT_P1 y HT_C5 y 4 descendientes: 44 segundos. :)

publicado

Saludos amigos, yo he seguido este tema desde que lo inicio el amgio @Salva Roselló, confirmo tambien que el proceso se ejecuta rápido (1 minuto cuando mucho), no se, pudieras probar colocar al principio de la macro Cruzar2Poblaciones

Application.EnableEvents = False

justo debajo de

Application.ScreenUpdating = False

y luego al fina de esa macro, colocar
Application.EnableEvents = True

justo debajo de

Application.ScreenUpdating = True

 

posiblemente algún complemeto que tengas está evaluando constantemente los cambios (eventos) en las hojas, y eso haga que la macro sea mucho mas lenta de lo normal

suerte,

publicado
  • Autor

Hola a todos,

@bigpetroman gracias por el interés y la sugerncia aunque no era un complemento de excel lo que estaba fastidiando. Ya lo he resuelto. Lo que estaba tocando las narices era otro programa que tengo instalado y que se carga al iniciar windows. Ha sido desactivarlo y Excel vuelve a volar. El ejemplo que venimos probando todos ultimamente ahora en mi ordenador se ejecuta en 25 segundos. Creo que me servirá de lección para no tener tantas cosas instaladas (en este caso el programita de marras ralentizaba la ejecución 120 veces). 

Lastima que lo he averiguado despues de desinstalar todos los complementos que teneia y volver a reinstalar Excel :wacko:.

Bueno , lo dicho, gracias a todos por el interés y la ayuda. Lamento importunaros con estas cosas.

publicado
Hace 13 minutos , Salva Roselló dijo:

Lastima que lo he averiguado despues de desinstalar todos los complementos que teneia y volver a reinstalar Excel :wacko:

Windows y sus cosas... -_-. Por curiosidad ¿Qué programa era?

publicado
  • Autor
Hace 56 minutos , Haplox dijo:

Windows y sus cosas... -_-. Por curiosidad ¿Qué programa era?

FastKeys. Es un automatizador de tareas repetitivas. Lo uso para añadir texto que repito mucho. Lo guardas y le defines una secuencia de pulsaciones de teclas, cuando detecta esa secuencia inserta el texto. Pero claro esta permanentemente escaneado lo que pasa. Con la ultima actualización han aparecido los problemas.

 

  • Silvia bloqueó este tema

Archivado

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