Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Bonjour à tous !
Je cherche une macro pour traduire des mots anglais se trouvant n'importe où sur une feuille excel (cat=chat, dog=chien, house=maison , etc etc .....)
Merci d'avance.
Mythotem.
Un essai montrant très partiellement comment utiliser un dico en VBA...
La macro dans le code de la feuille :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Dim txt$, i As Integer, trad As Variant
txt = Application.Trim(Target)
For i = 0 To UBound(Split(txt, " "))
trad = Application.VLookup(Split(txt, " ")(i), Sheets("dico").Range("A:B"), 2, 0)
If Not IsError(trad) Then txt = Replace(txt, Split(txt, " ")(i), trad)
Next
Application.EnableEvents = False
Target = txt
Application.EnableEvents = True
End Sub
je déterre ce post car le fichier dico m'est utile.
le seul inconvénient c'est qu'il faut écrire absolument le mot pour traduire, or j'aurais voulu faire un copier coller d'une liste de mots et que cela les traduise sans les copier un à un,
Voyez le fichier joint et cette macro nettement plus élaborée :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, UsedRange)
If Target Is Nothing Then Exit Sub
Dim d As Object, tablo, i&, txt$, s
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
tablo = Sheets("dico").[A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide
For i = 1 To UBound(tablo)
d(tablo(i, 1)) = tablo(i, 2)
Next i
Application.ScreenUpdating = False
Application.EnableEvents = False
For Each Target In Target 'si entrées multiples (copier-coller)
txt = Trim(Target)
s = Split(txt)
For i = 0 To UBound(s)
If d.exists(s(i)) Then s(i) = d(s(i)) 'traduction
Next i
Target = Join(s)
Next Target
Application.EnableEvents = True
End Sub
Je salue ici la mémoire de jeanpierre qui nous a quittés il y a pas mal de temps.
La macro précédente est rapide, pour tester j'ai sélectionné la plage A1:A10000 et touche Ctrl enfoncée j'ai validé l'entrée du texte "cat and dog", l'exécution se fait chez moi en 0,27 seconde.
c'est top mais malheureusement on est pas exactement sur ce dont j'ai besoin personnellement...
j'aurais voulu que dans l'onglet traduction j'écrive ma liste de mot au fur et a mesure, cat / dog / fish
mais que la traduction se fasse directement dans l'onglet principal ou sur une colonne connexe, mais sans que j'ai à réecrire chaque mot,
Dans mon exemple, admettons que je copie colle "fish and chips" dans l'onglet principal, cela traduirait par "poisson" seulement, directement.
je pense faire autrement je vais pas saouler le monde entier pour mes problèmes de compta !
merci
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD