Instructions pour écriture d'un tableau en mémoire dans une Colonne.

néné06

XLDnaute Accro
Bonjour,

Dans un programme, j'ai cette suite d'instructions
qui m'affiche en colonne A, les données d'un tableau "mem1", à partir de la ligne 2

Dim mem1 ()
nbval=20
ReDim mem1(nbval)
For i = 1 To UBound(mem1)
Cells(i + 1, 1) = mem1(i)
Next i

Mais pour nbval important (> 100000), les instructions sont lentes.

J'ai essayé cette instruction qui ne fonctionne pas.

Range("A2:A" & nbval) = mem1() 'affichage


Quelle serait une instruction d'affichage plus rapide ?

Merci!

René
 
Dernière édition:

néné06

XLDnaute Accro
Re : Instructions pour écriture de tableau en mémoire dans une Colonne.

Bonjour David,

J'ai placé ce code et entré nbval = 20, mais l'exécution de cette ligne ma écrit 20 fois la première valeur du tableau "mem1(1)", de la ligne 2 à 21 en colonne A?

Merci!

René
 
Dernière édition:

néné06

XLDnaute Accro
Re : Instructions pour écriture d'un tableau en mémoire dans une Colonne.

re,

Si je place cette instruction, j'ai bien l'affichage correcte qui arrive, mais pas dans la colonne A2 ,mais sur la ligne 2, col A,B,C,D...etc...

Range(Cells(2, 1), Cells(2, UBound(mem1))) = mem1

Que modifier pour l'écriture en colonne A ?

A+

René
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Instructions de copie d'un tableau en mémoire dans une Colonne.

Sans le code et un petit fichier exemple difficile de t'aider... non testé mais essaie en utilisant Application.Transpose.
soit
Code:
[A2].Resize(UBound(mem1)) = Application.Transpose(mem1)
soit
Code:
Range(Cells(2, 1), Cells(2, UBound(mem1))) = Application.Transpose(mem1)
A+
 

david84

XLDnaute Barbatruc
Re : Instructions de copie d'un tableau en mémoire dans une Colonne.

Re

je reprends donc l'idée proposée dans mon 1er message :
Code:
Cells(2, 1).Resize(UBound(mem1)) = Application.Transpose(mem1)
Est-ce ce que tu attends ?
Avais-tu testé ma proposition ?
A+
 

néné06

XLDnaute Accro
Re : Instructions pour écriture d'un tableau en mémoire dans une Colonne.

Re,
j'ai testé aussi la proposition

Cells(2, 1).Resize(UBound(mem1)) = Application.Transpose(mem1)
elle ne fonctionne, mais jusqu'a 65536.
A+

René
 
Dernière édition:

néné06

XLDnaute Accro
Re : Instructions pour écriture d'un tableau en mémoire dans une Colonne.

Re,

Par contre avec un tableau à 2 dimensions , il n'y a pas de problème même jusqu'à un chiffre de 1 000 000.

Comment convertir ce tableau à 2 dimensions en une seule ?

A+

René
 

Pièces jointes

  • Tableau en colonne A.xlsm
    20.3 KB · Affichages: 36
  • Tableau en colonne A.xlsm
    20.3 KB · Affichages: 30
Dernière édition:

david84

XLDnaute Barbatruc
Re : Instructions pour écriture d'un tableau en mémoire dans une Colonne.

Bonjour,

effectivement Transpose a ses limites. Le mieux est donc de charger les données dans un tableau à 2 dimensions. Ce tableau pourra être ensuite directement transféré dans la feuille de calcul.
Comment convertir ce tableau à 2 dimensions en une seule ?
Quel en est l'intérêt ? Si le but est de transférer les données dans la feuille de calcul ce n'est pas la peine.
Ceci dit si tu y tiens vraiment repasse par une boucle (ce n'est pas cela qui augmentera le temps de calcul).

A+
 

néné06

XLDnaute Accro
Re : Instructions pour écriture d'un tableau en mémoire dans une Colonne.

Re,

J'ai fais un test avec :
Range(Cells(2, 1), Cells(2, UBound(mem1))) = mem1 qui me donne pour 1 000 000 environ 3 secondes 6/10.
et
For i = 1 to nbval (1 000 000) qui me donne pour 1 000 000 plus de 25 secondes.


Je préfère la méthode "Range":)

A+

René
 

Pièces jointes

  • Tableau en colonne A.xlsm
    20.8 KB · Affichages: 30
  • Tableau en colonne A.xlsm
    20.8 KB · Affichages: 34

laetitia90

XLDnaute Barbatruc
Re : Instructions pour écriture d'un tableau en mémoire dans une Colonne.

BONJOUR tous :):):)
si je peus me permettre !!

normal que For i = 1 to nbval (1 000 000) plus lent tu refais une boucle pour restituer ton tablo

autrement
le code de David:):) doit marcher
Code:
[A2].Resize(UBound(mem1)) = mem1

on pourrait ecrire

Code:
[a2].Resize(UBound(mem1, 1)).Value = mem1

mais bon dans cas une dimension pas utile
 

Dranreb

XLDnaute Barbatruc
Re : Instructions pour écriture d'un tableau en mémoire dans une Colonne.

Bonsoir

La propriété Value d'un Range de plusieurs cellules est toujours un tableau 2D de Variant base 1. S'il est dans une seule ligne T(1 To 1, 1 To x), s'il est dans une seule colonne T(1 To x, 1 To 1). En sortie vers des cellule un tableau à autre base est toléré, de même qu'un tableau à une dimension pour des cellules dans une seule ligne seulement. Mais si on recharge la plage dans le tableau on le retrouve 2D base 1.
 

Discussions similaires

Statistiques des forums

Discussions
314 631
Messages
2 111 389
Membres
111 119
dernier inscrit
cooc