Code modulaire avec des tableaux ?

Bonjour,

Je souhaite effectuer un code modulaire (des sub appelant des sub qui elles-mêmes appellent d'autres sub...) pour travailler sur des tableaux. Par exemple une sub "test" dans laquelle il existe un tableau 3x3 et qui appelle trois sub A, B, C :

  • la sub A va multiplier tous les éléments du tableau par 2
  • le sub B va diviser par 3 tous les éléments du tableau (en sortie de A) s'ils sont supérieurs à 15
  • la sub C va copier le tableau dans une feuille excel en partant de la cellule A1

En théorie cela est plutôt simple, mais en pratique :

  • soit je ne compile pas
  • soit les tableaux dans les subs A,B,C sont "locaux" au sein de ces subs et supprimés après leur exécution (si bien qu'en sortie il ne s'est rien passé)
  • soit les subs A,B,C n'arrivent pas à modifier le tableau créé dans la sub test dans laquelle elles sont appelées
  • etc.

J'ai essayé beaucoup de trucs proposés sur internet, rien n'a marché (déclarer en public, faire des redim, des preserve... Rien n'y fait). Quelqu'un aurait-il la solution miracle S.V.P ?

Merci d'avance,

M.

Bonjour maxoup,

Les variables qui sont déclarées en tant que tableau sont passées en ByRef

Pour plus d'explications, fais une recherche sur le net.

klin89

Bonjour,

Un exemple tout simple (comme le dit klin89, par défaut, les arguments en VB sont passer par référence) :

Sub Test()

    Dim Tbl() As Single
    Dim I As Long

    For I = 1 To 3

        ReDim Preserve Tbl(1 To 3, 1 To I)
        Tbl(1, I) = I * 5.7
        Tbl(2, I) = I * 10.5
        Tbl(3, I) = I * 15.3

    Next I

    ProcA Tbl()
    ProcB Tbl()
    ProcC Tbl()

End Sub

Sub ProcA(Tbl() As Single)

    Dim I As Long

    For I = 1 To UBound(Tbl, 2)

        Tbl(1, I) = Tbl(1, I) * 2
        Tbl(2, I) = Tbl(2, I) * 2
        Tbl(3, I) = Tbl(3, I) * 2

    Next I

End Sub

Sub ProcB(Tbl() As Single)

    Dim I As Long

    For I = 1 To UBound(Tbl, 2)

        If Tbl(1, I) > 15 Then Tbl(1, I) = Tbl(1, I) / 3
        If Tbl(2, I) > 15 Then Tbl(2, I) = Tbl(2, I) / 3
        If Tbl(3, I) > 15 Then Tbl(3, I) = Tbl(3, I) / 3

    Next I

End Sub

Sub ProcC(Tbl() As Single)

    Range(Cells(1, 1), Cells(UBound(Tbl, 1), UBound(Tbl, 2))).Value = Tbl()

End Sub

Bonsoir et merci beaucoup pour vos réponses.

Je comprends que les tableaux sont passés par défaut en référence, mais n'est-ce pas ce qu'il me fallait ?

Merci beaucoup Theze, je suis étonné que ton code fonctionne car le mien était quasi-identique (sauf que je n'utilisais pas "redim preserve")

Sinon, est-ce volontaire de n'avoir fait que des boucles simples là où tu aurais pu faire des boucles sur i,j = 1,2,3 x 1,2,3 ?

Bonjour,

Je comprends que les tableaux sont passés par défaut en référence, mais n'est-ce pas ce qu'il me fallait ?

Si bien sûr !

Sinon, est-ce volontaire de n'avoir fait que des boucles simples là où tu aurais pu faire des boucles sur i,j = 1,2,3 x 1,2,3 ?

Oui, c'est juste une démonstration pour que tu comprenne le principe !

Rechercher des sujets similaires à "code modulaire tableaux"