Macro VBA posant probleme
Bonjour,
j'ai une macro qui me permet en chargeant un dictionnaire en mémoire, de définir si un texte est écrit en anglais ou en français.
Le test donne vrai si français et faux si anglais.
j'aurai besoin de votre aide car je souhaiterai rajouter dans cette macro un test supplémentaire : si faux alors vérifier dans le texte "faux" la présence des mots bonjour et/ou merci et/ou cordialement.
Si au moins un des trois mots est présent alors faux devient vrai
merci pour votre aide
ci-dessous la macro :
Public Function CheckFrench(ByVal pTexte As String) As Boolean
Dim lTexte As String
Dim lTempWord As String
Dim i As Long
Dim lCountFrench As Long
Dim TabWord
On Error GoTo err_check
'Remplit le dictionnaire des mots francais
Call Fill_French_Dictionnary
lTexte = LCase(pTexte)
'Remplace par des espaces
lTexte = Replace(lTexte, ",", " ")
lTexte = Replace(lTexte, ".", " ")
lTexte = Replace(lTexte, "-", " ")
lTexte = Replace(lTexte, "_", " ")
lTexte = Replace(lTexte, "?", " ")
lTexte = Replace(lTexte, "!", " ")
lTexte = Replace(lTexte, "(", " ")
lTexte = Replace(lTexte, ")", " ")
lTexte = Replace(lTexte, ":", " ")
lTexte = Replace(lTexte, ";", " ")
'Enleve
lTexte = Replace(lTexte, "=", "")
lTexte = Replace(lTexte, "#", "")
lTexte = Replace(lTexte, "*", "")
lTexte = Replace(lTexte, "@", "")
'On enleve les chiffres
lTexte = Replace(lTexte, "0", "")
lTexte = Replace(lTexte, "1", "")
lTexte = Replace(lTexte, "2", "")
lTexte = Replace(lTexte, "3", "")
lTexte = Replace(lTexte, "4", "")
lTexte = Replace(lTexte, "5", "")
lTexte = Replace(lTexte, "6", "")
lTexte = Replace(lTexte, "7", "")
lTexte = Replace(lTexte, "8", "")
lTexte = Replace(lTexte, "9", "")
lTexte = Replace(lTexte, "/", "")
lTexte = Replace(lTexte, "\", "")
'Remplace les doubles/triples/quadriples espaces par des simples
lTexte = Replace(lTexte, " ", " ")
lTexte = Replace(lTexte, " ", " ")
lTexte = Replace(lTexte, " ", " ")
'On utilise les espaces comme separation entre les mots (creation du tableau des mots)
TabWord = Split(lTexte, " ")
'Boucle sur les mots
For i = 0 To UBound(TabWord)
If m_DictFrench.Exists(Replace(TabWord(i), " ", "")) = True Then
lCountFrench = lCountFrench + 1
End If
Next
If UBound(TabWord) <> 0 Then
'Degre de confiance de 0.4 (40% des mots trouve sont des mots francais)
If lCountFrench / UBound(TabWord) > 0.4 Then
CheckFrench = True
Else
CheckFrench = False
End If
End If
Exit Function
err_check:
End Function
Private Sub Fill_French_Dictionnary()
Dim MyWord As String
On Error GoTo err_dict
If Not m_DictFrench Is Nothing Then
Exit Sub
Else
Set m_DictFrench = New Scripting.Dictionary
'
'Open m_DictFrenchLocation For Input As #1 ' Open file for input.
'Do While Not EOF(1) ' Loop until end of file.
' Input #1, MyWord ' Read data into two variables.
' Debug.Print MyWord ' Print data to the Immediate window.
'Loop
'Close #1 ' Close file.
Dim oFSO As New FileSystemObject
Dim oFS
Set oFS = oFSO.OpenTextFile(m_DictFrenchLocation)
Do Until oFS.AtEndOfStream
MyWord = oFS.ReadLine
'Debug.Print MyWord
m_DictFrench.Add MyWord, ""
Loop
End If
Exit Sub
err_dict:
MsgBox "Erreur lors de la lecture/remplissage du dictionnaire francais"
End Sub
Bonjour,
j'ai une macro qui me permet en chargeant un dictionnaire en mémoire, de définir si un texte est écrit en anglais ou en français.
Le test donne vrai si français et faux si anglais.
j'aurai besoin de votre aide car je souhaiterai rajouter dans cette macro un test supplémentaire : si faux alors vérifier dans le texte "faux" la présence des mots bonjour et/ou merci et/ou cordialement.
Si au moins un des trois mots est présent alors faux devient vrai
merci pour votre aide
ci-dessous la macro :
Public Function CheckFrench(ByVal pTexte As String) As Boolean
Dim lTexte As String
Dim lTempWord As String
Dim i As Long
Dim lCountFrench As Long
Dim TabWord
On Error GoTo err_check
'Remplit le dictionnaire des mots francais
Call Fill_French_Dictionnary
lTexte = LCase(pTexte)
'Remplace par des espaces
lTexte = Replace(lTexte, ",", " ")
lTexte = Replace(lTexte, ".", " ")
lTexte = Replace(lTexte, "-", " ")
lTexte = Replace(lTexte, "_", " ")
lTexte = Replace(lTexte, "?", " ")
lTexte = Replace(lTexte, "!", " ")
lTexte = Replace(lTexte, "(", " ")
lTexte = Replace(lTexte, ")", " ")
lTexte = Replace(lTexte, ":", " ")
lTexte = Replace(lTexte, ";", " ")
'Enleve
lTexte = Replace(lTexte, "=", "")
lTexte = Replace(lTexte, "#", "")
lTexte = Replace(lTexte, "*", "")
lTexte = Replace(lTexte, "@", "")
'On enleve les chiffres
lTexte = Replace(lTexte, "0", "")
lTexte = Replace(lTexte, "1", "")
lTexte = Replace(lTexte, "2", "")
lTexte = Replace(lTexte, "3", "")
lTexte = Replace(lTexte, "4", "")
lTexte = Replace(lTexte, "5", "")
lTexte = Replace(lTexte, "6", "")
lTexte = Replace(lTexte, "7", "")
lTexte = Replace(lTexte, "8", "")
lTexte = Replace(lTexte, "9", "")
lTexte = Replace(lTexte, "/", "")
lTexte = Replace(lTexte, "\", "")
'Remplace les doubles/triples/quadriples espaces par des simples
lTexte = Replace(lTexte, " ", " ")
lTexte = Replace(lTexte, " ", " ")
lTexte = Replace(lTexte, " ", " ")
'On utilise les espaces comme separation entre les mots (creation du tableau des mots)
TabWord = Split(lTexte, " ")
'Boucle sur les mots
For i = 0 To UBound(TabWord)
If m_DictFrench.Exists(Replace(TabWord(i), " ", "")) = True Then
lCountFrench = lCountFrench + 1
End If
Next
If UBound(TabWord) <> 0 Then
'Degre de confiance de 0.4 (40% des mots trouve sont des mots francais)
If lCountFrench / UBound(TabWord) > 0.4 Then
CheckFrench = True
Else
CheckFrench = False
End If
End If
Exit Function
err_check:
End Function
Private Sub Fill_French_Dictionnary()
Dim MyWord As String
On Error GoTo err_dict
If Not m_DictFrench Is Nothing Then
Exit Sub
Else
Set m_DictFrench = New Scripting.Dictionary
'
'Open m_DictFrenchLocation For Input As #1 ' Open file for input.
'Do While Not EOF(1) ' Loop until end of file.
' Input #1, MyWord ' Read data into two variables.
' Debug.Print MyWord ' Print data to the Immediate window.
'Loop
'Close #1 ' Close file.
Dim oFSO As New FileSystemObject
Dim oFS
Set oFS = oFSO.OpenTextFile(m_DictFrenchLocation)
Do Until oFS.AtEndOfStream
MyWord = oFS.ReadLine
'Debug.Print MyWord
m_DictFrench.Add MyWord, ""
Loop
End If
Exit Sub
err_dict:
MsgBox "Erreur lors de la lecture/remplissage du dictionnaire francais"
End Sub
Dernière édition: