Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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 !

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:
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:
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:
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+
 
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+
 
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:
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

Dernière édition:
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+
 
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

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
 
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.
 
- 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
2
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…