Fonction qui permet de compter le nombre d'occurrence d'un caractère particulier

Messages postés
3
Date d'inscription
mardi 26 avril 2011
Statut
Membre
Dernière intervention
27 avril 2011
- - Dernière réponse : cs_ShayW
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
- 27 avril 2011 à 14:54
Bonsoir,

Je cherche à créer une fonction qui me permettra de compter le nombre d'occurrence d'un caractère particulier ("a" par exemple) dans une chaîne quelconque.
J'ai essayé avec cette "fonction" mais aucune valeur ne remonte (si toujours 0 !!!).
Merci de votre aide.


Function renvoie(s As String)
Dim i As Integer
Dim resultat As Integer

resultat = 0
For i = 1 To Len(s)
If Mid(s, i, 1) = a Then
resultat = resultat + 1
End If
Next
End Function

Sub test_renvoie()
Dim s As String ' chaîne de test, donnée par l'utilisateur
Dim nb_de_a As Integer ' nb de a dans s
Dim test As Integer

s = InputBox("Texte ?")
test = renvoie(s)
MsgBox ("nb_de_a = " & test)
End Sub
Afficher la suite 

14 réponses

Meilleure réponse
Messages postés
1212
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
8
1
Merci
Bonjour à tous et désolé de m'immiscer dans la discussion,

à propos du $ pour les fonctions de chaînes, non seulement VB renvoi une chaîne comme le dit Cheyenne, mais en plus il ne perd pas de temps à déterminer le type en entrée, il attend une chaîne et si ce n'en est pas une, il râle.

TOUJOURS, le mettre MEME si c'est facultatif.


Calade

Dire « Merci » 1

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

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

Commenter la réponse de Calade
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
0
Merci
Salut

If Mid(s, i, 1) = a
plutot
If Mid(s, i, 1) = "a"
Commenter la réponse de cs_ShayW
Messages postés
3
Date d'inscription
mardi 26 avril 2011
Statut
Membre
Dernière intervention
27 avril 2011
0
Merci
Bonsoir,

Je cherche à créer une fonction qui me permettra de compter le nombre d'occurrence d'un caractère particulier ("a" par exemple) dans une chaîne quelconque.
J'ai essayé avec cette "fonction" mais aucune valeur ne remonte (si toujours 0 !!!).
Merci de votre aide.


Function renvoie(s As String)
Dim i As Integer
Dim resultat As Integer

resultat = 0
For i = 1 To Len(s)
If Mid(s, i, 1) = a Then
resultat = resultat + 1
End If
Next
End Function

Sub test_renvoie()
Dim s As String ' chaîne de test, donnée par l'utilisateur
Dim nb_de_a As Integer ' nb de a dans s
Dim test As Integer

s = InputBox("Texte ?")
test = renvoie(s)
MsgBox ("nb_de_a = " & test)
End Sub

Je suis désolé mais
If Mid(s, i, 1) = "a"
ne fonctionne toujours pas.
Commenter la réponse de chine38
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
Salut

Inutile de répéter ta question, on avait compris.
Est-ce que tu as réflechis à ce que t'as dit ShayW ?

D'autre part, tu seulement tu ouvrais l'aide de VB, tu saurais que la syntaxe de déclaration ta fonction est incomplète, même si elle peut fonctionner comme ça.
Function renvoie(s As String) As Integer

D'autre part, où, dans ta fonction, renvoies-tu le résultat ?
Nulle part.
Ajoute ceci dans ta fonction :
renvoie = resultat

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
[img]http://allproj
Commenter la réponse de cs_Jack
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
0
Merci
Bonjour ShayW,

Je dirais même plus :

If Mid$
(s, i, 1) = "a"

Bonne continuation,
Cheyenne
Commenter la réponse de cs_cheyenne
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
Oui, le $ est facultatif, ce n'est qu'une histoire de compilation/bibliothèque, mais ça ne coûte rien de le mettre et permet de se rappeler que la fonction renvoie une String.
Commenter la réponse de cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
Tiens, encore plus simple :

maChaine = "Super ce forum de Codes-Sources"
sTemp = Replace(maChaine, "e", "", vbTextCompare)
MsgBox "Nombre de 'e' dans '" & maChaine & "' = " & CStr(Len(maChaine) - Len(sTemp))
Commenter la réponse de cs_Jack
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
Les gars je crois avoir encore plus for
i = split("abcde abcde abcdeeeeee aaa","a")
MsgBox "Nombre de 'a' ubound(i,1)
Commenter la réponse de 4u4me4us
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
0
Merci
Bonjour Jack,

Oui, certes, c'est facultatif, mais il n'empêche que le traitement est plus rapide avec $, car sans le symbole la fonction renvoie un type Variant. Puis c'est une bonne habitude de "typer", ce n'est pas à toi que je vais apprendre cela.

Très astucieux ta solution

Bonne journée,

Cheyenne
Commenter la réponse de cs_cheyenne
Messages postés
3
Date d'inscription
mardi 26 avril 2011
Statut
Membre
Dernière intervention
27 avril 2011
0
Merci
Bonjour tout le monde,

Merci pour votre aide. Je suis un débutant et vos conseils ont été fructueux.
Désolé pour les oublis et erreurs de ma part.
Commenter la réponse de chine38
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
De rien, Chine38

Excellent, 4u4me4us
Commenter la réponse de cs_Jack
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
Chine38 2rien

jack Merci
Commenter la réponse de 4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
Je me suis planté sur le "msgbox" il faut mettre MsgBox "Nombre de 'a' " & ubound(i,1) Sorry Bonne journée !!
Commenter la réponse de 4u4me4us
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
0
Merci
Salut

Il y en a à toutes les sauces
attention de ne pas attraper une indigestion
Commenter la réponse de cs_ShayW