Salut à tous,

J'essaie de faire une fonction qui renvoie true si elle détecte la présence d'un mot précis dans un fichier excel et false si elle ne le trouve pas.

Histoire de ne pas faire un truc trop gourmand (j'ai 50 000 mots à traiter), j'ai essayé de ne pas faire d'itération. La fonction .autofilter me semble idéale pour ça.

La fonction que j'ai renvoie toujours True, voilà le problème. J'ai beau regarder la doc de l'autofilter, je n'arrive pas à faire ce que je veux.

Mon tableau a deux colonnes: les mots et le nombre d'occurences. je mets les entêtes en A1 et B1 dans la sub principale. Lorsque j'applique mon filtre, le mot recherché, s'il est présent, arrive en seconde ligne, mais je ne sais pas comment récupérer le numéro de cellule (qui n'est bien sûr pas A2)

Voici le code en l'état, que j'ai écrit à partir d'exemple piochés par ci par là:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
Dim XL As New Excel.Application
Dim classeur As Excel.Workbook
Dim feuille As Excel.Worksheet
 
Sub principale ()
 
    Set classeur = XL.WorkBooks.Add
    Set feuille = classeur.Worksheets.Add
 
    XL.Visible = True
    classeur.SaveAs "M:\Mafeuille.xlsx"
    feuille.Range("A1") = "Mots"
    feuille.Range("B1") = "Occurences"
 
'Le reste du code je vous l'épargne vu qu'il n'a rien à voir avec le pépin. J'appelle juste la fonction TestNewWord avec le mot en argument.
End Sub
 
Function TestNewWord(ByVal word As String) As Boolean
 
With feuille.UsedRange
        'la recherche
        .AutoFilter Field:=1, Criteria1:=word
        'le if je trouve alors je renvoie True
        If WorksheetFunction.CountBlank(.Columns(1)) > 0 Then
          TestNewWord = False
        Else
           TestNewWord = True
        End If
        'j'enlève le filtre
        .AutoFilter
End With
 
End Function
Notez que les déclarations en début de code sont là parce que c'est une macro word. Je poste ici car je pense que ça ne change pas grand chose sur le principe.

Merci par avance pour votre aide :-)