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à:
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.
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
Merci par avance pour votre aide :-)
Partager