Excel peut être votre nouveau coach sportif en utilisant une fonctionnalité bien précise du VBA.

S'occuper pendant le confinement
Comme chacun d'entre nous, le temps est bien long et après avoir nettoyé ma salle de bains pour la 5e fois, je ne ne savais plus comment m'occuper. Et puis, je me suis rappeler d'une fonctionnalité très peu utilisée d'Excel ; faire parler Excel (si si, c'est possible)
Il est vrai que faire parler Excel dans un bureau, c'est peut-être amusant une ou deux fois mais très vite cela va agacer vos collègues 😤😡
Mais depuis chez vous, cette fonctionnalité peut être très utile pour faire des exercices physiques ou des jeux avec vos enfants 💪👍 Je vous montre tout cela dans cet article.
Vidéo de présentation de l'exercice
Ce que nous allons faire un exercice très courant au tennis ou au ping-pong c'est de venir toucher des verres qui représente un carré.
Et Excel dans tout ça ?
Et bien c'est Excel qui va nous annoncer le numéro du verre à toucher 😉
Nous allons créer un programme (une macro) qui va énoncer de façon aléatoire un numéro de 1 à 4 avec une seconde de délai entre chaque numéro.
Conception du programme
Le programme repose sur seulement 4 aspects
- Créer un nombre aléatoire entre 1 et 4
- Convertir ce nombre en chaîne de caractères
- Demander à Excel de prononcer ce mot
- Recommencer la séquence un nombre de fois défini
Pour apprendre à programmer en VBA, je vous recommande cet ouvrage.
Gérer un nombre aléatoire
Créer un nombre aléatoire est assez simple a réaliser. L'instruction Rnd (pour random en anglais) va créer un nombre aléatoire entre 0 et 1 (1 exclu).
Maintenant, en multipliant cette fonction Rnd par 4, nous allons avoir un nombre en 0 et 3,99999.
Puis, grâce à la fonction Int (Integer ou Entier), nous n'allons conserver que la partie entière du nombre aléatoire soit 0, 1, 2 ou 3.
Il ne reste plus qu'à rajouter la valeur 1 au résultat obtenu pour avoir un nombre aléatoire entre 1 et 4.
NbreAlea = Int(Rnd() * 4) + 1
Spécificité du VBA pour les nombres aléatoires
Seulement, cette instruction n'est pas suffisante. En effet, en VBA, il faut "forcer" le recalcul aléatoire avec l'instruction Randomize.
Sans cette instruction, il y a un risque que la séquence aléatoire se répète.
Convertir les chiffres en chaînes de caractères
Maintenant, il est important de convertir le chiffre trouver en chaîne de caractères. En effet, la commande qui permet de faire parler Excel doit avoir comme paramètre une chaîne de caractères (String en anglais) et pas un chiffre.
Pour cela, nous allons faire appel à la fonction CHOISIR d'Excel mais depuis le VBA. Pour cela, il faut utiliser l'instruction Application.WorksheetFunction.Choose
Ensuite, il faut écrire les paramètres exactement de la même façon qu'avec la fonction CHOISIR. Soit
Application.WorksheetFunction.Choose(NbreAlea, "un", "deux", "trois", "quatre")
Faire parler Excel
Pour demander à Excel de prononcer une phrase, il suffit de passer la phrase en paramètre de la méthode Application.Speech.Speak
Application.Speech.Speak TextNumber
Intégrer une temporisation
Tout est presque parfait. Il faut juste intégrer une temporisation d'une seconde pour nous laisser le temps d'atteindre le verre 😉 Ici, nous allons intégrer une pause d'une seconde après chaque mot prononcé avec l'instruction
Application.Wait (Now + TimeValue("00:00:01"))
Répéter la séquence plusieurs fois
Une fois que cette séquence est construite, il suffit d'insérer ces instructions dans une boucle For ... Next pour répéter ces instructions autant de fois que vous le souhaitez
Le programme complet
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
Comment intégrer le code ?
Pour faire fonctionner ce code, il faut le copier dans le visual basic editor
- Ouvrez un nouveau classeur Excel
- Ouvrez le visual basic editor avec le raccourci-clavier Alt + F11
- Ajouter un nouveau module



- Coller le code dans le module



- Fermer le VBA
Lancer la macro
- Depuis Excel, appuyer sur les touches Alt + F8
- Appuyer sur le bouton Exécuter



Jamais 2 fois le même nombre
Une variante intéressante du code c'est de ne jamais répéter 2 fois le même nombre à la suite. Pour cela, il faut rajouter un simple test lors de la génération du nombre aléatoire pour vérifier que le précédent nombre n'est pas égal au nouveau.
Sub Sport() Dim i As Long Dim RndNumber As Long Dim TextNumber As String Dim QteNombrePrononce As Long Dim NombrePrecedent 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