Activer et utiliser les voix Paul et Julie (OneCore) dans VBA avec SAPI 5
Bonjour a tous
une demande a été faite ces derniers jour juin 2025) sur le fait de pouvoir utiliser une autre voix française en vba
en 2014 sur DVP j'avais fait un tutoriel sur comment installer et utiliser la voix virginie ou autres dans windows 7 64 pour une utilisation dans excel 2007 32 bits en vba
vous trouverez ce tutoriel ici(pour ceux qui l'utilisent encore)
[Toutes versions] Installer la voix de virginie sur W 7 64 bits et avoir le speech speak en francais dans vba - Contribuez
apre m'ettre amuser avec la voix de Google je me suis interessé a l'environnement Windows je trouvais dommage que la voix de virginie ne soit pas utilisable en 64 bits en fait il y a une astuce pour que ca
www.developpez.net
la demande récente concerne windows 10
Windows 10 contient par défaut 3 voix françaises
- Hortense compatible (onecore et Sapi 5)
- Paul compatible (onecore donc innaccessible avec Sapi 5)
- Julie compatible (onecore donc innaccessible avec Sapi 5)
sauf qu'en fait pour pouvoir les utiliser avec le speech en vba
il suffit de créer les tokens(cle de registre)
bref exactement la même astuce qu'avec windows 7 et la voix virginie
je viens vous montrer aujourd'hui comment on fait
tout d’abord un test simple pour voir si ces voix sont réellement dispos dans windows 10
certaines config peuvent avoir été restreinte(pc professionnels etc...)
rendez vous donc dans
Paramètres → Heure et langue → Voix
et la vous pouvez sélectionner la voix de votre choix
normalement vous devriez avoir les 3 voix
testez les les 3 avec le bouton test
si ça fonctionne
ca veux dire que les trois voix fonctionnent
il nous reste plus qu'a faire le pont avec le com SAPI 5
pour cela on prend les mêmes et on recommence on va créer les clés de registre
les tokens pour les voix de Julie et Paul
pour cela nous allons créer un fichier ".reg" et nous allons lui mettre ceci a l’intérieur
ce n'est que l'ajout des clé tokens manquantes
Enregistrez le par exemple
Enregistrez sous : ajout_voix_sapi.reg
(sur votre bureau ou ailleurs)et conservez le au cas ou voudriez le refaire sur un autre pc
voila (je vous l'avez dit c'est plus simple que Windows 7 et office 2007)
Il ne vous reste plus qu'a exécuter ce reg pour qu'il aille inscrire les clés dans le registre
une fois cela fait,désormais les 3 voix sont disponibles pour sapi 5 en vba
dans l'exemple de code ci dessous nous allons lister dans la console les voix disponibles pour vérifier qu'elle le sont bien pour Sapi 5 en vba
VB:
Sub TestVoixFR()
Dim voix As Object, token As Object
Set voix = CreateObject("SAPI.SpVoice")
For Each token In voix.GetVoices
Debug.Print token.GetDescription
Next
End Sub
bien on est bon mes voix sont dispos
et bien on peut désormais les utiliser avec SAPI 5 en vba
exemple mode débutant quand on connait pas les cle de registre
VB:
Option Explicit
Sub toutlemondeditbonjour()
Dim voix1 As Object
Dim voix2 As Object
Dim voix3 As Object
Dim lavoix1 As String
Dim lavoix2 As String
Dim lavoix3 As String
Dim voixDisponible As Object
Dim trouve(1 To 3) As Boolean
lavoix1 = "hortense"
lavoix2 = "Paul"
lavoix3 = "Julie"
' Créer les objects SAPI.SpVoice pour les 3 voix
' voix 1 "hortense"
Set voix1 = CreateObject("SAPI.SpVoice")
voix1.Volume = 100 'pour le volume de 0 à 100
voix1.Rate = 0 ' pour la vitesse d'élocution de -10 à 10
'recherche de la voix hortence
trouve(1) = False
For Each voixDisponible In voix1.GetVoices
If InStr(1, voixDisponible.GetDescription, lavoix1, vbTextCompare) > 0 Then
Set voix1.voice = voixDisponible
trouve(1) = True
Exit For
End If
Next
If trouve(1) = False Then MsgBox "la voix de " & lavoix1 & "n'est pas disponible"
'voix 2 "Paul"
Set voix2 = CreateObject("SAPI.SpVoice")
voix2.Volume = 100 'pour le volume de 0 à 100
voix2.Rate = 0 ' pour la vitesse d'élocution de -10 à 10
' Parcourir les voix disponibles pour chercher "Hortense"
trouve(2) = False
For Each voixDisponible In voix2.GetVoices
If InStr(1, voixDisponible.GetDescription, lavoix2, vbTextCompare) > 0 Then
Set voix2.voice = voixDisponible
trouve(2) = True
Exit For
End If
Next
If trouve(2) = False Then MsgBox "la voix de " & lavoix2 & "n'est pas disponible"
'voix 3 "Julie"
Set voix3 = CreateObject("SAPI.SpVoice")
voix3.Volume = 100 'pour le volume de 0 à 100
voix3.Rate = 0 ' pour la vitesse d'élocution de -10 à 10
' Parcourir les voix disponibles pour chercher "Hortense"
'recherche de la voix Julie
trouve(3) = False
For Each voixDisponible In voix3.GetVoices
If InStr(1, voixDisponible.GetDescription, lavoix3, vbTextCompare) > 0 Then
Set voix3.voice = voixDisponible
trouve(3) = True
Exit For
End If
Next
If trouve(3) = False Then MsgBox "la voix de " & lavoix3 & "n'est pas disponible"
' speak de tout ce petit monde
If trouve(1) Then voix1.Speak "Bonjour, je suis Hortense "
If trouve(2) Then voix2.Speak "Bonjour, je suis Paul "
If trouve(3) Then voix3.Speak "Bonjour, je suis Julie "
End Sub
Maintenant le mode expert avec les tokens de cle de registre
c'est simplement une écriture différente
on constate que les méthodes du com Sapi 5(aujourd'hui version 5.4) ont un peu changé par rapport a Windows 7
et que l’accès au token se fait avec le membre ".SpObjectToken" de Sapi contrairement a avant ou on le faisait en string directement par getvoice
VB:
Sub toutlemondeditbonjour2()
Dim voix1 As Object, voix2 As Object, voix3 As Object
Dim token1 As Object, token2 As Object, token3 As Object
Set voix1 = CreateObject("SAPI.SpVoice")
Set voix2 = CreateObject("SAPI.SpVoice")
Set voix3 = CreateObject("SAPI.SpVoice")
Set token1 = CreateObject("SAPI.SpObjectToken")
On Error Resume Next
token1.SetId "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Speech\Voices\Tokens\TTS_MS_FR-FR_HORTENSE_11.0"
If Err.Number <> 0 Then
MsgBox "Erreur : voix introuvable ou nom incorrect", vbExclamation
Exit Sub
End If
Err.Clear: On Error GoTo 0
Set token2 = CreateObject("SAPI.SpObjectToken")
On Error Resume Next
token2.SetId "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Speech\Voices\Tokens\MSTTS_V110_frFR_PaulM"
If Err.Number <> 0 Then
MsgBox "Erreur : voix introuvable ou nom incorrect", vbExclamation
Exit Sub
End If
Err.Clear: On Error GoTo 0
Set token3 = CreateObject("SAPI.SpObjectToken")
On Error Resume Next
token3.SetId "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Speech\Voices\Tokens\MSTTS_V110_frFR_JulieM"
If Err.Number <> 0 Then
MsgBox "Erreur : voix introuvable ou nom incorrect", vbExclamation
Exit Sub
End If
Err.Clear: On Error GoTo 0
Set voix1.voice = token1
Set voix2.voice = token2
Set voix3.voice = token3
voix1.Speak "Bonjour, je suis Hortense"
voix2.Speak "Bonjour, je suis Paul"
voix3.Speak "Bonjour, je suis Julie"
End Sub
voila les voix Julie et Paul étant quand même beaucoup plus réalistes ,cette astuce peut donc apporter
une amélioration sur des messages vocaux par exemple
bon speech
le tutoriel en pdf ici
prochaine mise a jour créer un fichier wave avec une discussion entre hortense Julie et paul
Patrick
- Auteur
- patricktoulon
- Version
- 1.0