Dictionnaire de tableaux

Bonjour à tous,

Afin de simplifier mon code avec de nombreux tableaux je les répertorie dans un dictionnaire, cela permet de minimiser le nombre de variable et donne un aspect dynamique qui est totalement configurable en nombre par l'utilisateur. J'utilise un code de la sorte afin de charger mon dictionnaire (légèrement différent mais dans le principe) : val correspond à une string défini par l'utilisateur à travers un userform

   Dim tb(), temp As Variant, wb As Workbook, i As Integer, dic As Dictionary
   Set dic = New Dictionary
   temp = Split(val, ",")
   For i = 0 To UBound(temp)
        tb = wb.Worksheets(temp(i)).Range(temp(i)).value
        dic.add i, tb
    Next i

Malheureusement lorsque je veux l'utiliser dans une fonction, je n'arrive pas à caster en tableau :

- La fonction :

Private Function FuncTest(tb(), wb As Workbook)
....

- L'appel à la fonction :

tb = FuncTest(dic("1"), wb)

- L'erreur sur le "dic("1")" :

image

En effet, le retour de dic("1") est Variant alors qu'il attend un type tableau (). Sauf que je ne sais pas comment caster sans repasser par une variable de type "dim tb()", ce qui ne sert plus à rien.

Quelqu'un aurait une idée pour résoudre cela ?

Merci d'avance.

Comme mon explication n'est peut-être pas très claire je vous joint un petit fichier exemple de mon problème.

Je voudrais faire comme dans le "LuncherMarchePas", c'est-à-dire sans avoir besoin d'une variable tableau permettant le cast.

4demo.xlsb (26.53 Ko)

Bonjour,

Il est logique que le "LuncherMarchePas" ne fonctionne pas car votre fonction a pour variable un tableau et non un objet dictionnaire.

Par ailleurs, je ne vois pas l'utilité de MyFunc car le code ci-dessous fonctionne parfaitement :

Public Sub LuncherMarche()
    Dim dic As Dictionary, tb()
    Set dic = getDic("A1:C38,B2:C5,A1:D3")
    tb = dic(2)
    tb = Application.Transpose(tb)
    Feuil2.Cells(1, 1).Resize(UBound(tb, 1), UBound(tb, 2)) = tb
End Sub

Il est logique que le "LuncherMarchePas" ne fonctionne pas car votre fonction a pour variable un tableau et non un objet dictionnaire.

Je suis bien d'accord, je l'ai même dis dans mon premier message :

le retour de dic("1") est Variant alors qu'il attend un type tableau ()

d'où le but de ma question et de ce post, peut-on caster en tableau ? c'est-à-dire transformer ce type Objet et type Tableau ?

Par ailleurs, je ne vois pas l'utilité de MyFunc car le code ci-dessous fonctionne parfaitement :

Comme je l'ai dis dans mon message, le code affiché est un exemple ! Dans mon cas précis je fais bien plus que uniquement transposer un tableau. Je réalise une manipulation qui justifie l'utilisation d'une fonction spécifique. C'est pour illustrer le problème

Dans ce cas, modifier ainsi vos instructions :

1- MyFunc

Private Function MyFunc(tb)

2- LuncherMarchePas

tb = MyFunc(dic.Items(2))

En conclusion il est impossible de caster ? On doit utiliser un type Variant ?

On doit utiliser un type Variant ?
Pour la fonction, Oui.

bonjour,

je préfère des dictionaires "late binding" et je déclare à peine les variables

https://excelmacromastery.com/vba-dictionary/

1demo.xlsb (24.33 Ko)
Rechercher des sujets similaires à "dictionnaire tableaux"