Lettres (comptage)

  • Initiateur de la discussion JJ1
  • Date de début
J

JJ1

Guest
Bonsoir, je vois qu'il y a un sujet sur "un mot à l'envers", juste par curiosité, Excel sait-il compter les voyelles par ex et les maj/minuscules?
ex:
e A r t o O s i L
donnerait 5 voyelles
6 minuscules et 3 majuscules?
Bonne soirée
 

Staple1600

XLDnaute Barbatruc
Re : Lettres (comptage)

Bonjour le forum


Une fonction VBA pour les voyelles
SOURCE: Vous aimez utiliser VBA avec Excel.
Code:
Function voyelles(chaine As String) As Integer
'
' Compter le nombre de voyelles contenues dans une chaîne de caractères
'-----------------------------------------------
Const voyelle As String = "aeiouy"
Dim nbcar As Integer
Dim ind As Integer
Dim nb As Integer

nbcar = Len(chaine)
nb = 0

For ind = 1 To nbcar
'
' Mid(chaine, ind, 1) : renvoie la lettre en position ind à traiter
' InStr(1, voyelle, Mid(chaine, ind, 1)) : renvoie la position de la lettre parmi les voyelles
' Abs(InStr(1, voyelle, Mid(chaine, ind, 1)) <> 0) : renvoie 1 (grâce à ABS) ou 0 (grâce à ABS)
' (Une comparaison en VBA renvoie -1 ou 0 )

   nb = nb + Abs(InStr(1, voyelle, Mid(chaine, ind, 1)) <> 0) ' **

Next ind
voyelles = nb ' ***
End Function
 

Staple1600

XLDnaute Barbatruc
Re : Lettres (comptage)

Re

Une autre fonction plus complete
SOURCE : Count the Number of Vowels in a String
Public Function VowelCount(ByVal InputString As String) As Long

Dim v(9) As String 'Declare an array of 10 elements 0 to 9
Dim vcount As Integer 'This variable will contain number of vowels
Dim flag As Long
Dim strLen As Long
Dim i As Integer


v(0) = "a" 'First element of array is assigned small a
v(1) = "i"
v(2) = "o"
v(3) = "u"
v(4) = "e"
v(5) = "A" 'Sixth element is assigned Capital A
v(6) = "I"
v(7) = "O"
v(8) = "U"
v(9) = "E"
strLen = Len(InputString)

For flag = 1 To strLen 'It will get every letter of entered string and loop
'will terminate when all letters have been examined

For i = 0 To 9 'Takes every elment of v(9) one by one
'Check if current letter is a vowel
If Mid(InputString, flag, 1) = v(i) Then
vcount = vcount + 1 ' If letter is equal to vowel
'then increment vcount by 1
End If
Next i 'Consider next value of v(i)
Next flag 'Consider next letter of the enterd string

VowelCount = vcount

End Function
 
J

JJ1

Guest
Re : Lettres (comptage)

Bonsoir à tous,
la formule de Monique est géniale, je n'ai pas testé la macro.
Par contre mes lettres sont toutes dans des cellules différentes (A1,B1,C1....) avec resultat en P1,P2 et P3 par ex.
Bonne soirée
 

chris

XLDnaute Barbatruc
Re : Lettres (comptage)

Bonjour
Si je comprends bien tu as une lettre par colonne et tu veux
  • en P1 voyelles : =NB.SI(A1:I1;"A")+NB.SI(A1:I1;"E")+NB.SI(A1:I1;"I")+NB.SI(A1:I1;"O")+NB.SI(A1:I1;"U")+NB.SI(A1:I1;"Y")
  • en P2 majuscules : =SOMME(SI(CODE(A1:I1)=CODE(MAJUSCULE(A1:I1));1;0)) formule matricielle à valider par CTRL shift entrée
  • en P3 minuscules : =SOMME(SI(CODE(A1:I1)=CODE(MINUSCULE(A1:I1));1;0)) formule matricielle à valider par CTRL shift entrée
 

Staple1600

XLDnaute Barbatruc
Re : Lettres (comptage)

Re

N'ayant pas ce soir le courage de traduire

SOURCE:Strings and Manipulations

Number of CAPITAL letters in a cell
(Dave Peterson, worksheet solution posted in Programming, 2003-04-27)
=SUM(LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(ROW(INDIRECT("65:90"))),""))) -- array solution
=SUMPRODUCT(LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(ROW(INDIRECT("65:90"))),""))) -- non array solution
Number of CAPITAL letters in a Range of cells
(Dave Peterson, worksheet solution posted in Programming, 2003-04-27, array solution)
=SUM(LEN(A1:A10) -LEN(SUBSTITUTE(A1:A10,TRANSPOSE(CHAR(ROW(INDIRECT("65:90")))),"")))
Number of CAPITAL letters in a cell or Range of cells (revisited)
Peo Sjoblom 2001-12-25, non array solution
=SUM(LEN($A$1:$A$50)-(LEN(SUBSTITUTE(UPPER($A$1:$A$50),UPPER(B1),""))))
use lower in both places to find number of lower case letters.

Et pour finir apres quelques recherches sur le net
SOURCE:http://www.vbcode.com/code/Stringcounter.zip

Deux fonctions en VBA (une pour compter les voyelles l'autre pour les consonnes)

Code:
Private Function ConsoLetters(s As String) As Long
'Author: Robert Murigu

Dim iCt As Long
Dim iLetterCt As Long
Dim sChar As String * 1

    For iCt = 1 To Len(s)
    
        sChar = UCase(Mid(s, iCt, 1)) 'get current character and make it Uppercase for comparison reasons
     
'        If Asc(sChar) = vbKeyB Or Asc(sChar) = vbKeyC Or Asc(sChar) = vbKeyD Or Asc(sChar) = vbKeyF Or Asc(sChar) = vbKeyG Or _
'          Asc(sChar) = vbKeyH Or Asc(sChar) = vbKeyJ Or Asc(sChar) = vbKeyK Or Asc(sChar) = vbKeyL Or Asc(sChar) = vbKeyM Or _
'          Asc(sChar) = vbKeyN Or Asc(sChar) = vbKeyP Or Asc(sChar) = vbKeyQ Or Asc(sChar) = vbKeyR Or Asc(sChar) = vbKeyS Or _
'          Asc(sChar) = vbKeyT Or Asc(sChar) = vbKeyV Or Asc(sChar) = vbKeyW Or Asc(sChar) = vbKeyX Or Asc(sChar) = vbKeyY Or _
'          Asc(sChar) = vbKeyZ Then
'
'           iLetterCt = iLetterCt + 1
'        End If

'modif Staple
Select Case Asc(sChar)
Case 66 To 68, 70 To 72, 74 To 78, 80 To 84, 86, 87, 88, 90

iLetterCt = iLetterCt + 1
End Select
Next iCt
ConsoLetters = iLetterCt 'return the number of letters
End Function


Private Function VowelLetters(s As String) As Long
'Author: Robert Murigu
Dim iCt As Long
Dim iLetterCt As Long
Dim sChar As String * 1

    For iCt = 1 To Len(s)
    
        sChar = UCase(Mid(s, iCt, 1)) 'get current character and make it Uppercase for comparison reasons
        
'        If Asc(sChar) = vbKeyA Or Asc(sChar) = vbKeyE Or Asc(sChar) = vbKeyI Or Asc(sChar) = vbKeyO Or Asc(sChar) = vbKeyU Then
'            iLetterCt = iLetterCt + 1
'        End If

'modif Staple
Select Case Asc(sChar)
Case 65, 69, 73, 79, 85, 89
iLetterCt = iLetterCt + 1
End Select

Next iCt
    
VowelLetters = iLetterCt 'return the number of vowels

End Function
 
Dernière édition:

Ti_

Nous a quitté
Repose en paix
Re : Lettres (comptage)

salut

Pour compléter les formules ci-dessus, en voici quelques unes qui n'oublient pas les voyelles accentuées et qui ne retiennent que les vraies majuscules.

Attention Chris, dans tes formules, un point, un espace etc. seront considérés comme des majuscules avec la fonction MAJUSCULE().

voici la liste des voyelles reconnues :
"aâäàeêëéèiîïoôöœuûüùy"

Regarde la pièce jointe StatsCar.zip
 
C

Compte Supprimé 979

Guest
Re : Lettres (comptage)

Bonjour tout le monde,

Voici un petit code pour compter les majuscules et minuscules
Code:
Sub CalcMajMin()
  Dim I As Integer, VText As String, VCar As String
  Dim NbMaj, NbMin
  ' Initialisation des variables
  VText = Sheets(1).Range("A1")
  NbMaj = 0: NbMin = 0
  ' Pour chaque lettre de la cellule
  For I = 1 To Len(VText)
    VCar = Mid(VText, I, 1)
    ' Si le caractère est différend de l'espace
    If VCar <> " " Then
      If VCar = UCase(VCar) Then
        ' Compte le nombre de majuscules
        NbMaj = NbMaj + 1
      Else
        ' compte le nombre de minuscule
        NbMin = NbMin + 1
      End If
    End If
  Next
  MsgBox "Le mot contient : " & NbMaj & " majuscule(s) - " & NbMin & " minuscule(s)"
End Sub

Voilà ;)
 

LeBrun

XLDnaute Nouveau
Re : Lettres (comptage)

Bonjour
J'ai moi aussi un soucis au niveau du comptage de voyelle, je dois écrire un programme donné (ce que j'ai fais) mais celui ci ne marche pas , en effet je ne trouve toujours 0) et je n'arrive pas à trouvé la solution à cette algorithme même si je pense que le problème viens des boucles situées dans la fonction.

En espérant que quelqu'un pourra m'aider Merci d'avance.

Sub exercice10_2()


Dim Mot As String
Dim N As Integer

Mot = InputBox("Donnez moi un mot")
N = nbvoy

MsgBox "Le nombre de voyelle est de " & N


End Sub


Function nbvoy() As Integer


voy = "aeiouy"
N = 0

For i = 1 To Len(Mot) Step 1

For j = 1 To Len(voy) Step 1

If voy(j) = Mot(i) Then

N = N + 1
End If
Next j
Next i

nbvoy = N

End Function
 

chris

XLDnaute Barbatruc
Re : Lettres (comptage)

Bonjour

Il y a plusieurs erreurs :

  • tu appelle la fonction nbvoy sans lui passer le mot en argument
  • ta fonction nbvoy ne prévoit pas d'argument : comment peut-elle savoir qu'elle doit traiter Mot ?
  • ta fonction nbvoy considère voy et Mot non pas comme des chaîne mais comme des tableaux selon ta syntaxe voy(j) = Mot(i)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Lettres (comptage)

Bonjour LeBrun et bienvenue sur XLD :)

Comme c'est un exercice, on peut te donner quelques pistes pour compléter ce qu'a écrit chris (que je salue :) )

Une fonction a (la plupart du temps) des arguments en entrée que le code de la fonction va utiliser pour produire un résultat. Ici, il s'agit de ton Mot.

La déclaration de la fonction va ressembler à cela : Function nbvoy(X as string) As integer
Quand on va vouloir compter le nombre de voyelle, il faudra utiliser nbvoy(Mot)

Comme te l'as dit Chris, Mot ET Voy sont des string (Voy n'a d'ailleurs pas été déclaré !) et non des tableaux. On ne peut pas les indicer comme un tableau.

On peut aller voir du côté d'une fonction VBA qui s'apelle MID.
MID("ABC",1 ,1) va renvoyer "B", MID("ABC",2 ,2) va renvoyer "BC"

MID(Unmot, Debut, Nombre) va renvoyer un string extrait de Unmot, commençant à la position Debut et de longueur Nombre)

En faisant varier (comme tu l'as pressenti dans tes deux boucles) Debut de 1 à len(Unmot), tu vas pouvoir parcourir toutes les lettres de Unmot.

Astuce : le mot peut avoir des minuscules ou majuscules, il vaut mieux tout convertir en majuscule ou majuscule pour les comparaisons - mais ça c'est en deuxième temps.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 815
Messages
2 092 326
Membres
105 366
dernier inscrit
beru19781978