XL 2016 Traduire le contenu d'une cellule (Fr - En)

SebCam

XLDnaute Nouveau
Bonsoir à tous. Nouveau ici et débutant en VBA. Je cherche un moyen pour traduire une chaîne de caractères d'une cellule "B3" (Le chat mange) ouvrir google traduction pour effectuer la traduction, et récupérer la traduction dans la cellule voisine "D3". Merci de votre aide.
 

soan

XLDnaute Barbatruc
Inactif
=>Staple

SebCam a voulu dire que la traduction se fait bien dans Google Translate,
mais ensuite, le résultat de la traduction n'est pas copié dans la cellule
de destination de la feuille de calcul. :confused:

(mais là, j'peux pas aider, car j'connais pas le code VBA pour interagir avec Google ;
faudrait que VBA rapatrie dans une cellule Excel le résultat traduit par Google !)


soan
 

Staple1600

XLDnaute Barbatruc
Re

[précisions]
Voila ce qu'écrit patricktoulon (issu du lien du message#29)
j'utilisais justement la version mobile de translate de google parce qu'elle est restée longtemps inchangée
elle a a changée en octobre 2020
il faut que je m'y remette
ps:
je viens de regarder et effectivement ça ne sera plus possible même avec translate mobile
il faudra trouver un autre site ou utiliser IE mais là vu le temps d’exécution avec IE il n'est plus envisageable d'en faire une fonction pour cellules donc je le ferais pas
[/précisions]
C'est pour cela que je parlais de privilégier la fonctionnalité native d'Excel (car G..gle change la donne sans prévenir)
 

Staple1600

XLDnaute Barbatruc
Re

=>SebCam
J'ai testé ton fichier
J'ai le même bug.
Sans doute, parce que le code source de G..gle Translate a changé
depuis le 27/11/2017 (date de création du classeur joint)
Tout comme le code de patricktoulon ne fonctionne plus désormais
(sauf erreur de ma part)
 

SebCam

XLDnaute Nouveau
La page de saisie est telle :
La saisie est un essai.
1611706307562.png
 

Staple1600

XLDnaute Barbatruc
Re

Je viens de tester avec une fonction VBA similaire
(glanée sur un site anglophone)
Enrichi (BBcode):
Function transalte_using_vba(str) As String
' Tools Refrence Select Microsoft internet Control
    Dim IE As Object, i As Long
    Dim inputstring As String, outputstring As String, text_to_convert As String, result_data As String, CLEAN_DATA
    Set IE = CreateObject("InternetExplorer.application")
    '   TO CHOOSE INPUT LANGUAGE
    inputstring = "auto"
    '   TO CHOOSE OUTPUT LANGUAGE
    outputstring = "fr"
    text_to_convert = str
    'open website
    IE.Visible = False
    IE.navigate "http://translate.google.com/#" & inputstring & "/" & outputstring & "/" & text_to_convert
    Do Until IE.readyState = 4
        DoEvents
    Loop
    Application.Wait (Now + TimeValue("0:00:5"))
    Do Until IE.readyState = 4
        DoEvents
    Loop
    CLEAN_DATA = Split(Application.WorksheetFunction.Substitute(IE.Document.getElementById("result_box").innerHTML, "</SPAN>", ""), "<")
    For j = LBound(CLEAN_DATA) To UBound(CLEAN_DATA)
        result_data = result_data & Right(CLEAN_DATA(j), Len(CLEAN_DATA(j)) - InStr(CLEAN_DATA(j), ">"))
    Next
    IE.Quit
    transalte_using_vba = result_data
End Function
Et j'ai le même message d'erreur qu'avec ton fichier Excel.
(voir mots en rouge dans le code VBA ci-dessus)
Ce qui semble renforcer l'idée que désormais ce type de syntaxe ne fonctionne plus en 2021.
 

patricktoulon

XLDnaute Barbatruc
bonjour a tous
comme google a modifier sa page translate mobile ( que j'utilisais) avec l'app Googletranslate de la version pour pc, ma fonction translate par requete(plus rapide que IE) ne peut plus fonctionner elle est donc obsolète

j'utilise maintenant le site reverso

VB:
Sub test()
    MsgBox translate_FR_EN("bonjour a tous sur ExcelDownloads")
End Sub

Function translate_FR_EN(Texte)
    Dim req
    Set req = CreateObject("microsoft.xmlhttp")
    URL = "https://api.reverso.net/translate/v1/translation/"
    req.Open "get", URL, False
    req.SetRequestHeader "Accept", "application/json, text/javascript, */*; q=0.01"
    req.SetRequestHeader "Content-Type", "application/json; charset=utf-8"
    req.SetRequestHeader "Referer", "https://www.reverso.net/translationresults.aspx?lang=FR&direction=francais-anglais"
    req.SetRequestHeader "Accept-Language", "fr-FR"
    req.SetRequestHeader "Origin", "https://www.reverso.net"
    req.SetRequestHeader "Accept-Encoding", "gzip, deflate"
    req.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko/20100101 Firefox/22.0"
    req.SetRequestHeader "Host", "api.reverso.net"
    req.SetRequestHeader "DNT", 1
    req.SetRequestHeader "Connection", "Keep - Alive"
    req.SetRequestHeader "Cache-Control", "no-cache"
    req.send "{""input"":""" & Texte & """,""from"":""fra"",""to"":""eng"",""format"":""text"",""options"":{""origin"":""reversodesktop"",""sentenceSplitter"":true,""contextResults"":true,""languageDetection"":false}}"
     translate_FR_EN = Split(Split(req.responsetext, "translation"":[""")(1), Chr(34))(0)
End Function

bien entendu ca fonctionne en formule aussi formule de base :=translate_FR_EN(A2)
A2 contenant le texte a traduire bien évidemment
;)
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
et pour ceux qui voudrais d'autres langues
VB:
'italien:   ita
'anglais:   eng
'allemand:  ger
'espagnol:  spa
Sub test()
    MsgBox translate_In_Out("bonjour a tous sur ExcelDownloads", "fra", "spa")
End Sub

Function translate_In_Out(Texte, Optional LgIn$ = "fra", Optional LgOut$ = "eng")
    Dim req
    Set req = CreateObject("microsoft.xmlhttp")
    URL = "https://api.reverso.net/translate/v1/translation/"
    req.Open "get", URL, False
    req.SetRequestHeader "Accept", "application/json, text/javascript, */*; q=0.01"
    req.SetRequestHeader "Content-Type", "application/json; charset=utf-8"
    req.SetRequestHeader "Referer", "https://www.reverso.net/translationresults.aspx?lang=FR&direction=francais-anglais"
    req.SetRequestHeader "Accept-Language", "fr-FR"
    req.SetRequestHeader "Origin", "https://www.reverso.net"
    req.SetRequestHeader "Accept-Encoding", "gzip, deflate"
    req.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko/20100101 Firefox/22.0"
    req.SetRequestHeader "Host", "api.reverso.net"
    req.SetRequestHeader "DNT", 1
    req.SetRequestHeader "Connection", "Keep - Alive"
    req.SetRequestHeader "Cache-Control", "no-cache"
    req.send "{""input"":""" & Texte & """,""from"":""" & LgIn & """,""to"":""" & LgOut & """,""format"":""text"",""options"":{""origin"":""reversodesktop"",""sentenceSplitter"":true,""contextResults"":true,""languageDetection"":false}}"
      translate_In_Out = Split(Split(req.responsetext, "translation"":[""")(1), Chr(34))(0)
End Function
vous la retrouverez ici
 
Dernière édition:

SebCam

XLDnaute Nouveau
Re le fil,
J'ai fait de façon que la page web s'ouvre et effectue la traduction. Ainsi il ne reste plus qu'à sélectionner le contenu, et de le copier dans ma cellule Excel.
Mais je regarderai les éléments fournis par Patricktoulon, à qui je remercie d'avance de son apport d'éléments.
Je vous tiens au courant quant à mes utilisateurs aux doigts grippés.
A bientôt!
 

soan

XLDnaute Barbatruc
Inactif
Bonsoir @SebCam,

si tu utilises la solution du post #42 de @patricktoulon (salut), tu peux faire :

VB:
Sub test()
  [B1] = translate_FR_EN([A1])
End Sub

ou écrire directement en cellule B1 : =translate_FR_EN(A1)

et t'auras plus besoin de faire des manips : ni sélection dans la page web, ni copier / coller dans une cellule de ta feuille de calcul Excel ➯ ça sera automatique, donc beaucoup simplifié ! bien sûr, tu dois mettre dans le module VBA la fonction translate_FR_EN() de patricktoulon !

idem si tu utilises sa 2ème fonction du post #43 : translate_In_Out()

un grand bravo à patrick ! 👍 👏 👏 👏

soan
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11