Comment respecter la casse ?

mikael2235

XLDnaute Occasionnel
Bonjour,
J'ai fait une petite fonction VBA qui me sert à faire de la traduction, voir sujet ICI.
ça va rechercher la traduction dans une autre feuille.

Fonction actuelle :
VB:
translate = Application.VLookup(text_i, Sheets("Translation").Range("A5:C65536"), Sheets("Translation").Range("C1"), False)

Je voudrais que la casse "source" soit respectée.
Ex : Si mon mot est en majuscule, qu'il me fasse la traduction, puis parcours la chaine source lettre par lettre pour vérifier si c'est majuscule ou minuscule, et me recopie cette même casse sur l'output...

J'ai ouvert un nouveau sujet, car même si pour moi c'est le même projet, cela n'a rien a voir.

Merci pour votre aide.
 

Pierrot93

XLDnaute Barbatruc
Re : Comment respecter la casse ?

Bonjour,

à la place de "Application.VLookup" utilise la méthode "Find" native dans vba en utilisant l'argument "MatchCase:=True"... regardedans l'aide vba sur mot "Find" tu auras exemple et détails de la méthode...

bonaprès midi
@+
 

Dranreb

XLDnaute Barbatruc
Re : Comment respecter la casse ?

Bonjour.
Après traduction sans tenir compte de la casse :
VB:
Option Explicit

Sub test()
MsgBox CopieCasse("oui", "Yes")
End Sub

Function CopieCasse(ByVal Cbl As String, ByVal Src As String) As String
Dim P As Long, Maj As Boolean, C As String * 1
For P = 1 To Len(Cbl)
   If P <= Len(Src) Then Maj = Mid$(Src, P, 1) = UCase(Mid$(Src, P, 1))
   C = Mid$(Cbl, P, 1)
   If Maj Then CopieCasse = CopieCasse & UCase$(C) _
          Else CopieCasse = CopieCasse & LCase$(C)
   Next P
End Function
Remarques: si le mot d'origine est plus court que sa traduction, la casse de sa dernière lettre est reconduite pour les lettres en plus. Vous auriez intérêt à passer par un Dictionary pour traduire du texte.
 
Dernière édition:

mikael2235

XLDnaute Occasionnel
Re : Comment respecter la casse ?

@ Dranreb,
Bonjour et merci, c'est exactement je que je recherchais

@ Pierrot93,
MatchCase:=True va me rechercher la chaine en respectant la casse, c'est ça ?
Mais moi dans mon tableau de traduction, je ne vais pas respecter la casse car, un même mot peut-être utilisé à plusieurs endroits, mais pas avec la même casse.
Find sera t'elle plus rapide que Vlookup ?
 

mikael2235

XLDnaute Occasionnel
Re : Comment respecter la casse ?

J'en reviens sur ce que j'ai dit. Finalement le code fonctionne pas de soucis.

Mais comme les mots français et anglais ne font pas tous le même nombre de lettre, il mets des majuscules n'importe ou... Et il considère les espaces comme des majuscules.
Signaler un problème
Proposer une amélioration

Report aN iSsue
submIT an impRovmEnt

Alors comment faire, ça se complique ???

Plutôt que 3 cas :
- Toute la chaine est en majuscule
- Toute la chaine est en minuscule
- Les premiers lettres des mots sont en majuscules uniquement

Qu'en pensez vous ?
 

Dranreb

XLDnaute Barbatruc
Re : Comment respecter la casse ?

J'en pense que ma fonction CopieCasse n'a pas cet inconvénient si on lui soumet des mots.
Utilisez TBrut = Split(TexteBrut, " ") pour séparer un texte en tableau de mot selon les espaces
Utilisez TexteTraduit = Join(TTrad, " ") pour joindre les élément du tableau de mots traduits par des espaces.
Si ce sont plutôt des expressions entières qui sont traduites en expressions de mêmes nombres de mots, soumettez néanmoins à la correction de casse les mots de chaque expression :
VB:
Sub test()
Dim TBrut() As String, TTrad() As String, M As Long
TBrut = Split("Signaler un problème", " ")
TTrad = Split("REPORT AN ISSUE", " ")
For M = 0 To UBound(TTrad): TTrad(M) = CopieCasse(TTrad(M), TBrut(M)): Next M
MsgBox Join(TTrad, " ")
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 295
Membres
103 171
dernier inscrit
clemm