Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Valeur des lettres

Mapat

XLDnaute Occasionnel
Bonjour

Je m'amuse à compter la valeur de ce que peut représenter un mot par rapport à la position
des lettres qui le composent dans l'alphabet. A =1, B= 2 , Z = 26
J'arrive à calculer cette valeur mais en écrivant ce mot lettre par lettre cellule par cellule
Serait-il possible de calculer cette valeur mais en écrivant le mot complet dans une seule cellule
Voir PJ
Merci et bonne journée
 

Pièces jointes

  • Valeur des lettres.xlsx
    9.3 KB · Affichages: 8

Mapat

XLDnaute Occasionnel
Re
Evidemment ça parait simple
Si peu de lignes pour un beau résultat
Pourrais-tu, si tu as 2 minutes, commenter le code
Je ne sais pas programmer mais c'est toujours intéressant d'essayer de comprendre
Merci et cordialement
 

Efgé

XLDnaute Barbatruc
Re
Voici le code commenté.
Il y a une partie dans le module Thisworkbook et la fonction dans le module 1

Cordialement
 

Pièces jointes

  • Valeur_des_lettres_Commenté.xlsm
    17 KB · Affichages: 12

Mapat

XLDnaute Occasionnel
Re

Merci bien pour ce code avec les commentaires.
C'est intéressant aussi avec formule mais c'est vrai que si il y a un espace, le résultat n'est pas bon
Je prends quand même
Merci à vous deux
Bien cordialement
 

eriiic

XLDnaute Barbatruc
Tout dépend si l'on doit prendre en compte les espaces, les chiffres, les caractères spéciaux, etc....
S'il y a des espaces ce n'est plus UN mot ;-) Je n'avais pas ouvert le fichier...
Sinon il y a Substitue() pour éliminer/remplacer des caractères :
Code:
=SOMMEPROD(CODE(STXT(SUBSTITUE(MAJUSCULE(A2);" ";"");LIGNE(INDIRECT("$1:$"&NBCAR(SUBSTITUE(A2;" ";""))));1))-64)
eric
 

job75

XLDnaute Barbatruc
Bonsoir Mapat, Efgé, eriiiic,

Cette fonction VBA ne comptabilise que les lettres de l'alphabet :
VB:
Dim a 'mémorise la variable

Function SommeLettres&(t)
Dim i%
t = UCase(t) 'majuscules
If Not IsArray(a) Then 'bloc calculé une seule fois pour gagner du temps
    ReDim a(1 To 255)
    For i = 1 To 26
        a(i + 64) = i
    Next
End If
For i = 1 To Len(t)
    SommeLettres = SommeLettres + a(Asc(Mid(t, i, 1)))
Next
End Function
Bonne nuit.
 

Pièces jointes

  • Valeur des lettres VBA(1).xlsm
    21.5 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonjour Mapat, Efgé, eriiiic,

Une solution par formule dans le fichier joint :
Code:
=SOMMEPROD((MatCode-64)*(MatCode>64)*(MatCode<91))
J'ai testé en recopiant le tableau A2:B5 sur 100 000 lignes, durée du recalcul chez moi :

- ce fichier => 2,4 secondes

- fichier du post #12 => 1,2 seconde, la fonction VBA est 2 fois plus rapide.

A+
 

Pièces jointes

  • Valeur des lettres(1).xlsx
    15.7 KB · Affichages: 1

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…