Compter les occurences d'un mot

Bonjour,

Je butte depuis un certains temps sur le problème suivant:

je possède plusieurs tableaux sur une même feuille (pour des raisons pratiques), et je veux compter dans chacun de ces tableaux le nombre de fois ou un mot apparait. Je ne peux malheureusement pas passer par une formule classique, étant donnée que ma plage va être amenée à changer régulièrement.

Prenons l'exemple suivant:

Marc
Paul
Marc
Marc
Case vide
Paul
Paul
Marc
Marc

Je veux être capable de compter le nombre de fois où "Marc" apparait avant la case vide, celle-ci pouvant apparaitre à des lignes variables suivan l'ajout ou nom de données.
J'ai déja le code suivant:

Public Function compteur(name As String)
Application.Volatile
compteur = 0
Range("C5").Activate
While (ActiveCell.Value <> "")
If ActiveCell.Value = name Then
compteur = compteur + 1
End If
ActiveCell.Offset(1, 0).Select
Wend
End Function


Poutant, quoique je tape, impossible d'obtenir le résultat..

Merci

8 réponses

  1. Bonjour,

    Essaye qqch comme ca :

    Public Function compteur(name as string, colonne, ligne)
    Application.Volatile
    compteur = 0
    Range(colonne & cellule).Activate
    While (ActiveCell.Value <> "")
    If ActiveCell.Value = name Then
    compteur = compteur + 1
    End If
    ligne = ligne + 1
    Wend
    End Function

    Cordialement,
    0
    1. Ca marche pour le premier tableau merci :)

      Mais ca ne va pas marcher pour le deuxième, comme la ligne de début va varier si on rajoute des données dans le premier tableau. Je vais essayer d'adapter ta méthode, ca ne devrait pas etre bien compliqué.

      Encore merci!

      Je reposterais en cas de gros soucis.

      Salut!
      0
      1. Function compteur(name As String, cel) 'cel : tu clique sur la cellule ou tu veu que ca commence

        b = Left(cel.Address, 2)
        c = cel.Row

        Do While (b & c <> "")
        Range(cel.Address).Select
        If Range(b & c).Value = name Then
        compteur = compteur + 1
        End If
        c = c + 1
        If Range(b & c).Value = "" Then Exit Function
        Loop

        End Function
        0
        1. Le soucis c'est que c'est destiné à des personnes qui ne connaissent pas vraiment et ne veulent pas connaitre excel... Donc je voulais faire un truc automatique, en donnant un nom à chaque cellule de début de tableau, les données étant obligatoirement ajoutées à sa suite, comme ca tout s'actualise facilement
          0
          1. Non en fait ca marche aussi avec un nom.

            Merci beaucoup
            0
            1. Je vais commencer a être un peu lourd et je m'en excuse...

              Ca marche très bien, je t'en remercie vivement!

              Mais (désolé :( ) je cherche à appliquer cette formule dans une feuille différente de celle ou le tableau est mis.

              J'ai essayer d'ajouter un argument à ma fonction, Sheet as Worksheet, et de mettre Sheet.Select mais aucune modification..

              Désolé je suis vraiment débutant
              0
              1. Essaye ca :

                Function compteur(name As String, cel, feuille) 'cel : tu clique sur la cellule ou tu veu que ca commence 
                
                If feuille = "" Or IsNull(feuille) Then 
                feuil = ActiveSheet.name 
                Else 
                feuil = feuille 
                End If 
                
                b = Left(cel.Address, 2) 
                c = cel.Row 
                
                Do While (b & c <> "") 
                Sheets(feuil).Range(cel.Address).Select 
                If Sheets(feuil).Range(b & c).Value = name Then 
                compteur = compteur + 1 
                End If 
                c = c + 1 
                If Sheets(feuil).Range(b & c).Value = "" Then Exit Function 
                Loop 
                
                End Function 
                


                Par contre, la formule sera composé comme ca : =compter("valuer";cellule;"Feuille")

                Si tu ne renseigne pas la "feuille", la formule marche pas.
                0
                1. Donc mettre:

                  =compteur("paul"; paulo; "Test")

                  où Test est la feuille contenant les tableaux?
                  Celà me renvois une erreur de type #VALEUR
                  0
                2. Non ^^ à la place de "Test" tu met le nom de la feuille où se situe les tableaux
                  0
                3. ^^ mais si le nom de la feuille où se situent les tableaux c'est Test, je met bien "Test" dans la formule?
                  0
              2. Contributeur
                Bonjour

                essaies

                Function compter_occurence(mot As String, cell_dep As Range) As Integer
                Dim lig_dep As Integer, col As Integer, der_lig As Integer
                
                     lig_dep = cell_dep.Row
                     col = cell_dep.Column
                     der_lig = cell_dep.End(xlDown).Row
                     compter_occurence = Application.CountIf(Range(Cells(lig_dep), Cells(der_lig, col)), mot)
                
                End Function
                0
                1. Contributeur
                  je n'avais pas rafraichi, je n'ai donc pas vu la question de la feuille, je regarde
                  0
                2. Ta formule semble marcher pour le premier tableau, pas pour le deuxième :$
                  0
                3. Contributeur
                  avec le parametre autre feuille
                  Function compter_occurence(onglet As String, mot As String, cell_dep As Range) As Integer   
                  Dim lig_dep As Integer, col As Integer, der_lig As Integer   
                       onglet = Left(onglet, Len(onglet) - 1)   
                       lig_dep = cell_dep.Row   
                       col = cell_dep.Column   
                       der_lig = cell_dep.End(xlDown).Row   
                       With Sheets(onglet)   
                            compter_occurence = Application.CountIf(.Range(.Cells(lig_dep), .Cells(der_lig, col)), mot)   
                       End With   
                  End Function 


                  Ta formule semble marcher pour le premier tableau, pas pour le deuxième :$
                  j'avais testé, imagine toi et j'avais signalé que je n'avais tout lu , faute d'avoir rafraichi
                  Merci pour le temps passé
                  0
                4. Désole si j'ai paru désobligeant :$
                  Je te suis reconnaissant de tenter de m'aider
                  0