Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot
sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui
sont stockés dans un fichier txt, séparés par des marques de paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son
contenu et renvoyer une valeur (exemple True) si il y a une correspondance,
et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Yvan
Ah, j'ai oublié de préciser que cette vérif risque de se faire à plusieurs reprises durant l'exécution de la macro (il y a un while...wend), si ça peut avoir une incidence sur l'ouverture/la fermeture du fichier txt...
Bonjour tout le monde !
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui sont stockés dans un fichier txt, séparés par des marques de paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son contenu et renvoyer une valeur (exemple True) si il y a une correspondance, et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Merci d'avance pour votre aide,
Yvan
Ah, j'ai oublié de préciser que cette vérif risque de se faire à plusieurs
reprises durant l'exécution de la macro (il y a un while...wend), si ça peut
avoir une incidence sur l'ouverture/la fermeture du fichier txt...
Bonjour tout le monde !
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot
sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui
sont stockés dans un fichier txt, séparés par des marques de paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son
contenu et renvoyer une valeur (exemple True) si il y a une correspondance,
et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Ah, j'ai oublié de préciser que cette vérif risque de se faire à plusieurs reprises durant l'exécution de la macro (il y a un while...wend), si ça peut avoir une incidence sur l'ouverture/la fermeture du fichier txt...
Bonjour tout le monde !
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui sont stockés dans un fichier txt, séparés par des marques de paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son contenu et renvoyer une valeur (exemple True) si il y a une correspondance, et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Merci d'avance pour votre aide,
Yvan
Anacoluthe
Bonjour !
'Yvan' nous a écrit ...
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui sont stockés dans un fichier txt, séparés par des marques de paragraphe. Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son contenu et renvoyer une valeur (exemple True) si il y a une correspondance, et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Le plus basiquement wordien est d'ouvrir le fichier txt en arrière-plan et de faire un bête Rechercher. C'est simple et rapide. On peut aussi une fois pour toute lire le fichier ligne par ligne dans une variable ou un objet Dictionary.
Anacoluthe « Je crois qu'il faudra tout mettre en dictionnaire. » - VOLTAIRE
Bonjour !
'Yvan' nous a écrit ...
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot
sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui
sont stockés dans un fichier txt, séparés par des marques de paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son
contenu et renvoyer une valeur (exemple True) si il y a une correspondance,
et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Le plus basiquement wordien est d'ouvrir le fichier txt
en arrière-plan et de faire un bête Rechercher. C'est simple et
rapide. On peut aussi une fois pour toute lire le fichier ligne
par ligne dans une variable ou un objet Dictionary.
Anacoluthe
« Je crois qu'il faudra tout mettre en dictionnaire. »
- VOLTAIRE
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui sont stockés dans un fichier txt, séparés par des marques de paragraphe. Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son contenu et renvoyer une valeur (exemple True) si il y a une correspondance, et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Le plus basiquement wordien est d'ouvrir le fichier txt en arrière-plan et de faire un bête Rechercher. C'est simple et rapide. On peut aussi une fois pour toute lire le fichier ligne par ligne dans une variable ou un objet Dictionary.
Anacoluthe « Je crois qu'il faudra tout mettre en dictionnaire. » - VOLTAIRE
Geo
Bonjour Yvan
Bonjour tout le monde !
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui sont stockés dans un fichier txt, séparés par des marques de paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son contenu et renvoyer une valeur (exemple True) si il y a une correspondance, et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Alternative à la solution d'Anacoluthe :
Une macro pour l'ouvir et le lire Dim Montexte As String
Sub Lecture() Dim Ligne As String Montexte = "" Open "c:TempReferences.txt" For Input As #1 ' Ouvre le fichier en lecture. Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier. Line Input #1, Ligne ' Lit la ligne dans la variable. Montexte = Montexte & Ligne & vbCrLf Loop Close #1 ' Ferme le fichier. End Sub
et une pour rechercher
Function YEstIl(T As String) As Boolean
If InStr(T & vbCrLf, Montexte) > 0 Then YEstIl = True Else YEstIl = False End If End Function
Pas testé
Bonjour Yvan
Bonjour tout le monde !
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot
sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de
mots qui sont stockés dans un fichier txt, séparés par des marques de
paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et
parcourir son contenu et renvoyer une valeur (exemple True) si il y a
une correspondance, et une autre valeur (False par exemple) si il n'y
a pas de correspondance ??
Alternative à la solution d'Anacoluthe :
Une macro pour l'ouvir et le lire
Dim Montexte As String
Sub Lecture()
Dim Ligne As String
Montexte = ""
Open "c:TempReferences.txt" For Input As #1 ' Ouvre le fichier en
lecture.
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Line Input #1, Ligne ' Lit la ligne dans la variable.
Montexte = Montexte & Ligne & vbCrLf
Loop
Close #1 ' Ferme le fichier.
End Sub
et une pour rechercher
Function YEstIl(T As String) As Boolean
If InStr(T & vbCrLf, Montexte) > 0 Then
YEstIl = True
Else
YEstIl = False
End If
End Function
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui sont stockés dans un fichier txt, séparés par des marques de paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son contenu et renvoyer une valeur (exemple True) si il y a une correspondance, et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Alternative à la solution d'Anacoluthe :
Une macro pour l'ouvir et le lire Dim Montexte As String
Sub Lecture() Dim Ligne As String Montexte = "" Open "c:TempReferences.txt" For Input As #1 ' Ouvre le fichier en lecture. Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier. Line Input #1, Ligne ' Lit la ligne dans la variable. Montexte = Montexte & Ligne & vbCrLf Loop Close #1 ' Ferme le fichier. End Sub
et une pour rechercher
Function YEstIl(T As String) As Boolean
If InStr(T & vbCrLf, Montexte) > 0 Then YEstIl = True Else YEstIl = False End If End Function
Pas testé
JièL Goubert
Bonjoir(c) Geo
cette macro (que je ne trouve pas superfétatoire ;-p) me fait me poser une question : quelle est la taille limite d'une chaine en VBA ? Comme tu lis tout le fichier que tu met dans une seule variable, je me demande s'il ne va pas y avoir explosion de celle ci...
-- JièL / Jean-Louis GOUBERT La FAQ Outlook est la : http://faq.outlook.free.fr/
Le 09/05/2005 20:14 vous avez écrit ceci :
Bonjour Yvan
Bonjour tout le monde !
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui sont stockés dans un fichier txt, séparés par des marques de paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son contenu et renvoyer une valeur (exemple True) si il y a une correspondance, et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Alternative à la solution d'Anacoluthe :
Une macro pour l'ouvir et le lire Dim Montexte As String
Sub Lecture() Dim Ligne As String Montexte = "" Open "c:TempReferences.txt" For Input As #1 ' Ouvre le fichier en lecture. Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier. Line Input #1, Ligne ' Lit la ligne dans la variable. Montexte = Montexte & Ligne & vbCrLf Loop Close #1 ' Ferme le fichier. End Sub
et une pour rechercher
Function YEstIl(T As String) As Boolean
If InStr(T & vbCrLf, Montexte) > 0 Then YEstIl = True Else YEstIl = False End If End Function
Pas testé
Bonjoir(c) Geo
cette macro (que je ne trouve pas superfétatoire ;-p) me fait me poser une
question : quelle est la taille limite d'une chaine en VBA ?
Comme tu lis tout le fichier que tu met dans une seule variable, je me
demande s'il ne va pas y avoir explosion de celle ci...
--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr/
Le 09/05/2005 20:14 vous avez écrit ceci :
Bonjour Yvan
Bonjour tout le monde !
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot
sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de
mots qui sont stockés dans un fichier txt, séparés par des marques de
paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et
parcourir son contenu et renvoyer une valeur (exemple True) si il y a
une correspondance, et une autre valeur (False par exemple) si il n'y
a pas de correspondance ??
Alternative à la solution d'Anacoluthe :
Une macro pour l'ouvir et le lire
Dim Montexte As String
Sub Lecture()
Dim Ligne As String
Montexte = ""
Open "c:TempReferences.txt" For Input As #1 ' Ouvre le fichier en
lecture.
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Line Input #1, Ligne ' Lit la ligne dans la variable.
Montexte = Montexte & Ligne & vbCrLf
Loop
Close #1 ' Ferme le fichier.
End Sub
et une pour rechercher
Function YEstIl(T As String) As Boolean
If InStr(T & vbCrLf, Montexte) > 0 Then
YEstIl = True
Else
YEstIl = False
End If
End Function
cette macro (que je ne trouve pas superfétatoire ;-p) me fait me poser une question : quelle est la taille limite d'une chaine en VBA ? Comme tu lis tout le fichier que tu met dans une seule variable, je me demande s'il ne va pas y avoir explosion de celle ci...
-- JièL / Jean-Louis GOUBERT La FAQ Outlook est la : http://faq.outlook.free.fr/
Le 09/05/2005 20:14 vous avez écrit ceci :
Bonjour Yvan
Bonjour tout le monde !
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui sont stockés dans un fichier txt, séparés par des marques de paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son contenu et renvoyer une valeur (exemple True) si il y a une correspondance, et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Alternative à la solution d'Anacoluthe :
Une macro pour l'ouvir et le lire Dim Montexte As String
Sub Lecture() Dim Ligne As String Montexte = "" Open "c:TempReferences.txt" For Input As #1 ' Ouvre le fichier en lecture. Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier. Line Input #1, Ligne ' Lit la ligne dans la variable. Montexte = Montexte & Ligne & vbCrLf Loop Close #1 ' Ferme le fichier. End Sub
et une pour rechercher
Function YEstIl(T As String) As Boolean
If InStr(T & vbCrLf, Montexte) > 0 Then YEstIl = True Else YEstIl = False End If End Function
Pas testé
Anacoluthe
Bonjour !
'JièL Goubert' nous a écrit ...
cette macro (que je ne trouve pas superfétatoire ;-p) me fait me poser une question : quelle est la taille limite d'une chaine en VBA ? Comme tu lis tout le fichier que tu met dans une seule variable, je me demande s'il ne va pas y avoir explosion de celle ci...
Geo a de la réserve !!! Dans sa variable chaîne il peut mettre 2 147 483 648 caractères ( 2 GIGAS octets !) (2 puissance 31)
Comme Geo place tout son fichier texte dans une variable (j'aurais préféré un tableau ou un objet Dictionary mais bon) il peut s'amuser à le charger d'un coup d'un seul ce qui modifierait sa macro ainsi :
Public Sub Lecture() Dim MonTexte As String Open "c:TempReferences.txt" For Binary As #1 MonTexte = Space(LOF(1)) Get #1, , MonTexte Close #1 End Sub
Mais dans ce cas la chaîne est de longueur fixe et limitée à 64K ce qui est souvent suffisant pour un fichier texte.
Je continue à préférer l'ouverture wordienne du fichier texte et l'utilisation du Rechercher, c'est plus simple question casse. Il faudrait faire des tests comparatifs de rapidité.
Anacoluthe « Je crois qu'il faudra tout mettre en dictionnaire. » - VOLTAIRE
Bonjour !
'JièL Goubert' nous a écrit ...
cette macro (que je ne trouve pas superfétatoire ;-p) me fait me poser
une question : quelle est la taille limite d'une chaine en VBA ?
Comme tu lis tout le fichier que tu met dans une seule variable, je me
demande s'il ne va pas y avoir explosion de celle ci...
Geo a de la réserve !!! Dans sa variable chaîne il peut mettre
2 147 483 648 caractères ( 2 GIGAS octets !) (2 puissance 31)
Comme Geo place tout son fichier texte dans une variable
(j'aurais préféré un tableau ou un objet Dictionary mais bon)
il peut s'amuser à le charger d'un coup d'un seul ce qui
modifierait sa macro ainsi :
Public Sub Lecture()
Dim MonTexte As String
Open "c:TempReferences.txt" For Binary As #1
MonTexte = Space(LOF(1))
Get #1, , MonTexte
Close #1
End Sub
Mais dans ce cas la chaîne est de longueur fixe et limitée
à 64K ce qui est souvent suffisant pour un fichier texte.
Je continue à préférer l'ouverture wordienne du fichier texte
et l'utilisation du Rechercher, c'est plus simple question
casse. Il faudrait faire des tests comparatifs de rapidité.
Anacoluthe
« Je crois qu'il faudra tout mettre en dictionnaire. »
- VOLTAIRE
cette macro (que je ne trouve pas superfétatoire ;-p) me fait me poser une question : quelle est la taille limite d'une chaine en VBA ? Comme tu lis tout le fichier que tu met dans une seule variable, je me demande s'il ne va pas y avoir explosion de celle ci...
Geo a de la réserve !!! Dans sa variable chaîne il peut mettre 2 147 483 648 caractères ( 2 GIGAS octets !) (2 puissance 31)
Comme Geo place tout son fichier texte dans une variable (j'aurais préféré un tableau ou un objet Dictionary mais bon) il peut s'amuser à le charger d'un coup d'un seul ce qui modifierait sa macro ainsi :
Public Sub Lecture() Dim MonTexte As String Open "c:TempReferences.txt" For Binary As #1 MonTexte = Space(LOF(1)) Get #1, , MonTexte Close #1 End Sub
Mais dans ce cas la chaîne est de longueur fixe et limitée à 64K ce qui est souvent suffisant pour un fichier texte.
Je continue à préférer l'ouverture wordienne du fichier texte et l'utilisation du Rechercher, c'est plus simple question casse. Il faudrait faire des tests comparatifs de rapidité.
Anacoluthe « Je crois qu'il faudra tout mettre en dictionnaire. » - VOLTAIRE
Geo
Bonjour Anacoluthe
Dans sa variable chaîne il peut mettre 2 147 483 648 caractères ( 2 GIGAS octets !) (2 puissance 31)
Il me semblait que c'était limité par la taille mémoire, mais je dis ça de mémoire et la mienne est nettement plus limitée. D'après ce qu'à dit Yvan ce serait une liste de mots, ce ne serait donc pas monumental.
Comme Geo place tout son fichier texte dans une variable (j'aurais préféré un tableau
Ouaip mais la recherche dans un tableau c'est nettement plus compliqué que le instr, sauf si on peut faire une recherche globalement dans un tableau, ce que je ne sais pas. Par contre cela permettrait de repérer le numéro du mot et donc faire des stats sur la recherche.
ou un objet Dictionary
Allons bon, il va falloir que j'apprenne ce que c'est ce truc.
[...]
Je continue à préférer l'ouverture wordienne du fichier texte et l'utilisation du Rechercher, c'est plus simple question casse.
Je n'ai rien contre cette solution qui a l'avantage d'être très simple. Pour la casse il faudrait convertir le texte en majuscules à la lecture et faire la recherche en majuscules aussi. par exemple If InStr(Ucase(T) & vbCrLf, Montexte) > 0 Then
Il faudrait faire des tests comparatifs de rapidité.
Encore faut-il que ce soit un souci.
--
A+
Bonjour Anacoluthe
Dans sa variable chaîne il peut mettre
2 147 483 648 caractères ( 2 GIGAS octets !) (2 puissance 31)
Il me semblait que c'était limité par la taille mémoire, mais je dis ça de
mémoire et la mienne est nettement plus limitée.
D'après ce qu'à dit Yvan ce serait une liste de mots, ce ne serait donc pas
monumental.
Comme Geo place tout son fichier texte dans une variable
(j'aurais préféré un tableau
Ouaip mais la recherche dans un tableau c'est nettement plus compliqué que
le instr, sauf si on peut faire une recherche globalement dans un tableau,
ce que je ne sais pas.
Par contre cela permettrait de repérer le numéro du mot et donc faire des
stats sur la recherche.
ou un objet Dictionary
Allons bon, il va falloir que j'apprenne ce que c'est ce truc.
[...]
Je continue à préférer l'ouverture wordienne du fichier texte
et l'utilisation du Rechercher, c'est plus simple question
casse.
Je n'ai rien contre cette solution qui a l'avantage d'être très simple.
Pour la casse il faudrait convertir le texte en majuscules à la lecture et
faire la recherche en majuscules aussi.
par exemple If InStr(Ucase(T) & vbCrLf, Montexte) > 0 Then
Il faudrait faire des tests comparatifs de rapidité.
Dans sa variable chaîne il peut mettre 2 147 483 648 caractères ( 2 GIGAS octets !) (2 puissance 31)
Il me semblait que c'était limité par la taille mémoire, mais je dis ça de mémoire et la mienne est nettement plus limitée. D'après ce qu'à dit Yvan ce serait une liste de mots, ce ne serait donc pas monumental.
Comme Geo place tout son fichier texte dans une variable (j'aurais préféré un tableau
Ouaip mais la recherche dans un tableau c'est nettement plus compliqué que le instr, sauf si on peut faire une recherche globalement dans un tableau, ce que je ne sais pas. Par contre cela permettrait de repérer le numéro du mot et donc faire des stats sur la recherche.
ou un objet Dictionary
Allons bon, il va falloir que j'apprenne ce que c'est ce truc.
[...]
Je continue à préférer l'ouverture wordienne du fichier texte et l'utilisation du Rechercher, c'est plus simple question casse.
Je n'ai rien contre cette solution qui a l'avantage d'être très simple. Pour la casse il faudrait convertir le texte en majuscules à la lecture et faire la recherche en majuscules aussi. par exemple If InStr(Ucase(T) & vbCrLf, Montexte) > 0 Then
Il faudrait faire des tests comparatifs de rapidité.
Encore faut-il que ce soit un souci.
--
A+
Clément Marcotte
Bonjour,
Deux autres méthodes:
Avec les expressions régulières
Sub ChercherDansUnFichierTexte1() Const ForReading = 1 Dim re As Object, FSO As Object Dim fichierliste As Object, laliste As Object Dim texteachercher As String Dim lareference As String 'Ouvrir le fichier texte et le 'mettre dans une variable unique. Set FSO = CreateObject("scripting.filesystemobject") Set fichierliste = FSO.GetFile("c:mes documentsliste.txt") Set laliste = fichierliste.OpenAsTextStream(ForReading, 0) lareference = laliste.ReadAll 'Utiliser l'objet RE pour 'rechercher la correspondance Set re = CreateObject("vbscript.regexp") 'Différiencer la casse re.ignorecase = False 'Ne rechercher qu'une seule correspondance re.Pattern = Selection If re.test(lareference) Then MsgBox "Le mot se retrouve dans la liste" Else MsgBox "Le mot n'est pas dans la liste" End If Set re = Nothing Set laliste = Nothing Set fichierliste = Nothing End Sub
Avec un objet Dictionary
Sub ChercherDansUnFichierTexte2() Const ForReading = 1, ForAppending = 8 Dim re As Object, FSO As Object, tableau As Variant Dim fichierliste As Object, laliste As Object Dim lareference As Object, i As Integer Dim nombrelignes As Integer, laligne As String Dim letexte As String, ilestla As Boolean ilestla = False Set FSO = CreateObject("scripting.filesystemobject") Set fichierliste = FSO.GetFile("c:mes documentsliste.txt") 'trouver le nombre de lignes 'dans le fichier texte Set laliste = fichierliste.OpenAsTextStream(ForAppending, 0) nombrelignes = laliste.Line - 1 Set laliste = Nothing 'Ouvrir le fichier texte et le 'mettre dans un objet dictionnary. Set laliste = fichierliste.OpenAsTextStream(ForReading, 0) Set lareference = CreateObject("scripting.dictionary") For i = 1 To nombrelignes laligne = laliste.ReadLine lareference.Add laligne, i Next letexte = Selection 'Récupérer la liste des mots à vérifier 'et comparer avec la sélection tableau = lareference.Keys For i = 0 To lareference.Count - 1 If letexte = tableau(i) Then ilestla = True Exit For Else End If Next 'Afficher le résultat Select Case ilestla Case True MsgBox "Le mot se retrouve dans la liste" Case False MsgBox "Le mot n'est pas dans la liste" End Select Set re = Nothing Set laliste = Nothing Set fichierliste = Nothing End Sub
-- On apprend pas à un vieux singe à faire des grimaces "Yvan" a écrit dans le message de news:
Bonjour tout le monde !
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot
sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui
sont stockés dans un fichier txt, séparés par des marques de paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son
contenu et renvoyer une valeur (exemple True) si il y a une correspondance,
et une autre valeur (False par exemple) si il n'y a pas de correspondance ??
Merci d'avance pour votre aide,
Yvan
Bonjour,
Deux autres méthodes:
Avec les expressions régulières
Sub ChercherDansUnFichierTexte1()
Const ForReading = 1
Dim re As Object, FSO As Object
Dim fichierliste As Object, laliste As Object
Dim texteachercher As String
Dim lareference As String
'Ouvrir le fichier texte et le
'mettre dans une variable unique.
Set FSO = CreateObject("scripting.filesystemobject")
Set fichierliste = FSO.GetFile("c:mes documentsliste.txt")
Set laliste = fichierliste.OpenAsTextStream(ForReading, 0)
lareference = laliste.ReadAll
'Utiliser l'objet RE pour
'rechercher la correspondance
Set re = CreateObject("vbscript.regexp")
'Différiencer la casse
re.ignorecase = False
'Ne rechercher qu'une seule correspondance
re.Pattern = Selection
If re.test(lareference) Then
MsgBox "Le mot se retrouve dans la liste"
Else
MsgBox "Le mot n'est pas dans la liste"
End If
Set re = Nothing
Set laliste = Nothing
Set fichierliste = Nothing
End Sub
Avec un objet Dictionary
Sub ChercherDansUnFichierTexte2()
Const ForReading = 1, ForAppending = 8
Dim re As Object, FSO As Object, tableau As Variant
Dim fichierliste As Object, laliste As Object
Dim lareference As Object, i As Integer
Dim nombrelignes As Integer, laligne As String
Dim letexte As String, ilestla As Boolean
ilestla = False
Set FSO = CreateObject("scripting.filesystemobject")
Set fichierliste = FSO.GetFile("c:mes documentsliste.txt")
'trouver le nombre de lignes
'dans le fichier texte
Set laliste = fichierliste.OpenAsTextStream(ForAppending, 0)
nombrelignes = laliste.Line - 1
Set laliste = Nothing
'Ouvrir le fichier texte et le
'mettre dans un objet dictionnary.
Set laliste = fichierliste.OpenAsTextStream(ForReading, 0)
Set lareference = CreateObject("scripting.dictionary")
For i = 1 To nombrelignes
laligne = laliste.ReadLine
lareference.Add laligne, i
Next
letexte = Selection
'Récupérer la liste des mots à vérifier
'et comparer avec la sélection
tableau = lareference.Keys
For i = 0 To lareference.Count - 1
If letexte = tableau(i) Then
ilestla = True
Exit For
Else
End If
Next
'Afficher le résultat
Select Case ilestla
Case True
MsgBox "Le mot se retrouve dans la liste"
Case False
MsgBox "Le mot n'est pas dans la liste"
End Select
Set re = Nothing
Set laliste = Nothing
Set fichierliste = Nothing
End Sub
--
On apprend pas à un vieux singe à faire des grimaces
"Yvan" <Yvan@discussions.microsoft.com> a écrit dans le message de
news:17D1068C-8D1E-4615-A234-3A6301ECCB71@microsoft.com...
Bonjour tout le monde !
Je réalise une macro sous Word 2000, macro qui doit vérifier si le
mot
sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de
mots qui
sont stockés dans un fichier txt, séparés par des marques de
paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et
parcourir son
contenu et renvoyer une valeur (exemple True) si il y a une
correspondance,
et une autre valeur (False par exemple) si il n'y a pas de
correspondance ??
Sub ChercherDansUnFichierTexte1() Const ForReading = 1 Dim re As Object, FSO As Object Dim fichierliste As Object, laliste As Object Dim texteachercher As String Dim lareference As String 'Ouvrir le fichier texte et le 'mettre dans une variable unique. Set FSO = CreateObject("scripting.filesystemobject") Set fichierliste = FSO.GetFile("c:mes documentsliste.txt") Set laliste = fichierliste.OpenAsTextStream(ForReading, 0) lareference = laliste.ReadAll 'Utiliser l'objet RE pour 'rechercher la correspondance Set re = CreateObject("vbscript.regexp") 'Différiencer la casse re.ignorecase = False 'Ne rechercher qu'une seule correspondance re.Pattern = Selection If re.test(lareference) Then MsgBox "Le mot se retrouve dans la liste" Else MsgBox "Le mot n'est pas dans la liste" End If Set re = Nothing Set laliste = Nothing Set fichierliste = Nothing End Sub
Avec un objet Dictionary
Sub ChercherDansUnFichierTexte2() Const ForReading = 1, ForAppending = 8 Dim re As Object, FSO As Object, tableau As Variant Dim fichierliste As Object, laliste As Object Dim lareference As Object, i As Integer Dim nombrelignes As Integer, laligne As String Dim letexte As String, ilestla As Boolean ilestla = False Set FSO = CreateObject("scripting.filesystemobject") Set fichierliste = FSO.GetFile("c:mes documentsliste.txt") 'trouver le nombre de lignes 'dans le fichier texte Set laliste = fichierliste.OpenAsTextStream(ForAppending, 0) nombrelignes = laliste.Line - 1 Set laliste = Nothing 'Ouvrir le fichier texte et le 'mettre dans un objet dictionnary. Set laliste = fichierliste.OpenAsTextStream(ForReading, 0) Set lareference = CreateObject("scripting.dictionary") For i = 1 To nombrelignes laligne = laliste.ReadLine lareference.Add laligne, i Next letexte = Selection 'Récupérer la liste des mots à vérifier 'et comparer avec la sélection tableau = lareference.Keys For i = 0 To lareference.Count - 1 If letexte = tableau(i) Then ilestla = True Exit For Else End If Next 'Afficher le résultat Select Case ilestla Case True MsgBox "Le mot se retrouve dans la liste" Case False MsgBox "Le mot n'est pas dans la liste" End Select Set re = Nothing Set laliste = Nothing Set fichierliste = Nothing End Sub
-- On apprend pas à un vieux singe à faire des grimaces "Yvan" a écrit dans le message de news:
Bonjour tout le monde !
Je réalise une macro sous Word 2000, macro qui doit vérifier si le mot
sélectionné (Mot = Selection.Text) fait partie ou non d'une liste de mots qui
sont stockés dans un fichier txt, séparés par des marques de paragraphe.
Connaissez-vous la procédure pour accéder à ce fichier txt et parcourir son
contenu et renvoyer une valeur (exemple True) si il y a une correspondance,
et une autre valeur (False par exemple) si il n'y a pas de correspondance ??