Tradurre frasi macro



  • Tradurre frasi - macro
    di Giacomo (utente non iscritto) data: 02/03/2017 23:43:24

    Salve a tutti,
    Ho un piccolo problema:
    Nella colonna A ho delle frasi in italiano (dove arriviamo fino a 30000 record/righe) nella colonna B vorrei tradurle in Francese.

    Esiste un metodo per effettuare la traduzione in modo veloce ed affidabile di queste 30000 righe? Se esistesse una macro sarebbe perfetto.

    Grazie per la collaborazione



  • di patel data: 03/03/2017 07:50:34

    prova questa, togli gli spazi da sURL = "h t t p s://  
     
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Sub TraduciFrancese()
        Dim Rng As Range, cella As Range, objIE As Object
        Dim sURL As String, oDocu As Object, oItem As Variant
        Dim sTesto As String, sTrad As String, i As Long
        
        On Error GoTo exitSub_
        LR = Cells(Rows.Count, "A").End(xlUp).Row
        Set Rng = Range("A2:A" & LR)
        Set objIE = CreateObject("InternetExplorer.Application")
        Application.ScreenUpdating = False
        For Each cella In Rng.Cells
           sTesto = cella.Value
          If sTesto <> "" Then
            sTrad = ""
            sURL = "h t t p s://translate.google.it/?hl=it&tab=wT#it/fr/" & sTesto ' togli spazi
            objIE.navigate sURL
            i = 0
            Do While (objIE.Busy Or objIE.readyState <> 4) And i < 5000
              i = i + 1
              DoEvents
            Loop
            Sleep 500
            sTrad = objIE.document.getElementById("result_box").innertext
            Application.StatusBar = sTesto & " -> " & sTrad
    '        Debug.Print sTesto & " -> " & sTrad
            cella.Offset(0, 1).Value = sTrad
          End If
        Next cella
        Debug.Print "terminato"
    exitSub_:
        If TypeName(objIE) = "IWebBrowser2" Then
            objIE.Quit
        End If
        Application.ScreenUpdating = True
        Application.StatusBar = False
        If Err.Number <> 0 Then
          MsgBox "si è verificato un errore! " & i, vbCritical, "ERRORE"
        Else
          MsgBox "Terminato!"
        End If
        Set objIE = Nothing
        Set oDocu = Nothing
        Set oItem = Nothing
    End Sub
    
    






  • di scossa data: 03/03/2017 11:34:43

    cit. patel: "prova questa ...."

    Quel codice mi ricorda qualcosa


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di Giacomo (utente non iscritto) data: 03/03/2017 12:14:17

    Ciao,

    Grazie per la risposta celere.

    Ho provato ma non va.

    Esce tale errore:

    Sub o Function non definita

    Ti allego il file esempio

    Grazie ancora per l'aiuto.




  • di patel data: 03/03/2017 12:56:35

    cit. scossa "Quel codice mi ricorda qualcosa"
    ciao scossa, archivio tutto quello che mi pare interessante e di tue macro ne ho molte.





  • di patel data: 03/03/2017 13:07:20

    Giacomo, queste sarebbero frasi in italiano ? c'è molto poco da tradurre, comunque mancava una riga, ho corretto il post precedente





  • di Giacomo (utente non iscritto) data: 03/03/2017 15:03:13

    Non va, stesso errore



  • di alfrimpa data: 03/03/2017 15:13:12

    Ho provato la macro e, a parte che da tradurre c'è ben poco, questa funziona perfettamente.

    Inserisci il codice di patel in un modulo standard e dichiara la variabile LR così

    Dim LR As Long

    Alfredo





  • di patel data: 03/03/2017 15:14:23

    lascio la parola a scossa, l'autore della macro





  • di alfrimpa data: 03/03/2017 15:18:48

    Andrea, come ho detto, a me la macro - fatta quella piccola aggiunta - funziona perfettamente.

    Che poi traduca bene o male non dipende dal codice.

    Alfredo





  • di patel data: 03/03/2017 15:41:47

    Giacomo
    forse non ti funziona lo sleep, prova a sostituire la riga
    Sleep 500
    con
    Application.Wait (Now + TimeValue("0:00:01"))





  • di alfrimpa data: 03/03/2017 15:48:11

    A me lo Sleep funziona.

    Che sia un problema di PtrSafe 32/64 bit?

    Alfredo





  • di patel data: 03/03/2017 16:29:49

    è quello che penso anch'io, forse Giacomo ha Excel a 64 bit





  • di cromagno data: 04/03/2017 00:08:27

    Ciao a tutti,
    mi inserisco solamente per confermare che anche a me il codice funziona perfettamente (ho la versione 64bit quindi ho aggiunto PtrSafe alla dichiarazione della function).... ed anche per fare i complimenti @scossa (anche se non ne ha bisogno)



  • di Giacomo (utente non iscritto) data: 06/03/2017 19:46:33

    Salve,
    Scusate per il ritardo.

    con la sostituzione

    Sleep 500
    con
    Application.Wait (Now + TimeValue("0:00:01"))

    funziona solo che è troppo lento, non c'è un modo per velocizzarlo visto che si tratta di ben 50000 righe?

    Grazie




  • di patel data: 06/03/2017 20:11:58

    pensa soltanto che la traduzione la fa collegandosi a google translator