Compter les occurences d'un mot

Fermé
Clem - 11 juil. 2012 à 10:03
 Clem - 11 juil. 2012 à 12:09
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

eljojo_e Messages postés 1155 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 14 octobre 2022 153
11 juil. 2012 à 10:24
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
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 1155 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 14 octobre 2022 153
Modifié par eljojo_e le 11/07/2012 à 10:45
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
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
Non en fait ca marche aussi avec un nom.

Merci beaucoup
0
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 1155 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 14 octobre 2022 153
Modifié par eljojo_e le 11/07/2012 à 11:25
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
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 1155 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 14 octobre 2022 153
11 juil. 2012 à 11:35
Non ^^ à la place de "Test" tu met le nom de la feuille où se situe les tableaux
0
^^ 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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
11 juil. 2012 à 11:41
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
11 juil. 2012 à 11:43
je n'avais pas rafraichi, je n'ai donc pas vu la question de la feuille, je regarde
0
Ta formule semble marcher pour le premier tableau, pas pour le deuxième :$
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 11/07/2012 à 12:07
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
Désole si j'ai paru désobligeant :$
Je te suis reconnaissant de tenter de m'aider
0