Compter le nombre de fois qu'un mot est présent dans un classeur

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

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

Rétablir le vérificateur de compatibilité

Bonjour,

Si vous travaillez sur excel 2007 et que vous continuez d'enregistrer vos fichier en format .xls pour des raisons de compatibilité avec d'autres utilisateurs, vous voyez souvent apparaître la boîte de dialogue suivante :

Verificateur de compatibilite

Vous pouvez supprimer cette boite de dialogue de deux manières (à ma connaissance) :
- modifier le fichier pour que les fonctionnalités purement 2007 ne s'y retrouvent plus;
- ou bien décocher la case "Vérifier la compatibilité lors de l'enregistrement de ce classeur".

Dans ce dernier cas, la seule solution (mais il doit surement y en avoir d'autres) pour rétablir cette case à cocher par la suite, consiste à enregistrer le fichier en xlsm (pas en xlsx si votre fichier contient des macros) et ensuite de le réenregistrer en .xls.

Si vous connaissez un autre moyen, je serai ravi de le connaître !

A bientôt

Gaetan

Sur les dangers du tri horizontal

Si vous ne connaissez pas encore, vous pouvez trier une plage de cellules horizontalement et non verticalement, comme c'est habituellement le cas.

Par exemple :
1 3 2 4
1 3
2 6
3 9
4 12
5 15
6 18
7 21
8 24
9 27
10 30

Avec en 4e colonne la formule suivante :
=B2*3

Maintenant, pour trier horizontalement, vous allez dans les données, puis choisir de trier. Dans les options, vous choisissez de trier de gauche à droite

Ce qui vous donne :
1 2 3 4
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0

On voit donc que les colonnes sont maintenant dans l'ordre de la première ligne : 1 2 3 4

Avec comme formule en colonne 4 :
=B2*3

Donc, la formule n'a PAS été ajustée lors du tri !!!

Si jamais vous devez utiliser cette options de tri, gardez dans un coin de votre mémoire cette particularité !

A bientot

Gaetan