Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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
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
Bonjour
Une magnifique formule de Monique que j'ai conservée : pour un texte en A8
=SOMMEPROD((STXT(A8;LIGNE(INDIRECT(1&":"&NBCAR(A8)));1)={"A"."E"."I"."O"."U"."Y"})*1)
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
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
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.
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
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"
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
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.
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.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.