XL 2016 VBA Tableau de Tableaux - Syntaxe

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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...
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

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:
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
 
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 😁.
 
Re
attention Efgé au ".value" par defaut

Pourtant :
1637407766176.png


Cordialement
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
559
Retour