IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA Excel - Fonction de traduction de texte


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Par défaut VBA Excel - Fonction de traduction de texte
    Bonjour,

    J'ai une fonction de traduction de texte qui fonctionne très bien mais si j'ai des retours à la ligne dans mon texte de base, cela me mets une erreur #valeur.

    Est-il possible de faire quelque chose pour ce problème.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Public Function GoogleTranslate(text As String, Optional fromLanguage As String = "en", Optional toLanguage As String = "es") As String
     
        Static objHTTP As Object
        Dim URL As String
     
        If objHTTP Is Nothing Then Set objHTTP = CreateObject("MSXML2.XMLHTTP")
     
        URL = "https://translate.google.com/m?hl=" & fromLanguage & "&sl=" & fromLanguage & "&tl=" & toLanguage & "&ie=UTF-8&prev=_m&q=" & WorksheetFunction.EncodeURL(text)
     
        With objHTTP
            .Open "GET", URL, False
            .setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
            .Send ("")
            If InStr(.responseText, "<div class=""result-container""") > 0 Then
                GoogleTranslate = Clean(RegexExecute(.responseText, "div[^""]*?""result-container"".*?>(.+?)</div>"))
            Else
                GoogleTranslate = CVErr(xlErrValue)
            End If
        End With
     
    End Function
    D'avance merci pour votre aide.

    Excellente soirée.

    Michael.

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 243
    Par défaut
    Hello,
    peut-être en remplaçant les retours ligne par des espaces ?
    sinon un exemple de texte qui ne passe pas ?
    Ami calmant, J.P

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Par défaut
    Bonsoir,

    Merci pour votre réponse.

    La valeur que je souhaite traduire provient d’une Textbox d’un UserForm. Cette valeur est insérée dans une cellule de ma feuille.

    Effectivement lorsque je mets des espaces sans retour a ligne, cela fonctionne.

    Par contre, j’ai du activer les options multilignes et enterkeybehavior afin de palier au problème de longueur du texte entré lorsque j’arrive au bout de la largeur de ma Textbox.

    Du coup, cela ne fonctionne plus.

    Par exemple, si la valeur de ma cellule est :

    Je m’appelle Toto, j’ai 40 ans, je vis à Nice

    Cela fonctionne. Mais le texte :

    Je m’appelle Toto
    J’ai 40 ans
    Je vis à Nice

    Cela ne fonctionne plus.

    Y a-t-il un moyen de corriger le code de ma fonction ou est-ce que je dois procéder d’une manière différente pour palier à ce problème.

    D’avance merci pour le retour.

    Michael.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Par défaut
    Pour compléter, je souhaite que la valeur traduite en anglais par exemple, garde la même mise en forme lorsque je l’insère dans mon champs Formfield de mon formulaire Word.

    My Name is Toto
    I’m 40
    I live in Nice

    Michael.

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 243
    Par défaut
    Hello,
    tu peux essayer ceci (exemple avec un formulaire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub CommandButton1_Click()
     Me.TextBox2 = GoogleTranslate(Me.TextBox1.text)
     Range("B1").value = GoogleTranslate(Me.TextBox1.text)
    End Sub
     
    Public Function GoogleTranslate(text As String, Optional fromLanguage As String = "fr", Optional toLanguage As String = "en") As String
        Static objHTTP As Object
        Static MyHTML As Object
        Dim ResultCont As Object
        Dim URL As String
        If MyHTML Is Nothing Then Set MyHTML = CreateObject("HTMLFILE")
        If objHTTP Is Nothing Then Set objHTTP = CreateObject("MSXML2.XMLHTTP")
        URL = "https://translate.google.com/m?hl=" & fromLanguage & "&sl=" & fromLanguage _
              & "&tl=" & toLanguage & "&ie=UTF-8&prev=_m&q=" & WorksheetFunction.EncodeURL(text)
        With objHTTP
            .Open "GET", URL, False
            .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
            .Send ("")
            MyHTML.body.innerHTML = .responseText
            Set ResultCont = MyHTML.getElementsByClassName("result-container")
            If Not ResultCont Is Nothing Then
               Debug.Print ResultCont(0).textContent
               GoogleTranslate = ResultCont(0).textContent
            Else
               GoogleTranslate = CVErr(xlErrValue)
            End If
        End With
     
    End Function
    Nom : Traduction.gif
Affichages : 748
Taille : 24,3 Ko

    A noter que l'extration du résultat se fait avec un object HTML.

    Ami calmant, J.P

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Par défaut
    Bonjour,

    Tout fonctionne parfaitement et je vous en remercie.

    Par contre, je rencontrer désormais un nouveau problème.

    Mon texte est bien traduit en anglais par exemple mais j'obtiens un nouveau message d'erreur lorsque je souhaite remplir mon document Word.

    Erreur d'execution 4608 : Chaine de caractère trop longue

    Sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .FormFields("Remarques").Result = Remarquestraduites_temp
    Le paramètre longueur maximal de mon champ zone de texte sur mon document Word est bien en "illimité".

    J'ai regardé les autres contrôles active X mais rien d'autres ne permets d'insérer du texte.

    Quelqu'un aurait une idée?

    D'avance merci encore pour votre précieuse aide.

    Michael.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 547
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 547
    Par défaut
    Je pense que les champs sont limités en nombre de caractères. pour vérifier, copie le texte que tu veux y mettre et colle le manuellement; le texte devrait être tronqué. La seule solution, à mon avis, serait d'avoir un (ou plusieurs) champs supplémentaires pour y mettre l'excès.

    Sinon pour le problème initial, en observant l'adresse de google Trad quand on y met du texte sur plusieurs lignes, on voit qu'il ajoute juste le caractère 0x0A (ou %0A); or le retour à la ligne (sous windows) est composé de CR (0D) et LF (0A) (en notation, VB vbCrLf). Je pense donc qu'il faut transformer ce VbCrLf par VbLf pour envoyer en traduction et au retour, faire l'opération inverse.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Par défaut
    Après avoir effectué différents tests, le système fonctionne bien.

    Le seule problème que j’ai est que pour des raisons esthétiques, je souhaiterai que le texte dans mon document Word soit justifié.

    Malheureusement, après plusieurs recherchées sur internet, il s’avère qu’il n’est pas possible de justifier du text dans un Textbox.

    Je me permets donc de revenir sur mes premiers essais avec un champ text.

    Après plusieurs recherches sur internet, il semblerait que la limite du nombre de caractère est relativement considérable.

    Si je suis cette information, le système devrait fonctionner et ne pas m’indiquer que la chaîne de caractère est trop longue.

    Quelqu’un pourrait m’éclairer?

    Si vraiment cela n’est pas possible, je garderai la solution de la textbox sans justification.

    D’avance merci.

    Michael.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Par défaut
    Je me réfère à ce genre d’informations trouvées sur internet :

    Nom : 509F3EF4-C408-4EEA-AA22-80A90F2ADA42.jpeg
Affichages : 681
Taille : 319,0 Ko
    Images attachées Images attachées  

  10. #10
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 243
    Par défaut
    Hello,
    je pense que ton Formfield est de type wdFieldFormTextInput qui lui est limité à 255 caractères. Mais il y a mieux: la zone de texte du menu Insertion qui n'a pas cette limitation.

    Nom : WordInsertionZoneTexte.png
Affichages : 679
Taille : 7,0 Ko

    Pour la remplir c'est tout simple si on connaît son nom. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub RemplirZoneTexte()
    ActiveDocument.Shapes("ZoneTexte").TextFrame.TextRange.Text = Remarquestraduites_temp
    End Sub
    Nom : WordZoneTexte.png
Affichages : 675
Taille : 27,2 Ko

    A noter qu'on est un peu hors-sujet ici car on est dans un forum excel et on manipule un document word.


    Ami calmant, J.P

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 547
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 547
    Par défaut
    Il faudrait aussi lire la suite de ta capture, la partie commençant par "Cependant, il est important de noter que .." il y a peut-être une explication dans la suite de ce paragraphe

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Par défaut
    Bonjour,

    Merci pour ces informations.

    Je reviens vers vous lundi car la tout ce que j'essaie, y a rien qui fonctionne et ca commence à me désespérer !

    J'essaie ta solution Jurassic, en inscrivant le bon nom de la zone de texte mais cela ne se remplit pas.

    Je n'ai même pas de message d'erreur.

    Je vais me reposer durant le weekend et retenter lundi à tête reposée.

    @umfred : le système dit juste que cela dépend des versions utilisées, déclarations des variables, etc.. mais tout est juste chez moi.

    PS : j'essaie de lancer ces codes depuis Excel, je pensais être dans le bon forum. Navré.

    Michael.

Discussions similaires

  1. [VBA EXCEL] changer la couleur du texte de cellules
    Par dume75 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/02/2006, 23h08
  2. [VBA][Excel]fonction networkdays
    Par nemesys971 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/01/2006, 13h47
  3. [VBA/Excel] Fonction open sous Excel 97
    Par nico01984 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/01/2006, 14h19
  4. [VBA EXCEL] Fonction Instr
    Par thulvar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/01/2006, 14h43
  5. [VBA][Excel]Supprimer une partie du texte d'une grosse liste
    Par annedeblois dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/09/2005, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo