Retourner variable depuis fonction
Bonjour,
J'ai un code pas du tout optimisé, et j'aimerais retourner une variable depuis celui-ci mais cela bloque, des idées ?
Sub Button2_Click()
Dim CT As String
Dim CTmp As String
Dim Tipe As String
Dim un As String
Dim deux As String
Dim trois As String
Dim quatre As String
Dim cinq As Integer
Dim six As Integer
Dim sept As Integer
Dim huit As Integer
Dim neuf As Integer
Dim dix As Integer
Dim onze As Integer
Dim total As Integer
total = 0
Dim reste As Integer
Dim tmp As Integer
tmp = 0
Dim nombre As Integer
CT = InputBox(CT)
If Len(CStr(CT)) = 11 Then
'initialiser variable de traitement'
CTmp = CT
'attribuer chaque numéro à une variable'
un = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
deux = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
trois = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
quatre = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
cinq = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
six = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
sept = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
huit = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
neuf = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
dix = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
onze = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
Call Module1.lettre(un)
MsgBox (nombre)
total = nombre
Call Module1.lettre(deux)
MsgBox (nombre)
total = total + nombre * 2
Call Module1.lettre(trois)
MsgBox (nombre)
total = total + nombre * 4
Call Module1.lettre(quatre)
MsgBox (nombre)
total = total + nombre * 8
total = total + cinq * 16 + six * 32 + sept * 64 + huit * 128 + neuf * 256 + dix * 512
reste = total Mod 11
If reste = onze Then
MsgBox ("numéro valide")
Else
MsgBox ("numéro INVALIDE !!!!")
End If
Else
MsgBox ("pas 11 caractères")
End If
End Sub
Sub lettre(lettre)
If lettre Like A Then
nombre = 10
End If
If lettre Like B Then
nombre = 12
End If
If lettre Like C Then
nombre = 13
End If
If lettre Like D Then
nombre = 14
End If
If lettre Like E Then
nombre = 15
End If
If lettre Like F Then
nombre = 16
End If
If lettre Like G Then
nombre = 17
End If
If lettre Like H Then
nombre = 18
End If
If lettre Like I Then
nombre = 19
End If
If lettre Like J Then
nombre = 20
End If
If lettre Like K Then
nombre = 21
End If
If lettre Like L Then
nombre = 23
End If
If lettre Like M Then
nombre = 24
End If
If lettre Like N Then
nombre = 25
End If
If lettre Like O Then
nombre = 26
End If
If lettre Like P Then
nombre = 27
End If
If lettre Like Q Then
nombre = 28
End If
If lettre Like R Then
nombre = 29
End If
If lettre Like S Then
nombre = 30
End If
If lettre Like T Then
nombre = 31
End If
If lettre Like U Then
nombre = 32
End If
If lettre Like V Then
nombre = 34
End If
If lettre Like W Then
nombre = 35
End If
If lettre Like X Then
nombre = 36
End If
If lettre Like Y Then
nombre = 37
End If
If lettre Like Z Then
nombre = 38
End If
Return
End Sub
Merci d'avance
Bonjour,
voici une proposition de correction
Sub Button2_Click()
Dim CT As String
Dim CTmp As String
Dim Tipe As String
Dim un As String
Dim deux As String
Dim trois As String
Dim quatre As String
Dim cinq As Integer
Dim six As Integer
Dim sept As Integer
Dim huit As Integer
Dim neuf As Integer
Dim dix As Integer
Dim onze As Integer
Dim total As Integer
total = 0
Dim reste As Integer
Dim tmp As Integer
tmp = 0
Dim nombre As Integer
CT = InputBox(CT)
If Len(CStr(CT)) = 11 Then
'initialiser variable de traitement'
CTmp = CT
'attribuer chaque numéro à une variable'
un = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
deux = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
trois = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
quatre = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
cinq = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
six = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
sept = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
huit = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
neuf = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
dix = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
onze = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
nombre = lettre(un)
MsgBox (nombre)
total = nombre
nombre = lettre(deux)
MsgBox (nombre)
total = total + nombre * 2
nombre = lettre(trois)
MsgBox (nombre)
total = total + nombre * 4
nombre = (quatre)
MsgBox (nombre)
total = total + nombre * 8
total = total + cinq * 16 + six * 32 + sept * 64 + huit * 128 + neuf * 256 + dix * 512
reste = total Mod 11
If reste = onze Then
MsgBox ("numéro valide")
Else
MsgBox ("numéro INVALIDE !!!!")
End If
Else
MsgBox ("pas 11 caractères")
End If
End Sub
Function lettre(l)
lettre = Asc(UCase(l)) - 55
End Function
Cela ne fonctionne pas ce que je souahirterais c'est qu'en appelant la fonction lettre cela retourne la valeur nombre pour pouvoir l'utiliser dans le calcul de la fonction d'appel
en gros j'aimerais une fonction a qui j'envoie la lettre et qui me renvoi la valeur correspondante après les test
Bonjour,
j'ai transformé ton module lettre en fonction de telle sorte quelle renvoie les valeurs telles que tu l'as programmé à savoir
si la fonction reçoit un A, la fonction retourne 10, si elle reçoit un B, elle retourne un 12 etc ...
si ce n'est pas ce que tu attends, peux-tu donner une exemple qui illustre ce que tu attends de cette fonction ?
le paramètre en entrée, le résultat en sortie et ce qu'il faut faire pour transformer le paramètre en résultat.
j'avoue ne pas avoir compris ce que tu voulais faire avec le programme qui appelle cette fonction.
OK, alors je ne comprend pas comment tu passe de
Sub lettre(lettre)
If lettre Like A Then
nombre = 10
End If
If lettre Like B Then
nombre = 12
End If
If lettre Like C Then
nombre = 13
End If
If lettre Like D Then
nombre = 14
End If
If lettre Like E Then
nombre = 15
End If
If lettre Like F Then
nombre = 16
End If
If lettre Like G Then
nombre = 17
End If
If lettre Like H Then
nombre = 18
End If
If lettre Like I Then
nombre = 19
End If
If lettre Like J Then
nombre = 20
End If
If lettre Like K Then
nombre = 21
End If
If lettre Like L Then
nombre = 23
End If
If lettre Like M Then
nombre = 24
End If
If lettre Like N Then
nombre = 25
End If
If lettre Like O Then
nombre = 26
End If
If lettre Like P Then
nombre = 27
End If
If lettre Like Q Then
nombre = 28
End If
If lettre Like R Then
nombre = 29
End If
If lettre Like S Then
nombre = 30
End If
If lettre Like T Then
nombre = 31
End If
If lettre Like U Then
nombre = 32
End If
If lettre Like V Then
nombre = 34
End If
If lettre Like W Then
nombre = 35
End If
If lettre Like X Then
nombre = 36
End If
If lettre Like Y Then
nombre = 37
End If
If lettre Like Z Then
nombre = 38
End If
Return
End Sub
à ça
Function lettre(l)
lettre = Asc(UCase(l)) - 55
End Function
Bonsoir,
C'est vraiment le foutoir...
Dans le code fourni
A = 10
B = 12
idem on saute de 21 à 23, 32 à 34 ??
... Quelle logique ? Est-ce un codage à la mord moi le nœud ?
On se demande bien quel est le résultat attendu ?
Quel type de saisie est attendue dans CT ?
Quelle est la règle de validation ?
Pour moi le reste d'une division par 11 ne peut jamais être 11 !!!
Sinon si le codage est une suite logique, moi j'en suis là :
Sub Button2_Click()
Dim i%, reste%, total&, CT$, Arr$(1 To 11)
CT = InputBox(CT)
If Len(CStr(CT)) = 11 Then
'initialiser variable de traitement'
For i = 1 To 11
Arr(i) = Asc(Mid(StrConv(CT, 3), i, 1)) - 55
total = total + Arr(i) * (2 ^ ((i - 1)))
Next
reste = total Mod 11
If reste = 11 Then 'impossible !
Else
MsgBox reste
End If
Else
MsgBox ("pas 11 caractères")
End If
End Sub
A+
Alors pour éclairer ta lanterne, cette suite je ne l'ai pas choisi c'est une formule qui sert à vérifier des numéro de conteneur ou les 4 première lettre on leur correspondance selon le tableau donné
je redonne le code allégé
Sub Button3_Click()
Dim CT As String
Dim un As String
Dim deux As String
Dim trois As String
Dim quatre As String
Dim cinq As Integer
Dim six As Integer
Dim sept As Integer
Dim huit As Integer
Dim neuf As Integer
Dim dix As Integer
Dim onze As Integer
Dim total As Integer
total = 0
Dim reste As Integer
CT = InputBox(CT)
If Len(CStr(CT)) = 11 Then
'attribuer chaque numéro à une variable'
un = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
deux = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
trois = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
quatre = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
cinq = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
six = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
sept = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
huit = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
neuf = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
dix = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
onze = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
reste = (lettre(un) + lettre(deux) * 2 + lettre(trois) * 4 + lettre(quatre) * 8 + _
cinq * 16 + six * 32 + sept * 64 + huit * 128 + neuf * 256 + dix * 512) Mod 11
If reste = onze Then
MsgBox ("numéro valide")
Else
MsgBox ("numéro INVALIDE !!!!")
End If
Else
MsgBox ("pas 11 caractères")
End If
End Sub
Function lettre(l)
lettre = Asc(UCase(l)) - 55
End Function
et "onze" est le nom de la onzième variable du conteneur
le dernier chiffre quoi
en gros je prend le premier chiffre je l'affecte a 1variable puis je le supprime et après je travaille avec les variables afin de savoir si cela respecte la formule ou non
lettre = Asc(UCase(l)) - 55
je revient dessus mais je en comprend vraiment pas comment tu passe de ma série à la "'("'/ à juste une ligne o-O
Bonsoir,
Cette formule c'est juste dans l'hypothèse d'une suite de valeur continue si les omissions que je signale (11,22,33) sont valide, ça change tout (au moins pour moi). Je n'ai pas trop épluché le code de h2so4 mais je suppose qu'il à fait la même erreur.
Sinon le reste d'une division par 11 ne peut jamais être 11 !!!
reste = total Mod 11
If reste = 11 Then 'impossible !
Pour pouvoir tester il faut que tu nous donne quelques exemple de CT valide et de CT invalide.
A+
La macro corrigé pour tenir compte des valeurs 11 22 33 qui sont absentes dans la liste de valeurs.
Sub Button2_Click()
Dim i%, reste%, total&, CT$, Arr(1 To 11), Tablo, ii%
Tablo = Split("0 10 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 34 35 36 38")
CT = InputBox(CT)
'conversion de la saisie en majuscule
CT = StrConv(CT, 1)
If Len(CStr(CT)) = 11 Then
'initialiser variable de traitement'
For i = 1 To 11
'valeur de la lettre
Arr(i) = Tablo(Asc(Mid(CT, i, 1)) - 64)
total = total + (Arr(i) * (2 ^ ((i - 1))))
Next
reste = total Mod 11
If reste = 11 Then 'impossible !
Else
MsgBox reste
End If
Else
MsgBox ("pas 11 caractères")
End If
End Sub
Mais en l'absence de réponse, je ne sais toujours pas ce qu'il faut faire de ton reste car
reste mod 11 varie toujours entre 0 et 10 et ne peux jamais être égal à 11...
A+
CODE: TOUT SÉLECTIONNER
lettre = Asc(UCase(l)) - 55
je revient dessus mais je en comprend vraiment pas comment tu passe de ma série à la "'("'/ à juste une ligne o-O
j'ai effectivement lu trop vite le code, j'ai supposé une série continue. je n'ai pas mis mes bons yeux. c'est donc faux !
A 10
B 12
C 13
D 14
E 15
F 16
G 17
H 18
I 19
J 20
K 21
L 23
M 24
N 25
O 26
P 27
Q 28
R 29
S 30
T 31
U 32
V 34
W 35
X 36
Y 37
Z 38
Un numéro de conteneur est toujours de la forme suivante :
ABCD 1234567
le dernier chiffre 7 est le chiffre clé (que prend la variable "onze" car c'est le onzième caractère de la séquence que je dés-os.
donc il peux aller de 0-9
Je ne sais pas si c'est une suite logique je ne me suis pas poser la question et j'étais une brelle en récurrence, mais c'est la suite que l'on ma communiquer ^^
et je teste si le nombre de caractère de la chaine est = à 11 car je vérifie qu'il n'y ai pas eu d'erreur de frappe
Si la suite logique fonctionnais ce code serais ok
Sub Button3_Click()
Dim CT As String
Dim un As String
Dim deux As String
Dim trois As String
Dim quatre As String
Dim cinq As Integer
Dim six As Integer
Dim sept As Integer
Dim huit As Integer
Dim neuf As Integer
Dim dix As Integer
Dim onze As Integer
Dim total As Integer
total = 0
Dim reste As Integer
CT = InputBox(CT)
If Len(CStr(CT)) = 11 Then
'attribuer chaque numéro à une variable'
un = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
deux = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
trois = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
quatre = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
cinq = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
six = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
sept = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
huit = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
neuf = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
dix = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
onze = Left(CT, 1)
CT = Right(CT, Len(CStr(CT)) - 1)
reste = (lettre(un) + lettre(deux) * 2 + lettre(trois) * 4 + lettre(quatre) * 8 + _
cinq * 16 + six * 32 + sept * 64 + huit * 128 + neuf * 256 + dix * 512) Mod 11
If reste = onze Then
MsgBox ("numéro valide")
Else
MsgBox ("numéro INVALIDE !!!!")
End If
Else
MsgBox ("pas 11 caractères")
End If
End Sub
Function lettre(l)
lettre = Asc(UCase(l)) - 55
End Function
bonjour,
ben voilà si tu nous dis tout...
J'ai modifié la macro pour un code du type "ABCD1234567"
Sub Test()
Dim i%, reste%, total&, CT$, Arr(1 To 11), Tablo, ii%
Tablo = Split("0 10 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 34 35 36 38")
CT = InputBox(CT)
'conversion de la saisie en majuscule
CT = StrConv(CT, 1)
If Len(CStr(CT)) = 11 Then
'initialiser variable de traitement'
For i = 1 To 4
'valeur de la lettre
Arr(i) = Tablo(Asc(Mid(CT, i, 1)) - 64)
total = total + (Arr(i) * (2 ^ ((i - 1))))
Next
For i = 5 To 11
'valeur des chiffres
Arr(i) = CByte(Mid(CT, i, 1))
total = total + Arr(i) * (2 ^ ((i - 1)))
Next
reste = total Mod 11
If reste = 11 Then 'impossible !
Else
MsgBox reste
End If
Else
MsgBox ("pas 11 caractères")
End If
End Sub
En revanche, ça ne change rien au fait que reste ne peut JAMAIS être égal à 11 !
Le reste d'une division par 11 ne peut JAMAIS être 11
Tu peux tourner ça dans tout les sens et consulter tous les forums de la terre, je te parie une bière contre un coup de pied au cul que tu ne trouveras pas quelqu'un pour prouver le contraire.
Si tu n'es pas encore convaincu tu peux encore essayer ça :
Sub galopin()
Dim total, reste
For total = 1 To 10000000
reste = total Mod 11
If reste = 11 Then 'impossible !
MsgBox reste
End If
Next
MsgBox "Tous les restes d'une division par 11 sont < 11 !"
End Sub
Mais ne compte plus sur moi pour continuer sur ce sujet...
A+
reste ne peux jamais etre égal a 11 mais reste peux etre égal à la variable "onze" car onze est une variable qui correspond au dernier numéro de la chaine de caractère
ok merci je vais regarder cela
Autant pour moi je pense que je n'ai pas été claire :
Je souhaite lorsque j'appel la fonction Lettre (avec en argument la lettre en question)
qu'il me retourne le chiffre correspondant que je puisse utiliser dans la macro mère
afin d'éviter d'écrire 4 fois toutes les conditionnelles a=10 b=12 etc
gloutoni a écrit :reste ne peux jamais etre égal a 11 mais reste peux etre égal à la variable "onze" car onze est une variable qui correspond au dernier numéro de la chaine de caractère
Ah ben ça c'est très différent...
Dans ce cas il faut modifier cette ligne
If reste = 11 Then 'impossible ! par :
if reste =Arr(11 Then)
Le reste sans changement.
Comme je n'utilise pas de Function lettre il faut en créer une :
Function lettre(i%)
Tablo = Split("0 10 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 34 35 36 38")
lettre = Tablo(i)
End Function
A+
Je ne comprend pas tout dans ce code mais merci cela fonctionne à merveille
Sub Test()
Dim i%, reste%, total&, CT$, Arr(1 To 11), Tablo, ii%
Tablo = Split("0 10 12 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 29 30 31 32 34 35 36 38")
CT = InputBox(CT)
'conversion de la saisie en majuscule
CT = StrConv(CT, 1)
If Len(CStr(CT)) = 11 Then
'initialiser variable de traitement'
For i = 1 To 4
'valeur de la lettre
Arr(i) = Tablo(Asc(Mid(CT, i, 1)) - 64)
total = total + (Arr(i) * (2 ^ ((i - 1))))
Next
For i = 5 To 11
'valeur des chiffres
Arr(i) = CByte(Mid(CT, i, 1))
total = total + Arr(i) * (2 ^ ((i - 1)))
Next
reste = total Mod 11
If reste = Arr(11) Then
MsgBox ("valide")
Else
MsgBox ("invalide")
End If
Else
MsgBox ("pas 11 caractères")
End If
End Sub
s'il te reste un peu de temps quelques explication sur la partie ... , heu non en dehors des conditionnelles classique je ne comprend rien le tableau le split les 2 for, ou sont les lettres de correspondance ?
Super propre condensé nickel, mais moi pas comprendre, serait-il possible d'avoir quelques éclaircissement svp
Bonjour,
Vous pouvez modifier cette ligne
If Len(CStr(CT)) = 11 Then
de la manière suivante :
If Len(CT) = 11 Then
Explication : Le CStr ne sert à rien puisque la InputBox renvoie toujours du Texte...
Nota : Les variables Arr et Tablo sont des variables complexes de type Array (liste ou tableaux)
Les Array sont un moyens puissant doptimiser votre code...
Le Split transforme la chaine de caractère ("0 10 12...") en liste qui est mémorisée dans Tablo
De la même manière Arr est un Array (vide pour l'instant) destiné à mémoriser plus tard les 11 valeurs (tes fameuses lettres) de chaque caractère.
Pour comprendre le reste du code :
Petit cours de débogage
Si vous regardez la fenêtre de débogage remarquez 2 choses que vous n'utilisez peut-être pas encore :
- La fenêtre d'exécution
- La zone des poins d'arrêt (L'espace gris qui figure à gauche de la fenêtre de code)
Quand vous cliquez sur une ligne de code (par exemple sur la ligne :
CT = StrConv(CT, 1)
Si vous appuyez sur [F9] un gros point rouge apparait.
Si vous appuyez à nouveau sur [F9] le point disparait.
En utilisant judicieusement ces deux zones vous allez pouvoir analyser de nombreuses informations sur le code.
Enfin pour pouvez utiliser l'instruction "Stop"
Placée juste avant le premier Next elle agit comme un point d'arrêt permanent (comme si vous aviez posé un point d'arrêt sur la ligne Next)
Armé de tous ces outils vous allez maintenant pouvoir décortiquer tout le code.
Dans ce qui suit nous n'utiserons que les poins d'arrêt plus facile à manipuler.
Cliquez sur la ligne :
If Len(CT) = 11 Then et posez un point d'arrêt avec [F9] sur la ligne : Le point rouge s'affiche.
Exécutez maintenant la macro en appuyant [F5] et entrez le code "abcd1234567"
La macro s'interrompt aussitot et la ligne ou vous avez inséré le point d'arrêt se met en surbrillance.
Avec la souris survolez (ligne précédente) la variable CT vous verrez s'afficher le contenu de la variable : "ABCD1234567"
Notez que le survol est quelquefois capricieux, il faut parfois cliquer sur l'expression pour lire résultat.
Si vous aviez entré "abcd" en minuscule remarquez que l'instruction CStrConv à bien fait son travail en transformant la chaîne en majuscule.
Survolez maintenant le mot Len vous verrez s'afficher la confirmation que CT comporte bien 11 caractères
Nous aurions pu également utiliser la fenêtre d'exécution et taper :
? Len(CT) puis [Enter]
La fenêtre d'exécution affiche 11
Prenez l'habitude d'effacer à chaque fois aussitot la fenêtre d'exécution.
Toujours dans la fenêtre d'exécution entrez :
? Len(CT) = 11
Le résultat s'affiche immédiatement
Ce qui signifie que la macro va donc pouvoir continuer normalement.
Supprimez maintenant le point d'arrêt et posez-en un autre sur le Next suivant.
Exécutez à nouveau la macro [F5] et entrez le code "abcd1234567"
La macro s'interrompt et le Next se met en surbrillance
La boucle For passe en revue les 4 premiers caractères :
Survolez le i (ligne précédente) : Pour l'instant VBA évalue le premier caractère
Dans la fenêtre d'exécution entrez
? Mid(CT, i, 1)
Vous constatez que le premier caractère est bien un A
Notez que dans cette expression complexe un simple survol ne fonctionnerait pas :
L'usage de la fenêtre d'exécution est alors indipensable.
Attention aux parenthèses : Dans une expression, il doit y avoir autant de parenthèse ouvrantes que fermantes...
Dans la fenêtre d'exécution entrez
Asc(Mid(CT, i, 1))
Constatez que A vaut 65
Dans cette ligne
Arr(i) = Tablo(Asc(Mid(CT, i, 1)) - 64)
l'instruction
Tablo(Asc(Mid(CT, i, 1)) - 64) va donc stocker dans Arr(i) la première valeur stockée dans Tablo
Vérifions en survolant (ou en cliquant) Arr :
Arr(1) contient bien la valeur prévue pour la lettre A
Dans la fenêtre d'exécution entrez :
? Arr(i) * (2 ^ ((i - 1)))
ou
? total
Vous pouvez maintenant entrer [F5] pour analyser le deuxième caractère de votre code ;
Dans la fenêtre d'exécution entrez :
? Arr(2)
et constatez que Arr(2) contient bien la valeur prévue pou B (12) et :
? total
renvoie bien la valeur prévue...
Vous pouvez maintenant poser un point d'arrêt sur le Next suivant pour voir comment sont évalués successivement tous les caractères numériques.
Vous disposez maintenant de tous les outils nécessaires pour comprendre et analyser votre code.
Enfin n'oubliez pas que l'aide de VBA (touche [F1]) peux vous donner des explications détaillés sur les mots clefs VBA.
A+
Bonsoir merci beaucoup pour le code est surtout pour les explications je vais étudier cela en détail.
Merci beaucoup