Taur33
Messages postés85Date d'inscriptionvendredi 24 septembre 2010StatutMembreDernière intervention20 mai 2011
-
20 déc. 2010 à 16:36
Taur33
Messages postés85Date d'inscriptionvendredi 24 septembre 2010StatutMembreDernière intervention20 mai 2011
-
21 déc. 2010 à 04:03
Bonjour ,
je souhaite créer la fonction suivante :
Public Function Mulpar3(ByVal A As String, ByVal B As String) As String
qui multiplie A(pouvant etre tres grand) par 3.
J'ai donc créer auparavant un tableau contenant les valeurs(0,3,6,9,12,15,18,21,24,27)
(table de 3) que j'initialise au chargement de mon Userform.
Sub inializeT()
Dim T(9) As Byte
For i = 0 To ubound(t)
t(i) = 3 * i
Next i
End Sub
Mon problème c'est que je ne sais pas récupérer chaque valeur t(i) dans ma fonction.
Avec mon code le tableau est vidé.
Voici le code de ma fonction :
Public Function Mulpar3(ByVal A As String, ByVal B As String) As String
Dim T(9) As Byte
Dim Digit As Byte
Dim unite As Byte
Dim Retenue As Byte = 0
Dim Result As Byte = 0
Mulpar3 = ""
For i = Len(A) To 1 Step -1
Digit = CByte(Mid(A, i, 1))
unite = T(Digit - 1)
unite = unite + Result
If Len(unite) = 1 Then
Retenue = 0
Else
Retenue = Mid(unite, 1, 1)
End If
unite = CByte(Mid(unite, Len(unite), 1))
If unite > 10 Then
unite = Mid(unite, Len(unite), 1)
Retenue = Retenue + 1
End If
Mulpar3 = Mulpar3 & Unite
Next
End Function
Merci d'avance.
A voir également:
Utiliser un Tableau (contenant des valeurs inialisées) dans une fonction
cnt
Messages postés219Date d'inscriptionlundi 21 novembre 2005StatutMembreDernière intervention20 décembre 20101 20 déc. 2010 à 19:38
Bonsoir
La déclaration du tableau doit se faire globalement dans la partie code de l'UserForm uniquement.
Private T(9) as Byte
puis la suite
Sub inializeT()
For i = 0 To ubound(t)
t(i) = 3 * i
Next i
End Sub
Public Function Mulpar3(ByVal A As String, ByVal B As String) As String
Dim Digit As Byte
Dim unite As Byte
Dim Retenue As Byte = 0
Dim Result As Byte = 0
Taur33
Messages postés85Date d'inscriptionvendredi 24 septembre 2010StatutMembreDernière intervention20 mai 2011 21 déc. 2010 à 04:03
Super ça fonctionne
Merci pour ton aide cnt.
Voici mon code revu et corrigé :
Module Module2
Private T(9) As Byte
Sub initializeT()
For i = 0 To UBound(T)
T(i) = 3 * i
Next i
End Sub
Public Function Mulpar3(ByVal A As String, ByVal B As String) As String
Dim Digit As Byte
Dim unite As Short
Dim Retenue As Byte = 0
Dim unite_string As String
Mulpar3 = ""
For i = Len(A) To 1 Step -1
Digit = CByte(Mid(A, i, 1))
unite = T(Digit)
unite = unite + Retenue
unite_string = CStr(unite)
If Len(unite_string) = 1 Then
Retenue = 0
Else
Retenue = CByte(Mid(unite, 1, 1))
End If
unite = CShort(Mid(unite_string, Len(unite_string), 1))
If CShort(unite_string) > 10 Then
unite = CShort(Mid(unite_string, Len(unite_string), 1))
End If
If i = 1 And Retenue > 0 Then
Mulpar3 = Retenue & unite & Mulpar3
Else
Mulpar3 = unite & Mulpar3
End If
Next
End Function
End Module
Et dans le code du userForm :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
InitializeT()
End Sub