Suite à la question d'une lectrice, voici un début de solution en vba à cette question, en vidéo et plus bas avec le texte (cliquer ici pour le fichier).
On va donc scanner l'ensemble des feuilles, puis des cellules de chaque feuille.
Pour chaque cellule, on va ensuite rechercher la présence de la chaine de caractère (le mot) et comptabiliser cette présence.
On met ceci dans une fonction, pour pouvoir l'utiliser facilement par la suite, par exemple si on veut faire des statistiques à partir d'une liste de mots à chercher.
Ca donne donc ceci.
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
| Sub recherche()
MsgBox "Ce mot apparaît " & compte_occurence_mot(InputBox("Que recherchez vous ?", "Occurence")) & " fois."
End Sub
Function compte_occurence_mot(mot_que_l_on_recherche As String)
Dim sh As Worksheet
Dim cellule As Range
Dim t As Integer
Dim longueur_du_mot_que_l_on_cherche As Integer
longueur_du_mot_que_l_on_cherche = Len(mot_que_l_on_recherche)
'on scanne toutes les feuilles
For Each sh In ThisWorkbook.Worksheets
'On scanne toutes les cellules de la plage utilisé de la feuille
For Each cellule In sh.UsedRange
'On scanne toutes les lettres de la cellule
If Not (IsError(cellule.Value)) Then
For t = 1 To Len(cellule.Value)
'Si on trouve le mot recherché, on incrémente l'occurence
If Mid(cellule.Value, t, longueur_du_mot_que_l_on_cherche) = mot_que_l_on_recherche Then
compte_occurence_mot = compte_occurence_mot + 1
End If
Next t
End If
Next cellule
Next sh
End Function |
Sub recherche()
MsgBox "Ce mot apparaît " & compte_occurence_mot(InputBox("Que recherchez vous ?", "Occurence")) & " fois."
End Sub
Function compte_occurence_mot(mot_que_l_on_recherche As String)
Dim sh As Worksheet
Dim cellule As Range
Dim t As Integer
Dim longueur_du_mot_que_l_on_cherche As Integer
longueur_du_mot_que_l_on_cherche = Len(mot_que_l_on_recherche)
'on scanne toutes les feuilles
For Each sh In ThisWorkbook.Worksheets
'On scanne toutes les cellules de la plage utilisé de la feuille
For Each cellule In sh.UsedRange
'On scanne toutes les lettres de la cellule
If Not (IsError(cellule.Value)) Then
For t = 1 To Len(cellule.Value)
'Si on trouve le mot recherché, on incrémente l'occurence
If Mid(cellule.Value, t, longueur_du_mot_que_l_on_cherche) = mot_que_l_on_recherche Then
compte_occurence_mot = compte_occurence_mot + 1
End If
Next t
End If
Next cellule
Next sh
End Function
Note : en utilisant la fonction application.find, on doit aussi y arriver, ca fera l'objet d'un prochain post
Note 2 : à la place de faire une recherche par cellule, on peut aussi créer un tableau en VBA (array), ce qui évite de devoir lire chaque cellule et donc on accélère la vitesse de la macro, là encore, ce sera pour une autre fois 
Si vous voyez d'autres manières d'améliorer ce code, n'hésitez pas !
A bientôt
Gaëtan