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

8 réponses

  1. 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
  2. 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
  3. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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

    Merci beaucoup
    0
  7. 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
  8. 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
    1. Clem
       
      Donc mettre:

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

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