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

Signaler
Messages postés
3
Date d'inscription
mardi 26 avril 2011
Statut
Membre
Dernière intervention
27 avril 2011
-
cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
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

14 réponses

Messages postés
1211
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
8
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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
46
Salut

If Mid(s, i, 1) = a
plutot
If Mid(s, i, 1) = "a"
Messages postés
3
Date d'inscription
mardi 26 avril 2011
Statut
Membre
Dernière intervention
27 avril 2011

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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
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
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
Bonjour ShayW,

Je dirais même plus :

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

Bonne continuation,
Cheyenne
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
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))
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
Les gars je crois avoir encore plus for
i = split("abcde abcde abcdeeeeee aaa","a")
MsgBox "Nombre de 'a' ubound(i,1)
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
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
Messages postés
3
Date d'inscription
mardi 26 avril 2011
Statut
Membre
Dernière intervention
27 avril 2011

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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
De rien, Chine38

Excellent, 4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
Chine38 2rien

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

Il y en a à toutes les sauces
attention de ne pas attraper une indigestion