Utiliser un Tableau (contenant des valeurs inialisées) dans une fonction

Résolu
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011 - 20 déc. 2010 à 16:36
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 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.

2 réponses

cnt Messages postés 219 Date d'inscription lundi 21 novembre 2005 Statut Membre Dernière intervention 20 décembre 2010 1
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

etc........

CNTJC
3
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 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
0
Rejoignez-nous