Compter le nombre d'occurence d'un caractere

metalcoder 193 Messages postés jeudi 14 février 2002Date d'inscription 25 mars 2011 Dernière intervention - 25 févr. 2005 à 17:48 - Dernière réponse : cs_charles0508 1 Messages postés vendredi 28 septembre 2007Date d'inscription 3 octobre 2008 Dernière intervention
- 3 oct. 2008 à 06:25
Salut tout le monde

J'aimerais une fonction qui me donne le nombre de fois qu'un caractere existe dans une chaine.

je pourrais le faire avec une boucle et un instr mais peut etre qu'il existe une facon moins lourde pour mon probleme.

merci

Metalcoder
Afficher la suite 

9 réponses

Meilleure réponse
yocrita 21 Messages postés dimanche 25 juillet 2004Date d'inscription 17 août 2007 Dernière intervention - 25 févr. 2005 à 18:54
7
Merci
perso,

je fais ça (et sa marche même pour rechercher le nombre d'occurrences d'une sous-chaine

je te donne la fonction

Function NbOc(Chaine As String, Ch As String, Optional RC As Boolean = False) As Long
If RC Then
NbOc = (Len(Chaine) - Len(Replace(Chaine, Ch, "", , , 0))) / Len(Ch)
Else
NbOc = (Len(Chaine) - Len(Replace(Chaine, Ch, "", , , 1))) / Len(Ch)
End If
End Function

ou:
Chaine=Ta chaine principale
Ch=Ta sous chaine (ou caractère)
RC=Pour Respecter ou non la Casse dans la fonction Replace prédéfinie en visual basic
si RC=False alors majuscule = minuscule
si RC=True alors majuscule /= minuscule

@+
Yocrita,

Merci yocrita 7

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 25 févr. 2005 à 18:45
1
Merci
Salut,
En vb6, je ne connais que :

for i= 1 to len(Tachaine)
if mid$(tachaine,i,1)=caractererecherche then c=c+1
next
msgbox c

Loup Gris
cqui789 261 Messages postés jeudi 13 janvier 2005Date d'inscription 18 mai 2009 Dernière intervention - 26 févr. 2005 à 22:03
1
Merci
perso, je trouve la solution de
yocrita tres bonne, je suis jaloux de ne pas avoir pense aux
len(replace plutot mais je pense qu'elle pourait etre simplifiee :

Function NbOc(Chaine As String, Ch As String, Optional RC As integer = 1) As Long

NbOc = (Len(Chaine) - Len(Replace(Chaine, Ch, "", , , RC))) / Len(Ch)


End Function

ou:
Chaine=Ta chaine principale
Ch=Ta sous chaine (ou caractère)
RC=Pour Respecter ou non la Casse dans la fonction Replace prédéfinie en visual basic
si RC=1 alors majuscule = minuscule
si RC=0 alors majuscule /= minuscule
metalcoder 193 Messages postés jeudi 14 février 2002Date d'inscription 25 mars 2011 Dernière intervention - 28 févr. 2005 à 07:34
1
Merci
Merci de vos réponses, elles marche mais dans mon cas je me suis mal explique et ca me convenait pas

en faite je voulais empecher l'utilisateur de rentre 2 fois par idnavertance le caractere "." dans une zone de texte qui contient un prix (par ex; evite de mettre 12..50 ou 12.50.) etc...

j'ai finalement fait ca comme ca (c'est pas super joli car le curseur se remet au debut de la zone de texte mais au moins ca marche)

Dim text
Private Sub Text1_KeyPress(KeyAscii As Integer)
text = Text1.text
If ((KeyAscii < 48 Or KeyAscii > 57) And (KeyAscii <> 8) And KeyAscii <> 46) Then
KeyAscii = 0
End If
End Sub





Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim essai() As String
essai() = Split(Text1.text, ".")





If UBound(essai) > 1 Then
Text1.text = text
End If
End Sub

Merci encore
Metalcoder
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 27 févr. 2005 à 12:30
0
Merci
En effet, c'est EXCELLENT yocrita et je suis aussi jaloux que cqui789 de ne pas y avoir pensé. Pourtant j'utilise souvent le Replace !

Loup Gris
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 28 févr. 2005 à 20:40
0
Merci
Dans ce cas :

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 46 and instr(Text1.text, ".") >0 Then
KeyAscii = 0
End If
End Sub

Devrait suffire.

Loup Gris
cqui789 261 Messages postés jeudi 13 janvier 2005Date d'inscription 18 mai 2009 Dernière intervention - 1 mars 2005 à 01:26
0
Merci
pour bloquer tout ce qui n'est pas un chiffre ou un deuxieme point,



Private Sub Text1_KeyPress(KeyAscii As Integer)

If InStr("0123456789." & Chr(8), Chr(KeyAscii)) 0 Then KeyAscii 0

If KeyAscii 46 And InStr(Text1.text, ".") > 0 Then KeyAscii 0

End Sub
metalcoder 193 Messages postés jeudi 14 février 2002Date d'inscription 25 mars 2011 Dernière intervention - 1 mars 2005 à 08:21
0
Merci
Merci les gars. La derniere solution marche nickel.

@++

Metalcoder
cs_charles0508 1 Messages postés vendredi 28 septembre 2007Date d'inscription 3 octobre 2008 Dernière intervention - 3 oct. 2008 à 06:25
0
Merci
Bien que les solutions en VB ci-haut fonctionnent... je vous propose de le faire sans aucune macro...

En résumé vous compter le nombre de caractère de votre expression.  Ensuite vous soustrayez le nombre de caractère de cette même expression dans laquelle au préalable vous remplacer le texte cherché par "".  Facile!!!

N occurence = nbcar(concatener(cellules que vous voulez compter les occurences)) - nbcar(substitue(concatener(cellules où vous voulez compter les occurences);texte cherché;""))

Charles

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.