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

Créer des box-plots

Les box-plots sont des petites boites qui permettent de représenter certaines statistiques comme la moyenne et la dispersion.

Par exemple :
exemple de boxplot

Malheureusement, le fichier est en Anglais, mais comme l'interface est très graphique, c'est relativement facile à comprendre.

Consulter la description ici (en Anglais).

Pour télécharger directement le fichier : ici.

A bientôt.

Gaetan Mourmant

Un truc vraiment sympa !

Après un bon mois d'absence, je peux enfin recommencer à poster un peu.

La vie d'un doctorant passionné n'est décidemment pas de tout repos...

Le fichier de cette astuce :
ici

Voici un petit code à ajouter dans la procédure événementielle d'une feuille (clic droit sur l'onglet et choisir "Visualiser le code".

Vous pouvez alors copier ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
For Each n In Application.Names
If Target.Address = Range(n).Address Then
If Left(n.Name, 5) = "lien_" Then
If Right(n.Name, 1) = 1 Then
On Error Resume Next
Range(Left(n.Name, Len(n.Name) - 1) & "2").Value = Range(Left(n.Name, Len(n.Name) - 1) & "1").Value
On Error GoTo 0
Else
On Error Resume Next
Range(Left(n.Name, Len(n.Name) - 1) & "1").Value = Range(Left(n.Name, Len(n.Name) - 1) & "2").Value
On Error GoTo 0
End If
End If
End If
Next
End Sub

Finalement, pour qu'un changement sur une cellule se répercute sur l'autre cellule :

Il suffit de nommer 2 cellules (insertion - nom - définir) :
lenom se compose de :
lien_
puis on tape un nom quelconque
nom_quelconque
puis on tape 1
pour la première cellule

On recommence de même pour la cellule 2, mais en changeant 1 par 2

Par exemple :
Tu vas dans insertion nom définir
tu crée un premier nom :
lien_exemple_1
avec la première cellule
puis tu crée un autre nom :
lien_exemple_2
pour la dernière cellule
et hop, les deux cellules sont liées

ATTENTION, tout le contenu de la cellule sera remplacé. Donc, s'il y a une formule, elle sera supprimée.

A bientot.

Gaetan