Extraction Une colonne d'un Array

vgendron

XLDnaute Barbatruc
Bonjour à toutes et tous

J'ai déjà été confronté plusieurs fois à ce problème mais par manque de temps (et fainéantise), j'ai toujours contourné.. mais la. j'aimerais bien savoir si c'est possible de faire "plus rapide"

voici le sujet:
après avoir déclaré un tablo() as variant
je colle toutes mes datas de la feuille dans ce tablo ==> tablo=range().value

je bricole ces datas ou pas..
et d'habitude il suffit de faire range("E1").resize() =tablo pour récupérer l'ensemble des données traitées
mais.. de temps en temps, je ne souhaite récupérer qu'UNE seule Colonne de ce tableau
ce que je suis "contraint" de faire c'est une boucle
for i=lbound(tablo) to ubound(tablo)
range("E" &i)= tablo(i,2) ==> 2 étant le numéro de la colonne que je souhaite
next i

y a t il un moyen de récupérer directement SANS boucle TOUTE la colonne?
un truc du genre
Range("E1")=Tablo.column(2)

ci joint un petit fichier pour base de travail..
 

Pièces jointes

  • Exctration colonne array.xlsm
    16.5 KB · Affichages: 29

zebanx

XLDnaute Accro
Bonsoir Nicole, Laetitia90, Vgendron

Merci déjà à Nicole d'avoir complété la réponse de Laetitia90.
Pour ces trois essais.:)

Sur 50000 lignes, vos trois méthodes se traitent en moins de 0.5 secondes.

Pour la première méthode, en boucle for...next, c'est nettement plus long : 28s !
Mais, et on arrive à réduire à 2s en utilisant avant la boucle :
Application.Calculation = xlCalculationManual
(et en rajoutant l'instruction Application.Calculation = xlCalculationAutomatic en fin de code).

Ce n'est pas tout le temps le cas mais bien souvent, cette petite ligne apporte satisfaction pour ceux qui, et je m'inclus dedans, sont toujours instinctivement porté sur le "for...next".
Dans le cas présent, c'est pas mal (sur le timing).

Bonne nuit
zebanx
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@laetitia90
Je sais que ne je suis pas de ce siècle
Mais même en me creusant mes derniers méninges
"l'ami zebanx :)!!!c'est trés bien monte bien en Pce dans le vba"
J'ai rien compris à cette phrase ;)

PS: Au final, c'est quelle solution qu'il faut privilégier ?
Et sinon au pif, cet oiseau là ne peut servir ici par hasard?
CreateObject("System.Collections.ArrayList")
ou sa petite soeur
Ce lien n'existe plus

EDITION; Merci la caféine!
Je viens d'avoir une révélation
leti
Ta phrase ce serait pas :""l'ami zebanx :)!!!C'est très bien, monte bien en puissance dans le vba" ?
J'ai bon ?
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour à tous,

une petite modification de la fonction de nicole permet de se passer du transpose() et de sa limite à 65k :
VB:
Function ExtraitCol(a, col)
  ReDim b(LBound(a) To UBound(a), 1 To 1)
  For i = LBound(a) To UBound(a)
     b(i, 1) = a(i, col)
  Next i
  ExtraitCol = b
End Function
Tant qu'à faire... :)
eric
 

Staple1600

XLDnaute Barbatruc
Bonjour eriiiiic

Et la petite sœur ou son petit frère? (voir mon précédent message)
Me-fourvoie-je?
Suis-je à côté de la plaque?

@leti
Ton like vaut pour un bon? Je suppute que oui car qui ne dit mot, consent et le silence est d'or.
Donc je vais me recoucher ;)
 

zebanx

XLDnaute Accro
Bonjour à tous,

Que de grands intervenants pour un simple copier-coller de colonne (#6) :D
Et l'on peut supposer que toute intervention < 1s n'intéresse pas JOB75, Pierre-Jean...;)

J'ai bien envie quand même de déclarer Laetitia90 gagnante : le copier-coller de la colonne B vers la colonne H, c'est indéniablement... une méthode à retenir :cool: qui va à l'essentiel sur la question posée :
y a t il un moyen de récupérer directement SANS boucle TOUTE la colonne?
CQFD !


Bon we (chers(ères) pourfendeurs(-euses) de code !)
D'autres codes la semaine prochaine (celle-ci fut un peu creuse me semble-t-il...).
 

vgendron

XLDnaute Barbatruc
Hellooo à toutes et tous !
je vois que le sujet vous inspire :-D
@Staple1600 l'idée du ArrayList est à garder pour d'autres sujets plus complexes que j'ai de temps en temps..
ici, un "simple" copier coller me va pour l'instant.

@eriiiic : le piège du Array... effectivement.. c'est un flou qui persiste chez moi.. table, tableau, array...Francais Anglais....
j'aurais du mettre quoi pour etre moins ambigu?

sinon: c'est moi ou le post de nicole a disparu??
en tout cas, merci à toutes et tous
 

Discussions similaires

Réponses
16
Affichages
486

Statistiques des forums

Discussions
312 294
Messages
2 086 884
Membres
103 404
dernier inscrit
sultan87