Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Fonction calcul du nombre d'un caracère donné dans une plage

ju29250

XLDnaute Nouveau
Bonjour à tous.

Je cherche depuis quelques jours des solutions sur les forums sans trouver de solutions à mon problème. C'est pourquoi je m'en remet à vous.

Je souhaite dans une plage donnée (B6:B20) calculer le nombre de fois ou revient le caractère ° ( à noter que ce caractère n’apparaît jamais seul dans mes cellules mais à la suite de certains mots )

En fait je réalise un projet de suivi d'une saison sportive pour un joueur de football. Dans ce classeur le joueur doit inscrire ° derrière le nom de l'adversaire s'il inscrit un but dans ce match. (Ex : Paris ° ) Et dans une cellule bilan je souhaite insérer une fonction calculant automatiquement le nombre de buts inscrits.
J'ai trouvé la solution suivante :
=NB.SI(B6:B20;"*~°*")

Le problème est que dans le cas où le joueur inscrirait un doublé voire un triplé (Ex: Paris °°°), la formule précitée ne compte qu'une fois le caractère

Je sais qu'il serait plus simple d'insérer une colonne spécifique dans laquelle le joueur tape le nombre de but qu'il inscrit et de faire la somme de cette colonne dans la cellule bilan mais je n'ai plus assez de place sur mon classeur pour effectuer ceci (le projet doit tenir sur une page)

Merci d'avance.
 

Softmama

XLDnaute Accro
Re : Fonction calcul du nombre d'un caracère donné dans une plage

Bonjour,

Je te propose une fonction personnalisée, à copier dans un module standard :
VB:
Function NbCarac(Plage As Range, lettre As String) As Integer
Application.Volatile
Dim i#, j#, c As Range
NbCarac = 0
For Each c In Plage.SpecialCells(xlCellTypeConstants, 23)
    i = 0: j = 0
    Do
      i = InStr(i + 1, c, " " & lettre)
      If i <> 0 Then
        j = i
        Do While Mid(c, j + 1, 1) = lettre
          j = j + 1
        Loop
        NbCarac = NbCarac + j - i '+ 1
        i = j + 1
      End If
    Loop Until i = 0
Next
End Function

Qui s'utilise de la façon suivante :
Dans n'importe quelle cellule, taper
Code:
=NBCARAC(B6:B20;"°")
pour comptabiliser les séries de signes "°" (dès lors qu'elles sont précédées d'un espace) dans la plage B6:B20
 

tdenfert

XLDnaute Impliqué
Re : Fonction calcul du nombre d'un caracère donné dans une plage

Bonjour,

=NB.SI(B6:B20;"*~°")+NB.SI(B6:B20;"*~°?")+NB.SI(B6:B20;"*~°??")+.........

a répéter autant de fois que de but max avec un point d'interrogation en plus à chaque étape.
Je suis sur qu'il y a plus simple mais en attendant ...
 

ju29250

XLDnaute Nouveau
Re : Fonction calcul du nombre d'un caracère donné dans une plage

Softmama : désolé ta solution est très certainement efficace mais je n'ai pas les connaissances suffisantes pour utiliser les codes VBA

tdenfert : merci beaucoup cela fonctionne très bien

_____________________________________________________________________

J'ai également une nouvelle question :

J'ai organisé sur 3 colonnes ceci :
en colonne D le joueur inscrit le nombre de but inscrits par son équipe lors du match
en colonne E le joueur inscrit le nombre de but encaissés par son équipe
en colonne C s'inscrit donc le résultat du match ( victoire , nul , défaite ) grace a la fonction suivante :
=SI(D5-E5>0;"V";SI(D5-E5<0;"D";SI(D5-E5=0;"N")))

Cependant si je tire la poignée de recopiage jusqu'en bas il s'inscrit dans les matches qui ne sont pas encore joués " N " car le classeur prend l'absence de valeur de but inscrit et encaissé comme un 0 à 0 .
Comment faire pour que rien ne s'inscrive dans la colonne résultat tant qu'aucun score n'est inscrit ?
Je sais que c'est possible j'y suis parvenu sur un autre classeur mais sans savoir comment ..
 

hoerwind

XLDnaute Barbatruc
Re : Fonction calcul du nombre d'un caracère donné dans une plage

Bonjour, salut les autres,

En faisant appel à une fonction de Morefunc (à télécharger gratuitement sur la toile) :
Code:
=NBCAR(MCONCAT(B6:B20))-NBCAR(SUBSTITUE(MCONCAT(B6:B20);"°";""))
 

Softmama

XLDnaute Accro
Re : Fonction calcul du nombre d'un caracère donné dans une plage

Re,

Une formule matricielle (à valider par Ctrl+Shift+Entrée) qui fonctionnera si les cellules à comptabiliser n'ont pas d'autres infos derrière les °, qu'il y a un espace devant et pas d'autres :
Fonctionnera pour
Paris °
Nantes °°°
2°auClassement °
Lille
Le_Havre °

ne fonctionnera pas pour
Le Havre °
Paris °° quelles brêles!
2°du Classement

Code:
=SOMME(SI(ESTERREUR(TROUVE(" ";B6:B20));0;NBCAR(B6:B20)-TROUVE(" ";B6:B20)))

EDIT : Ha j suis en retard là, dsl
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…