Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.

(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)
[/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
Sinon je vais créer une liste déroulante, contenant une liste pré établit des mots clés du descriptif du matériel, et la liste va être longue .. puis d'effectué une recherche par index et equiv pour la traduction.
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…