Comment faire une fonction qui traite un tableau (Array)

Bonjour le forum,

je viens demander l'aide des pros car je n'arrive pas à réaliser ce que je souhaite.

Dans les codes que je développe, j'ai souvent besoin de redimensionner des tableaux à 2 dimensions (Rajout d'une ligne dans la 1ère dimension).

Excel ne permettant de redimensionner que la dernière dimension d'un tableau, j'utilise l'astuce d'ajouter une ligne dans la Dimension 1 du tableau en le transposant.

Du coup, pour ne pas répéter ce code à plusieurs reprises, je souhaite faire une fonction, mais je n'y arrive pas.

Voici mon code :

Public Function Ajout_1_ligne_dans_Tableau_2D() As Variant

Dim Tableau()

Tableau = Application.Transpose(Tableau)
ReDim Preserve Tableau(1 To UBound(Tableau, 1), 1 To UBound(Tableau, 2) + 1)
Tableau = Application.Transpose(Tableau)
Ajout_1_ligne_dans_Tableau_2D = Tableau

End Function

Sub pour tester la fonction :

Sub Test()

'Déclaration
Dim tab_exemple(10, 2)

'Enregistrement des valeurs dans le tableau
For i = 0 To 10
    tab_exemple(i, 0) = Range("A" & i + 2)
    tab_exemple(i, 1) = Range("B" & i + 2)
    tab_exemple(i, 2) = Range("C" & i + 2)
Next

tab_exemple = Ajout_1_ligne_dans_Tableau_2D(tab_exemple)

End Sub

J'ai une erreur de compilation : "Impossible d'affecter à un tableau".

Quelqu'un voit-il l'erreur ?

Si je ne m'abuse, tu n'as pas le droit de définir les dimensions de ton tableau et d'ensuite les modifier.

Tu ne peux donc pas écrire

Dim monTableau(1 to 2, 1 to 2) as Variant

Si plus tard dans ton code tu veux en modifier la dimension.

La solution est la suivante:

Dim monTableau() as Variant
Redim monTableau(1 to 2, 1 to 2)

Et si ultérieurement tu as besoin de changer la dimension de ton tableau, tu écris directement

Redim monTableau( 1 to ubound(monTableau,1) + 1, 1 to 2)

Bonjour,

Sans recouper ce que dit d3d9x, je ne vois pas bien ce que tu veux faire, mais tu appelles en test une fonction qui n'admet pas d'argument avec un argument. Ça ne peut que coincer dès le départ...

Et de grâce ! Inutile de baptiser des procédures "Public", elles le sont toutes par défaut (même dans modules privés) si elles ne sont pas déclarées "Private" (sauf les évènementielles qui sont privées par définition).

Cordialement.

bonjour,

Public Function Ajout_1_ligne_dans_Tableau_2D(tableau) As Variant

tableau = Application.Transpose(tableau)
ReDim Preserve tableau(1 To UBound(tableau, 1), 1 To UBound(tableau, 2) + 1)
tableau = Application.Transpose(tableau)
Ajout_1_ligne_dans_Tableau_2D = tableau

End Function

Sub Test()

'Déclaration
Dim tab_exemple
ReDim tab_exemple(10, 2)

'Enregistrement des valeurs dans le tableau
For i = 0 To 10
    tab_exemple(i, 0) = Range("A" & i + 2)
    tab_exemple(i, 1) = Range("B" & i + 2)
    tab_exemple(i, 2) = Range("C" & i + 2)
Next

tab_exemple = Ajout_1_ligne_dans_Tableau_2D(tab_exemple)

End Sub

Bonjour,

merci pour vos réponses.

@d3d9x :

Excel permet d'écrire ça :

Redim monTableau( 1 to ubound(monTableau,1) + 1, 1 to 2)

Mais pas ça :

ReDim Preserve monTableau(1 To UBound(monTableau, 1) + 1, 1 To 2)

C'est pour cette raison qu'il faut utiliser l'astuce de transposer le tableau afin de redimensionner la 2ème dimensions en préservant les valeurs.

@MFerrand :

J'avoue avoir du mal à comprendre le but de ton post, tu confirmes que mon code ne peut pas fonctionner mais ça je le savais déjà, c'est pour ça que j'avais besoin d'aide

@h2so4 :

Merci, c'est parfait.

A bientôt

Bonjour,

Tu savais que ton code ne fonctionnait pas, puisque erreur... mais pas pourquoi, sinon tu l'aurais rectifié d'emblée.

Je t'indique la raison pour laquelle ton code ne fonctionne pas. S'agissant d'un motif simpliste, il t'était facile de rectifier l'anomalie... Si tu préfères qu'on te tienne par la main pour traverser une rue piétonne ou qu'on te tienne la cuiller pour la porter à ta bouche, il est sûr qu'il ne faut pas compter sur moi ! Ce n'est pas ma conception de l'aide.

Cordialement.

Rechercher des sujets similaires à "comment fonction qui traite tableau array"