Compter le nombre d'occurence d'un caractere

Messages postés
193
Date d'inscription
jeudi 14 février 2002
Statut
Membre
Dernière intervention
25 mars 2011
- - Dernière réponse : cs_charles0508
Messages postés
1
Date d'inscription
vendredi 28 septembre 2007
Statut
Membre
Dernière intervention
3 octobre 2008
- 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
Messages postés
21
Date d'inscription
dimanche 25 juillet 2004
Statut
Membre
Dernière intervention
17 août 2007
8
10
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,

Dire « Merci » 10

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 208 internautes nous ont dit merci ce mois-ci

Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
2
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
Messages postés
261
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
18 mai 2009
2
2
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
Messages postés
193
Date d'inscription
jeudi 14 février 2002
Statut
Membre
Dernière intervention
25 mars 2011
1
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
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
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
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
10
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
Messages postés
261
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
18 mai 2009
2
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
Messages postés
193
Date d'inscription
jeudi 14 février 2002
Statut
Membre
Dernière intervention
25 mars 2011
1
0
Merci
Merci les gars. La derniere solution marche nickel.

@++

Metalcoder
Messages postés
1
Date d'inscription
vendredi 28 septembre 2007
Statut
Membre
Dernière intervention
3 octobre 2008
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