__TOC__
[Image:http://static.commentcamarche.net/www.commentcamarche.net/faq/images/37089-aLdLvbY5FNihRpNY-s-.png|150px|right|]
==Introduction==
Le but ici est de créer un dictionnaire, au format texte (extension .txt), composé dun mot par ligne, à partir du dictionnaire disponible à linstallation du navigateur firefox. Il va donc nous falloir les outils nécessaires à la lecture, la modification et lécriture dans un fichier texte à partir de VBA dans Excel.
==Lire dans un fichier texte==
Il existe plusieurs méthodes permettant la lecture dun fichier texte. Celle retenue ici (accès séquentiel) est la suivante :
Sub LireDicoFirefox()
Dim Tb() As String, Chemin As String, num As Long, i As Long
Chemin = ThisWorkbook.Path
NomFicTxt = "\DicoFirefoxFrancais.txt"
'permet de retrouver le 1er numéro libre de désignation dun fichier
num = FreeFile
'ouvre le fichier en lecture
Open Chemin & NomFicTxt For Input As #num
i = -1
'boucle tant que lon na pas atteint la fin du fichier
While Not EOF(1)
'***************Stockage des lignes dans la variable tableau Tb
i = i + 1
ReDim Preserve Tb(i)
Line Input #1, Tb(i)
Wend
Close #num 'fermeture
End Sub
Nota : Dans ce cas précis, lutilisation de la variable tableau Tb() pour stocker les lignes du fichier texte est inutile car le dictionnaire firefox ne comprends quune seule ligne.
==Modifier un fichier texte==
La solution la plus facile est danalyser le résultat présenté par la procédure de lecture, puis de modifier, directement dans Excel, les chaînes de caractères devant lêtre.
Dans notre exemple, à limportation des données, on se rend compte que :
*Le dictionnaire firefox est composé dune seule ligne,
*Elle-même composée de mots :
**Séparés par :
***des "/",
***des tabulations (Chr(9)),
***des sauts de ligne (Chr(10)).
**Comportant des caractères :
***spéciaux,
***numériques.
**En minuscule.
Il nous faut donc traiter cela sous Excel.
Notre liste de mots est stockée dans la variable Tb(). Nous allons, dans un premier temps, écrire deux fonctions nous permettant dapurer la liste des mots des caractères spéciaux et de supprimer les mots contenant des chiffres (1er etc.)
Voici les codes de ces deux fonctions.
'Cette fonction remplace les caractères spéciaux
'contenus dans le dictionnaire firefox
Function RemplaceCarSpec(monMot As String)
Dim motTemp As String
'La méthode utilisée ici est : Replace (cf aide VBA à ce sujet)
motTemp = Replace(monMot, "é", "e")
motTemp = Replace(motTemp, "ï", "i")
motTemp = Replace(motTemp, "è", "e")
motTemp = Replace(motTemp, "-", "")
motTemp = Replace(motTemp, "ç", "c")
motTemp = Replace(motTemp, "ë", "e")
motTemp = Replace(motTemp, "ê", "e")
motTemp = Replace(motTemp, "ü", "u")
motTemp = Replace(motTemp, "â", "a")
motTemp = Replace(motTemp, "ä", "ae")
motTemp = Replace(motTemp, "ô", "o")
motTemp = Replace(motTemp, "ÿ", "y")
motTemp = Replace(motTemp, "î", "i")
motTemp = Replace(motTemp, "Å""", "oe")
motTemp = Replace(motTemp, "û", "u")
motTemp = Replace(motTemp, "æ", "ae")
motTemp = Replace(motTemp, "Ã¥", "a")
motTemp = Replace(motTemp, "ö", "o")
motTemp = Replace(motTemp, "Ã", "a")
motTemp = Replace(motTemp, "É", "e")
motTemp = Replace(motTemp, "È", "e")
motTemp = Replace(motTemp, "Ã...", "a")
motTemp = Replace(motTemp, "Å'", "oe")
motTemp = Replace(motTemp, "Å", "oe")
'Transforme notre chaîne de caractères en Majuscules
RemplaceCarSpec = UCase(motTemp)
End Function
'Cette fonction va stocker les mots ne contenant pas de chiffres
'en début ou en fin de chaîne (ex : supprime 2ND)
'Sa particularité est quon lui passe en paramètre une variable tableau
'et quelle renvoie une variable tableau
Function Affine(Tbl)
Dim TbTemp(), i As Long, CptTbNum As Long, CptTemp As Long
For i = LBound(Tbl) To UBound(Tbl)
If Len(Tbl(i)) > 2 And Len(Tbl(i)) < 17 Then
If Not IsNumeric(Right(Tbl(i), 1)) And Not IsNumeric(Left(Tbl(i), 1)) Then
ReDim Preserve TbTemp(CptTemp)
TbTemp(CptTemp) = Tbl(i)
CptTemp = CptTemp + 1
End If
End If
Next i
Affine = TbTemp
End Function
Le code permettant de séparer les mots selon leurs séparateurs est le suivant (utilisation de Split) :
Dim PremierJet() As String
'Tb(0) car le dictionnaire firefox ne contient quune ligne
'Dans le cas contraire il eut fallu boucler
PremierJet = Split(Tb(0), "/") For i = LBound(PremierJet) To UBound(PremierJet)
PremierJet(i) = Split(PremierJet(i), Chr(9))(1)
PremierJet(i) = Split(PremierJet(i), Chr(10))(1)
Next i
==Ecrire dans un fichier texte==
Pour écrire dans un fichier texte, la méthode est sensiblement équivalente à la lecture.
num = FreeFile
'Ouvre en écriture et écrase un fichier précédent du même nom
Open Chemin & "\DicoFirefoxFrancaisTransforme.txt" For Output As #num
'Boucle sur la liste des mots
For i = LBound(ListeMots) To UBound(ListeMots)
'Ecrit dans le fichier texte ligne par ligne
Print #1, ListeMots(i)
Next i
'Fermeture
Close #num
==Téléchargement==
Vous pouvez retrouver lensemble de cette procédure dans le classeur ci-joint : http://cjoint.com/?DHfkA1c9DYZ.
Est également joint le dictionnaire firefox « brut », au format txt : http://cjoint.com/?DHfkBLhg1As