Excel puede ser tu nuevo entrenador deportivo utilizando una funcionalidad muy específica de VBA.
Vídeo de presentación del ejercicio.
Vamos a recrear un ejercicio muy común en el tenis o ping-pong; ir a tocar gafas dispuestas en un cuadrado
¿Cómo transformar Excel en un coach con VBA?
Es Excel el que nos dirá el número del vaso a tocar 😉
Crearemos un programa VBA que pronunciará aleatoriamente un número del 1 al 4 con un retraso de un segundo entre cada número.
Diseño de programa
El programa se basa en sólo 4 aspectos.
- Crea un número aleatorio entre 1 y 4
- Convierte este número en una cadena
- Pídele a Excel que pronuncie esta palabra
- Repetir la secuencia un número definido de veces.
Manejar un número aleatorio
Crear un número aleatorio es bastante sencillo de hacer.
- La instrucción Rnd (aleatorio en inglés) creará un número aleatorio entre 0 y 1 (1 excluido).
- Ahora, multiplicando esta función Rnd por 4, tendremos un número en 0 y 3,99999.
- Luego, gracias a la función Int. (Entero o Entero), solo mantendremos la parte entera del número aleatorio, ya sea 0, 1, 2 o 3.
- Todo lo que queda es suma el valor 1 al resultado obtenido tener un número aleatorio entre 1 y 4.
NúmeroAlea = Int(Rnd() * 4) + 1
Especificidad de VBA para números aleatorios
Sin embargo, esta instrucción no es suficiente. De hecho, en VBA, debes "forzar" el recálculo aleatorio con la instrucción Randomize.
Sin esta instrucción, existe el riesgo de que se repita la secuencia aleatoria.
Convertir números en cadenas
Ahora es importante convertir el número encontrado en una cadena. En efecto, el comando que permite hablar a Excel debe tener como parámetro una cadena de caracteres (Cordón en inglés) y no un número.
Para ello usaremos la función ELEGIR en Excel pero desde VBA. Para hacer esto, debe usar la instrucción Application.WorksheetFunction.Choose.
Luego, deberás escribir los parámetros exactamente de la misma forma que con la función ELEGIR. Cualquiera
Application.WorksheetFunction.Choose(NbreAlea, "uno", "dos", "tres", "cuatro")
Hacer que Excel hable
Para pedirle a Excel que pronuncie una oración, simplemente pase la oración como parámetro del método Aplicación.Voz.Hablar
Aplicación.Voz.Hablar Número de texto
Integrar un temporizador
Todo es casi perfecto. Solo necesitamos integrar un retraso de un segundo para darnos tiempo de alcanzar el vaso 😉 Aquí integraremos una pausa de un segundo después de cada palabra hablada con la instrucción.
Aplicación.Espere (Ahora + TimeValue("00:00:01"))
Repetir la secuencia varias veces.
Una vez construida esta secuencia, simplemente inserte estas instrucciones en un bucle Para...Siguiente para repetir estas instrucciones tantas veces como quieras
El programa completo
Sub Sport()
Dim i As Long
Dim RndNumber As Long
Dim TextNumber As String
Dim QteNombrePrononce As Long
QteNombrePrononce = 10 'Changer cette valeur pour jouer plus longtemps
Application.Speech.Speak "Prêt ?"
Application.Wait (Now + TimeValue("00:00:02"))
Application.Speech.Speak "Go"
For i = 1 To QteNombrePrononce
Randomize
If i = QteNombrePrononce Then
Application.Speech.Speak "Last One"
End If
NbreAlea = Int(Rnd() * 4) + 1
TextNumber = Application.WorksheetFunction.Choose(NbreAlea, "un", "deux", "trois", "quatre")
Application.Speech.Speak TextNumber
Application.Wait (Now + TimeValue("00:00:01"))
Next
End Sub
¿Cómo integrar el código?
Para que este código funcione, debes copiarlo en el editor visual basic.
- Abrir un nuevo libro de Excel
- Abra el editor visual basic con el Atajo de teclado Alt + F11
- Añadir un nuevo módulo

- Pega el código en el módulo.

- Cerrar VBA
Iniciar macro
- Desde Excel, presione las teclas Alt + F8
- Presione el botón realizar

Cómo depurar un programa VBA
Si tiene dificultades para encontrar el origen de sus errores en VBA, esta guía le explicará cómo utilizar el depurador.
Nunca dos veces el mismo numero
Una variación interesante del código es nunca repetir el mismo número dos veces seguidas. Para ello deberás añadir una prueba sencilla al generar el número aleatorio para comprobar que el número anterior no es igual al nuevo.
Sub Sport_2()
Dim i As Long
Dim RndNumber As Long
Dim TextNumber As String
Dim QteNombrePrononce As Long
QteNombrePrononce = 10 'Changer cette valeur pour jouer plus longtemps
Application.Speech.Speak "Prêt ?"
Application.Wait (Now + TimeValue("00:00:02"))
Application.Speech.Speak "Go"
For i = 1 To QteNombrePrononce
Randomize
Do
NbreAlea = Int(Rnd() * 4) + 1
Loop While NbreAlea = NombrePrecedent
NombrePrecedent = NbreAlea
TextNumber = Application.WorksheetFunction.Choose(NbreAlea, "un", "deux", "trois", "quatre")
Application.Speech.Speak TextNumber
Application.Wait (Now + TimeValue("00:00:01"))
Next
End Sub