Compter les occurences d'un mot

Clem -  
 Clem -
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
A voir également:

8 réponses

eljojo_e Messages postés 1255 Statut Membre 155
 
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
Clem
 
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
eljojo_e Messages postés 1255 Statut Membre 155
 
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
Clem
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Clem
 
Non en fait ca marche aussi avec un nom.

Merci beaucoup
0
Clem
 
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
eljojo_e Messages postés 1255 Statut Membre 155
 
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
Clem
 
Donc mettre:

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

où Test est la feuille contenant les tableaux?
Celà me renvois une erreur de type #VALEUR
0
eljojo_e Messages postés 1255 Statut Membre 155
 
Non ^^ à la place de "Test" tu met le nom de la feuille où se situe les tableaux
0
Clem
 
^^ mais si le nom de la feuille où se situent les tableaux c'est Test, je met bien "Test" dans la formule?
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
je n'avais pas rafraichi, je n'ai donc pas vu la question de la feuille, je regarde
0
Clem
 
Ta formule semble marcher pour le premier tableau, pas pour le deuxième :$
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
Clem
 
Désole si j'ai paru désobligeant :$
Je te suis reconnaissant de tenter de m'aider
0