Redimensionner un tableau multi dimension

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 !

Spitnolan08

XLDnaute Barbatruc
Bonjour à tous,

Dans le cadre d'un autre fil, je dois redimensionner en continu la première dimension d'un tableau Tablo(k, 20) dans le cour de la macro en conservant bien entendu les données précédemment acquises.

Comment puis je faire, étant entendu que Preserve ne permet de redimensionner que la dernière dimension ?

Merci à vous
 
Re : Redimensionner un tableau multi dimension

salut spit 🙂

j'ai peut etreun sparadra en attendant mieux d'un autre xldien

dim tablo() as variant
dim tablosave() as variant

je ne sais pas si cette ordre preserve les valeurs sinon sauvegarde dans tablosave tes valeurs

redim tablo(x,y)
retransfert tes valeurs
redim tablosave(x,y)

bonne soiree
 
Re : Redimensionner un tableau multi dimension

bonjour

on ne peut pas modifier la premier dimension d'un tableau, mais seulement la deuxième.

il te faut donc travailler ton tableau "à l'envers", les lignes à la place des colonnes.

exemple :

Code:
Dim tablo()
Dim i As Byte

For i = 1 To 10
    ReDim Preserve tablo(1 To 2, 1 To i) 'redim 2ème dim du tablo, sans perte de données
    tablo(1, i) = "toto" & i 'test
    tablo(2, i) = "titi" & i 'test
Next i

'renvoi tablo sur la feuille en transposant ligne/colonne
Range("a1:b" & UBound(tablo, 2)) = Application.Transpose(tablo)

salut
 
Re : Redimensionner un tableau multi dimension

Re,

Merci à vous deux.🙂 J'avais bien pensé à l'inverser mais ça ne me plaisait pas trop et j'espérais une autre possibilité...
S'il n'y a pas le choix on va faire comme ça! 🙁
Merci encore.

Bien cordialement

Edit : Pour la transposition : Super, je n'aurais pas pensé à le faire aussi simplement. Cela relativise donc le problème d'inversion des dimensions. 🙂
 
Dernière édition:
Re : Redimensionner un tableau multi dimension

re 🙂

Je ne pense pas que tu puisses faire autrement.

Méfie-toi de la méthode transpose, celle-ci n'accepte pas les tableaux de plus de 5000 éléments (environ).

Pour eviter ce souci, je réecrit la méthode transpose à l'aide d'une fonction personnalisée :

Code:
Option Base 1
Sub Bouton1_QuandClic()
Dim tablo()
Dim tablotranspose
Dim i As Byte

For i = 1 To 10
    ReDim Preserve tablo(2, i) 'redim 2ème dim du tablo, sans perte de données
    tablo(1, i) = "toto" & i 'test
    tablo(2, i) = "titi" & i 'test
Next i


'renvoi du tableau
Range("a1").Resize(UBound(tablo, 2), UBound(tablo, 1)) = transpose(tablo)

End Sub
Code:
Public Function transpose(tablo)
Dim tablotranspose
Dim i As Long
Dim j As Long

ReDim tablotranspose(UBound(tablo, 2), UBound(tablo, 1))

For i = LBound(tablo, 2) To UBound(tablo, 2)
    For j = LBound(tablo, 1) To UBound(tablo, 1)
        tablotranspose(i, j) = tablo(j, i)
    Next j
Next i
transpose = tablotranspose
End Function
salut
 
Re : Redimensionner un tableau multi dimension

bonjour Spinolan,Wilfried,Hervé

l'idée de Wilfried est exploitable

Sub EssaiRedim()
Dim Plg As Variant, PlgTmp As Variant
Dim L As Integer, C As Integer

With Sheets("Feuil1")
Plg = .Range("A4:C" & .Range("A65536").End(xlUp).Row)
End With

PlgTmp = Plg
'une ligne en plus à plg
ReDim Plg(1 To UBound(Plg, 1) + 1, 1 To UBound(Plg, 2))
For L = 1 To UBound(PlgTmp, 1)
For C = 1 To UBound(PlgTmp, 2)
Plg(L, C) = PlgTmp(L, C)
Next C
Next L

End Sub
 
Re : Redimensionner un tableau multi dimension

Re,
Bonsoir et merci Bébère, 🙂

Je n'ai jamais prétendu que la version de Wilfried n'était pas exploitable...
Mais j'ai modifié mon projet en inversant les dimensions : C'est plus difficile à créer mais comme le projet était déjà réalisé dans l'autre sens, il m'a suffit d'une interversion d'indices et ça marche nickel.
Et avec la transposition d'Hervé 1ère version, no souci, sauf si les 5000 éléments sont atteints ce qui pourrait être le cas... puisque je crois que le tableau peut atteindre dans un cas extrème mais peu vraissemblable 400x20 soit 8000 éléments...
Il ne me reste plus qu'à regarder la nouvelle proposition d'Hervé🙂 Bien que je pense qu'il existe plus simple... Si ça se confirme je vous le poste!

Bonne soirée à tous et bon week-end
Pensez au muguet! 😉 Moi je vais l'oublier comme tous les ans 🙄
Bien cordialement
 
Re : Redimensionner un tableau multi dimension

Bonjour le fil,
Bonjour Hervé🙂

Je t'ai senti un peu agacé. Je reviens donc pour t'indiquer une solution moins belle sur le plan de la conception et moins travaillée car sans fonction spéciale mais néanmoins beaucoup plus simple.😀

Code:
Sub Transpose()
Dim i As Integer
Dim j As Integer
For i = 0 To UBound(Tablo, 1)
        For j = 0 To UBound(Tablo, 2)
            Cells(j + 1, i + 1) = Tablo(i, j)
        Next
    Next
End sub
Ce qui revient au même, je te l'accorde..., mais évite quelques lignes😛

A très bientôt Hervé car c'est un plaisir de voir tes codes qui sont de façon systématique (enfin quasi...😉) excellents. Tu boudes plus ? Promis ?
 
Dernière édition:
Re : Redimensionner un tableau multi dimension

Bonjour à tous

@Spitnolan,
j'ai pas l'impression que ton dernier code redimensionne le tableau... en plus chez moi il bogue tout de suite sur une "incompatibilité de type"...

ta ligne n'est pas à l'intérieur d'un bloc "with" :
Code:
.Cells(j + 1, i + 1) = Tablo(i, j)

chez toi ca marche ???

bon après midi
@+
 
Re : Redimensionner un tableau multi dimension

Re Pierrot,
Oui chez moi ça marche.
petit cabotin 😛: pour le . tu as raison...
Pourquoi veux tu que je redimensionne le tableau ?? C'est un tableau qui existe et le seul but recherché était de l'inscrire sur une feuille dans le bon sens; c'est à dire transposé...
Sinon aucun intérêt à le transposer, en tout cas dans mon cas.
Maintenant si le but recherché est de transposer le tableau, alors c'est différent... mais l'objet de ma réponse était de taquiner l'ami Hervé...
Cordialement
 
- 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
9
Affichages
882
Retour