Syntaxe Basic, tableau à plusieurs dimensions

Bonjour
Je soumet à votre sagacité ce petit souci de Basic
Je ne dois pas bien comprendre la gestion des tableaux à plusieurs dimensions

Libre Office 7.1.8.1 sous Windows 11

Pourquoi cette syntaxe ne fonctionne pas ?

Dim tData() as variant
Dim tLigne() as variant
Dim tListe() as variant
Dim tNew(19)
…
tData = oPlage.getDataArray()
…
redim preserve tListe(p)
For noLigne = 1 to p
 tLigne = tData(noLigne)
 tNew(0) = tLigne (0) 'auteurs
 tNew(1) = tLigne (1) 'tri auteur
…
 tNew(17) = tLigne (17) 'uuid
 tNew(18) = tLigne (4) 'isbn
 tNew(19) = tLigne (5) 'identifiants
 
 tListe(noLigne) = tNew
next noLigne

le tableau tListe contient bien p lignes mais c’est la dernière ligne de tData qui est est dupliquée p fois

alors que celle_ci fonctionne

Dim tData() as variant
Dim tLigne() as variant
Dim tListe(2500, 19) as variant

tData = oPlage.getDataArray()
…
redim preserve tListe(p, 19)

For noLigne = 1 to p
tLigne = tData(noLigne)
tListe(noLigne, 0) = tLigne (0) 'auteurs
tListe(noLigne, 1) = tLigne (1) 'tri auteur
…
tListe(noLigne, 17) = tLigne (17) 'uuid
tListe(noLigne, 18) = tLigne (4) 'isbn
tListe(noLigne, 19) = tLigne (5) 'identifiants

next noLigne

Là, j’ai bien mon tableau tData, avec les colonnes interverties

Avec tous remerciements

Bonne année, bonne santé à tous

Bonjour @JeanLuc

C’est un cas “classique” en programmation : différence entre passage par valeur ou par référence. Dans le premier exemple à chaque ligne tu “passes” tNew.

 tListe(noLigne) = tNew

Un “pointeur” est gardé sur tNew donc quand tu le modifies, la ligne “précédente” reflète la modification.
C’est plus difficile à expliquer qu’à visualiser si tu exécutes ta macro en mode pas à pas en mettant des “témoins” sur tes variables.

Meilleurs voeux à toi aussi :slight_smile:

Cordialement

Merci pour votre réponse
Encore que, pour moi, ceci s’applique plutôt à la transmission des paramètres.

Bonne soirée