XL 2013 Extraire des donnes dans tableau vba avec join

controlo

XLDnaute Occasionnel
Bonjour les amis ,

J'essaie d extraire des données stockées dans un tableau vba avec la méthode JOIN pour les "concatener" entre elles avec des points virgules .Mais cela ne fonctionne pas , j'ai joint un petit fichier à titre d'exemple .C'est un tableau excel de 5 lignes et 3 colonnes que je stoch dans un tableau vba et ce que je veux faire c'est ressortir ces données de cette façon : a;b;c;d;e;f;g;h;i;j;k;l;m ect.... . Avez-vous une idée ? Merci de votre aide.
 

Pièces jointes

  • lecture tableau pour xld .xlsm
    19.7 KB · Affichages: 11

mapomme

XLDnaute Barbatruc
Supporter XLD
une boucle for each boucle sur l'ensemble de gauche à droite , puis par ligne
dans le modèle de @mapomme "x" est un object row (une ligne de cellule)

et a partir du moment ou comme je viens de dire au dessus (en rouge )
la double boucle imbriquée n'est pas nécessaire
Bonjour à tous,

D'accord, j'ai eu une petite absence. Mais ça a permis à d'aucuns de développer...:)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @mapomme ;)

[Pour ma gouverne]
Point d'Array(*) dans ta version
(*) au sens classique s'entend

Ici c'est quoi le x
Un range ?
(C'est x.Cells qui m'interpelle)
Bonjour @Staple1600,

X est un range (correspondant à une ligne) de la plage du Range("A1:C5").
Juste si on avait voulu concaténer par colonne au lieu de par ligne, on aurait utiliser utiliser :
for each x in Range("A1:C5").columns

or each x in Range("A1:C5") ne permet de contrôler le sens de lecture du tableau. C'est le VBA (avec Excel en arrière fond qui décide comment il parcourt le tableau).
 

Staple1600

XLDnaute Barbatruc
@mapomme
Merci pour les explications
C'est donc de la pomme, sans aRay, Charles ! ;)
(pardon, je viens de finir ma bière)

Tant qu'on y est on pourrait dégainer du Dictionary ?
ou pire (peut-être) du System.Collections.ArrayList ?
(je dis cela juste pour occuper ce samedi soir pluvieux)

;)

 

patricktoulon

XLDnaute Barbatruc
@Efgé
Oui mais je vois rien qui ressemble à de l'Evaluate
(Excepté le [A1]
Et sauf erreur, c'est une variante de syntaxe du message#2, non ?
re
oui entre crochet c'est une évaluation du contenu des crochet
VB:
Sub test()
Set x = [A1]
MsgBox TypeName(x)

'c 'est la meme chose que

Set x = Evaluate("A1")
MsgBox TypeName(x)
End Sub
@Efgé
gagnant ou pas je suis étonné vu ta capture des temps aussi courts
je viens de tester chez moi 2013 32 sur 900 000 lignes ben bye bye ! ça ne s'arrête plus
j'ai été obligé de claquer excel dans les taches

d'accord j'ai que 4 giga de proc et 4 de ram mais quand même ,il faut combien pour avoir des temps pareils 40 GIGA de proc et 200 de ram ?? ;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Avec les deux macros de @Efgé :), j’obtiens ceci:
1667673242621.png

Étrange, non ?
 

patricktoulon

XLDnaute Barbatruc
re
@mapomme
oui là chez toi aussi c'est evaluate qui gagne
par contre je le redis sur 900 000 lignes et 3 colonne comment vous faites pour avoir des temps pareils
je suis sur que chez moi si je l'arrête pas je dépasse les 10 minutes

ca me perturbe au plus au point ça meme si je travaille sur le pc portable il ne devrait pas y avoir une si grande différence
 

Staple1600

XLDnaute Barbatruc
Re

Je ne vois pas le gain de [A1] par rapport à Cells(1).Resize(10000,3)
?
formule EVALUATE sur [A1].Resize(900000, 3) :0,38 SEC
formule VARIABLE TABLEAU sur [A1].Resize(900000, 3) :0,16 SEC
formule Cells(1).Resize(900000, 3) :0,36 SEC
formule TABLEAU sur Cells(1).Resize(900000, 3) :0,16 SEC


PS: je crains que la malédiction du chiffre 13 soit sortie de la boite de Pandore ;)
(cf message#13)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @patricktoulon,

Ma config de PC de bureau :
  • Type de processeur : AMD Ryzen 7 3700X (8 coeurs / 16 threads - 3.60 GHz - Turbo 4.40 GHz - Cache 32 Mo - TDP 65W)
  • Taille mémoire : 16 Go
  • Configuration disque(s) : SSD 1 To
  • carte graphique : MSI GeForce RTX 2070 Tri FROZR
  • Système d’exploitation 64 bits, processeur x64 - Windows 11 Famille
  • Microsoft® Excel® pour Microsoft 365 MSO (Version 2210 Build 16.0.15726.20068) 32 bits
Pas de super micro comme tu vois.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
@mapomme
mais ca ma toujours étonné
mème avec le gamer(paix a son âme il n'avait pas qu'a boire mon café un matin difficile)
je n'avais pas des delay aussi courts pourtant c'etait une fusée avec 32 de ram utilisable et la carte graphique avec sa propre mémoire (8G)
meme avec le patch LAA pour 2013 je reste loin
 

Efgé

XLDnaute Barbatruc
Re
par contre je le redis sur 900 000 lignes et 3 colonne comment vous faites pour avoir des temps pareils
Nous ne testons que la boucle sans alimenter aucune variable et avec une plage vide.
Juste la boucle...
Étrange, non ?
Je pense la version précise d'excel est nécessaire en plus du bousin (PC) utilisé :
Chez moi
1667675133972.png

Et
1667675316461.png
1667675348440.png

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 149
Messages
2 085 771
Membres
102 970
dernier inscrit
JMaurice