Traduction par macro VBA avec IE translate
Bonjour chers passionnés !!
Je cherche un moyen par macro VBA pour traduire des verbatims rédigés en différentes langues, présents dans un fichier excel. L'idée serait de collecter les cellules à traduire une a une de mettre le texte dans Internet Explorer translate, de récupérer la traduction et de mettre le texte obtenu dans une cellule voisine de la cellule de départ.
J'ai trouvé un vieux post de 2017 (https://forum.excel-pratique.com/viewtopic.php?t=100171) proposant une méthode qui me convient à merveille, mais la macro ne fonctionne pas et s'arrête sur :
'Passer le texte dans la zone à traduire
Set Element = IE.Document.getElementById("source")
Voici le code erreur que j'obtiens en faisant tourner la macro: erreur d'exécution -2147467259 (800004005) La méthode 'document' de l'objet 'IWebBrowser2 a échoué
j'ai débugé une ligne :
'attente du chargement complet
Do Until IE.ReadyState = 4: DoEvents: Loop
Modifié en :
'attente du chargement complet
Do Until IE.ReadyState = Readystate_Complete
DoEvents
Loop
Je vous mes le code complet :
Public Sub Traduction()
Dim IE As Object
Dim Plage As Range
Dim Cel As Range
Dim I As Long
Dim Chaine As String
'ouverture d'Internet Explorer
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True 'le rend visible
IE.Navigate "http://translate.google.com/#en/fr" 'fr/en<--inverser si traduction Français/Anglais
'attente du chargement complet
Do Until IE.ReadyState = 4: DoEvents: Loop
'défini la plage sur la colonne A de la feuille "Feuil1" à partir de A1, adapter...
With Worksheets("Feuil1"): Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
'début de la traduction
For Each Cel In Plage
I = I + 1
Chaine = Traduire(Cel.Value & "FinTexte" & I, IE, "FinTexte" & I)
'résultat en colonne B
Cel.Offset(, 1).Value = Replace(Chaine, "FinTexte" & I, "")
Next Cel
IE.Quit
Set IE = Nothing
End Sub
Function Traduire(Texte As String, IE As Object, FinTexte As String) As String
Dim Element As Object
Dim Chaine As String
Dim TblResult
Dim Transl_Text
Dim TxtResultat As String
Dim I As Integer
Dim Fin As Boolean
Dim Debut As Double
'Passer le texte dans la zone à traduire
Set Element = IE.Document.getElementById("source")
Element.Value = Texte
'Attente traduction. Sortir de la boucle dès que la balise est trouvée
Fin = False
Do While Fin = False
'effectue une pause de 1/2 seconde, tester sans pause si les textes ne sont pas trop longs !
Debut = Timer
Do While Timer < Debut + 0.5: DoEvents: Loop
Chaine = IE.Document.getElementById("result_box").innerHTML
If InStr(1, Chaine, FinTexte, 1) > 0 Then Fin = True
Loop
TblResult = Split(Chaine, ">")
For I = 0 To UBound(TblResult)
If InStr(1, TblResult(I), "</", 1) > 0 Then
TxtResultat = TxtResultat & " " & Split(TblResult(I), "</")(0)
End If
Next I
Traduire = TxtResultat
Set TblResult = Nothing
End Function
Ne connaissant vraiment rien aux liens entre VBA et pages internet, si quelqu'un pouvait m'aider se serait magnifique !
A vous lire très vite et merci d'avance !!
Merci Jean Eric pour ton aide, le lien qui est dans le fichier à télécharger est très utile, mais il faudrait que je regarde comment faire malheureusement pour ne pas avoir une langue pré-sélectionnée dans le code. Là c'est pour traduire tous ce qui est en français par défaut en anglais par défaut.
Mon fichier est un fichier évolutif en 8 ou 9 langues différentes (du russes au turc en passant par le portugais l’allemand, l'italien, l’espagnol et autres pays de l'est....) dont les positions ne sont pas connues à l'avance...
A+