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

Le danger des mises en forme conditionnelles

formation-excel-mise-en-forme-conditionnelles 1Un truc important à savoir, notamment si votre fichier ralentit au fur et à mesure que vous ajoutez des informations.

Lorsque l'on fait un copier - Édition - Collage spécial en format d'une cellule contenant une mise en forme conditionnelle sur une cellule ayant déjà une mise en forme conditionnelle, il n'y a pas remplacement, mais SUPERPOSITION des conditions.

Je travaillais sur un fichier avec plusieurs centaines de cellules de mises en formes conditionnelles simples. Mon code collait les MFC à partir d'un modèle. Donc à chaque réactualisation, ca augmentait d'autant le nombre de MFC dans le fichier... d'où ralentissement et augmentation exponentielle du fichier.

Comme indiqué dans la copie d'écran, vous voyez des centaines de MFC qui sont inutiles 🙂

D'où l'insertion du code suivant pour supprimer les mises en formes conditionnelles avant collage en format :
Selection.FormatConditions.Delete

Si vous êtes certain de ce que vous faites, vous pouvez aussi réinitialiser toutes les MFC de la feuille:

Sub reinitialise_toutes_les_mfc()
If MsgBox("Ceci va réinitialiser toutes les mises en formes conditionnelles de la feuille. Voulez-vous continuer?", vbYesNo, "Attention") = vbYes Then
Cells.FormatConditions.Delete
End If
End Sub

A bientôt.

Gaëtan

Grouper et dégrouper dans Excel 2007

Bonjour,

Il est assez facile de grouper/dégrouper des lignes et de voir ensuite apparaître un petit plus dans les zones de lignes/colonnes.

Ceci permet de rapidement voir les synthèses de totaux et donc le + se trouve en bas de la zone groupé.

Sous 2000 à 2003, il faut d'abord sélectionner les lignes (ou colonnes à grouper), puis aller dans le menu Données, puis grouper.

Voici la procédure sous 2007 (pas de son, panne de micro 😉 ):

Dans le prochain post, je vais proposer une solution alternative fonctionnant sur la base d'un double clic.

A bientot.

Gaetan