Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 27 déc. 2007 à 13:37
possible de faire :
Function GetCommonLetters(ByRef vsWord1 As String, ByRef vsWord2 As String) As String
Dim xbTab(1 To 255) As Byte
Dim xbWord() As Byte
Dim nChar As Byte
Dim i As Long
xbWord = StrConv(LCase$(vsWord1), vbFromUnicode)
For i = 0 To UBound(xbWord)
xbTab(xbWord(i)) = 1
Next i
xbWord = StrConv(LCase$(vsWord2), vbFromUnicode)
For i = 0 To UBound(xbWord)
nChar = xbWord(i)
If xbTab(nChar) = 1 Then
GetCommonLetters = GetCommonLetters & Chr$(nChar)
xbTab(nChar) = 2
End If
Next i
End Function
MsgBox GetCommonLetters("Argentine", "BRESIL")
donnera REI
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 27 déc. 2007 à 14:33
Tu peux essayer un truc du genre :
Function LettresCommunes(byval Mot1 As String, byval Mot2 As String) As String
Dim i As Long, j As Long, Ret As String, C As String
Mot1 = LCase$(Mot1)
Mot2 = LCase$(Mot2)
For i = 1 To Len(Mot1)
C = Mid$(Mot1, i ,1)
If Instr(Mot2, C) <> 0 And Instr(Ret, C) = 0 Then
Ret = Ret & C
End If
Next
LettresCommunes = Ret
End Function
A utiliser comme ça : Debug.Print LettresCommunes("Argentine","Bresil")
Devrait produire la chaine : "rei"
Par contre, attention au problème des caractères accentués : dans ma fonction e, é, è, ë et ê sont considérés comme 5 lettres différentes ! A voir si ce comportement te convient (dans le cas contraire, il faudra faire une petite conversion de C avant le If).
Par contre je ne distingue pas les majuscules des minuscules, à voir si cela te convient aussi (dans le cas contraire, juste à supprimer les deux lignes appelant LCase$() pour ce cas)
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 27 déc. 2007 à 15:11
Une autre façon
Private Sub Command3_Click()
mot1 = "ARGENTINE"
mot2 = "BRESIL"
For I = 1 To Len(mot1)
lettre = Mid(mot1, I, 1)
If mot2 Like "*" & lettre & "*" Then
If Not kifkif Like "*" & lettre & "*" Then
kifkif = kifkif & lettre
End If
End If
Next
MsgBox kifkif
End Sub
divadav
Messages postés94Date d'inscriptionlundi 13 janvier 2003StatutMembreDernière intervention22 janvier 20092 27 déc. 2007 à 10:13
Salut !
Hé non, tout n'existe pas sous forme de fonction toute faite !
Il va falloir que tu code toi même cette fonction je pense...
Pour optimiser un peu (si les mots sont obligatoirements en français), alors ne perd pas de vue la Fréquence d'apparition des lettres en français !