XL 2016 VBA Tableau de Tableaux - Syntaxe

Dudu2

XLDnaute Barbatruc
Bonjour,

Je n'y arrive pas, rien à faire.
Je veux créer un tableau de tabeaux de variants.
VB:
Sub a()
    Dim t1() As Variant
   
    ReDim t1(1 To 2)
    redim t1(1) (1 to 3, 1 to 1) <- Syntaxe en erreur !
End Sub

Edit: la seule manière que j'ai trouvée de le faire c'est d'affecter un Range:
VB:
t1(1) = ActiveSheet.Range("A1:A3").Value
Mais c'est un pis aller nullissime.
Merci pour l'aide.
 
Dernière édition:
Solution
Re

Solution Bis sans la gestion les erreurs mais en passant par un tableau Temporaire.

VB:
Sub a()
    Dim t1() As Variant
        ReDim t1(1 To 2)
    ' Redimension de la premiére case du tableau t1(1)
    ' ReDim t1(1).t(1 To 3, 1 To 1)
    Dim Ttemp() As Variant
        ReDim Ttemp(1 To 3, 1 To 1)
    ' Methode ci-dessous
        t1(1) = Ttemp
        Erase Ttemp
        ' il n y a plus l' Erreur 2015 "Pour chaque case a la creation de" : t1(1)(1, 1) / t1(1)(2, 1) / t1(1)(2, 1)
        ' Donc lorsque l'on remplis c'est même case c'est correcte : les cases sont vide
        ' Voir ci dessous
            t1(1)(1, 1) = "Case1"
            t1(1)(2, 1) = "Case2"
            t1(1)(3, 1) = "Case3"
        ' Le tableau de tabeaux de...

Efgé

XLDnaute Barbatruc
Bonjour à tous

Sujet sympa qui a été ouvert ici.
J'amène ma pierre à l'édifice en utilisant un dictionnaire de tableaux.
VB:
Sub DicoMultiTab()
Dim i&, J&
Dim D As Object, Sh As Worksheet

Set D = CreateObject("Scripting.dictionary")

For Each Sh In ThisWorkbook.Worksheets
    i = i + 1
    D(i) = Sh.UsedRange
Next Sh

Debug.Print D(1)(1, 2)

For i = LBound(D(2), 1) To UBound(D(2), 1)
    For J = LBound(D(2), 2) To UBound(D(2), 2)
        Debug.Print D(2)(i, J)
    Next J
Next i

End Sub

Cordialement
 

Pièces jointes

  • DicoMultiTab.xlsm
    16.8 KB · Affichages: 5

Dudu2

XLDnaute Barbatruc
Bonjour @Efgé,
Intéressant, je ne savais pas qu'on pouvait placer un objet Range directement dans un item du dictionnaire et y faire référence avec les indices.
Edit: non fait c'est le tableau des valeurs qui s'y place, pas le Range.
En fait j'en sais rien !
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re
Dans le dico se sont les valeurs.
L'interet est de pouvoir générer des tableaux sans en connaitre le nombre ni leurs dimentions.
On peux en supprimer facilement.

patricktoulon à raison, on peux presque tout mettre dans les dicos.

Cordialement
 

Dudu2

XLDnaute Barbatruc
En effet ce sont les valeurs. Que l'on mette:
D(i) = Sh.UsedRange
ou
D(i) = Sh.UsedRange.Value
Il ne stocke pas l'objet mais les valeurs. MsgBox TypeOf D(i) Is Range rend toujours Faux.

Cependant, on peut stocker un objet dans un dictionnaire. Et je sais comment faire ;). Enfin je crois 😁.
 

Efgé

XLDnaute Barbatruc
Re
attention Efgé au ".value" par defaut

Pourtant :
1637407766176.png


Cordialement
 

Dudu2

XLDnaute Barbatruc
ou dic .add dic.count+1,unautresh.usedrange.cells' a tester
Non ça il aime pas.
Mais ma question n'a pas d'intérêt car on peut ajouter un item au Dictionary sans passer par un Dic.Add et simplement en affectant Dic(ID) = ou Set Dic(ID).
Je n'ai pas une très bonne connaissance des Dictionaries.

Et je m'en sors comme ça:
VB:
Sub PutIntoDictionary(Dic As Object, ID As Variant, Chose As Variant)
    If TypeOf Chose Is Object  Then
        Set Dic(ID) = Chose
    Else
        Dic(ID) = Chose
    End If
End Sub

Sub GetFromDictionary(Dic As Object, ID As Variant, Chose As Variant)
    If TypeOf Dic(ID) Is Object  Then
        Set Chose = Dic(ID)
    Else
        Chose = Dic(ID)
    End If
End Sub
 

Discussions similaires

Réponses
12
Affichages
247

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin