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

Staple1600

XLDnaute Barbatruc
Bonjour

Concatenation sans joint ;)
Code:
Sub test()
Dim Montab
Montab = Cells(1).CurrentRegion.Value
For i = 1 To UBound(Montab, 1)
For j = 1 To UBound(Montab, 2)
tmp = tmp & Montab(i, j) & ";"
Next j
Next i
MsgBox Left(tmp, Len(tmp) - 1)
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour @Efgé

Efgé à dit:
mais sur un grand des lenteurs ont éré constatées.

[petit plaisir personnel du samedi matin]
Comme dirait lautre ;)
Attention, attention
Désormais vous êtes invités à laisser l'état dans l'Array
Où vous l'avez trouvé en entrant
Et puis surtout
N'oubliez pas de me faire envoyer la liste
Des erreurs constatées au F 756 du 72 03 10
N'oubliez pas de me faire envoyer la liste
Des erreurs constatées au F 756 du 72 03 10
C'est le même qui disait aussi
Bourlinguer... errer,
Errer humanum est.
[/petit plaisir personnel du samedi matin]
;)

PS: merci pour les les liens, hop dans ma besace ;)
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour à tous

@Staple1600
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

VB:
Private Sub CommandButton1_Click()
Dim Montab As Variant, T$, element as variant

Montab = Range("A1:C5").Value
For Each element In Montab: T = T & element & ";": Next: T = Mid(T, 1, Len(T) - 1)

MsgBox T
 
End Sub

oserais je dire ici que dans ce contexte nul besoins de variabiliser un tableau
boucler avec la formule "Evaluate ([..]" suffit
Code:
Private Sub CommandButton1_Click()
Dim T$, element

For Each element In [A1:C5]: T = T & element & ";": Next: T = Mid(T, 1, Len(T) - 1)

MsgBox T
  
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
@patricktoulon
Le tiire disait: dans tableau vba avec join
Ce qu'en pays Breton, on nomme Arraynounet ;)
Donc moi j'ai fait dans l'Array (sans et puis avec Joint)
;)

Je suis resté dans le cadre du tableau (je n'ai osé faire un tabula rasa)
Histoire de pas enfreindre les tables de la loi de la Array Sacrée, tablant sur le fait que c'est ce que voulait le demandeur.
Je vous laisse, je dois aller repasser ma nappe Vichy pour ma table IKEA, pour que tout soit prêt quand mes invités passeront à table.
Tu vois le tableau, quoi
;)

@Efgé : mes salutations ;)
 

patricktoulon

XLDnaute Barbatruc
@staple600
ma remarque portait surtout le la double boucle imbriqué inutile dans ce contexte que ce soit sur table ou variant
@Efgé
les idées recues des fois ;)
code utilisé
VB:
Option Explicit
Const lignes = 10000

Sub test()
Dim x As Range
Set p = [A1].Resize(lignes, 3)
For Each x In p.Cells
x = x.Address(0, 0)
Next
End Sub

Sub by_evaluate()
Dim T$, element, tim#
tim = Timer
For Each element In [A1].Resize(lignes, 3): T = T & element & ";": Next: T = Mid(T, 1, Len(T) - 1)

MsgBox "formule EVALUATE sur [A1].Resize(" & lignes & ", 3) :" & vbCrLf & Format(Timer - tim, "#0.00 SEC") & vbCrLf & T
End Sub

 Sub byvarianttableau()
Dim Montab As Variant, T$, element As Variant, tim#
tim = Timer
Montab = Range("A1").Resize(lignes, 3).Value
For Each element In Montab: T = T & element & ";": Next: T = Mid(T, 1, Len(T) - 1)

MsgBox "formule VARIABLE TABLEAU    sur [A1].Resize(" & lignes & ", 3) :" & vbCrLf & Format(Timer - tim, "#0.00 SEC") & vbCrLf & T
 
End Sub
ca ce se joue a rien et dans cette expérience c'est evaluate qui gagne pas de beaucoup certes sur 10 000 lignes mais tout de même
1667662963523.png


a +;)
 

Staple1600

XLDnaute Barbatruc
@patricktoulon
Il n'y a pas de double boucle dans le message#3, non ?
Et personne dans un cadre sensé ne fera une concaténation de 10 000 lignes, puisqu'illisible et intelligilble pour l'oeil humain. ;)
Pour ma part, le contrat est rempli
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
Et arrêtons-nous là avant ce fil n'atteigne 26 pages
[Scroll for ever ;)
 

Efgé

XLDnaute Barbatruc
Re
@patricktoulon
je m'incline bien volontié sur 10 000 lignes
En ne prenant que la boucle sur un nombre conséquent:
VB:
Option Explicit
Const lignes = 900000
Sub by_evaluate()
Dim T$, element, tim#
tim = Timer
For Each element In [A1].Resize(lignes, 3): Next
MsgBox "formule EVALUATE sur [A1].Resize(" & lignes & ", 3) :" & vbCrLf & Format(Timer - tim, "#0.00 SEC")
End Sub
Sub byvarianttableau()
Dim Montab As Variant, T$, element As Variant, tim#
tim = Timer
Montab = Range("A1").Resize(lignes, 3).Value
For Each element In Montab: Next
MsgBox "formule VARIABLE TABLEAU    sur [A1].Resize(" & lignes & ", 3) :" & vbCrLf & Format(Timer - tim, "#0.00 SEC")
End Sub
1667664131122.png
1667664157923.png


Cordialement

Cordialement
 

Staple1600

XLDnaute Barbatruc
Re

Les effluves de mon fer à repasser(*) ont dû m'attaquer le ciboulot.
(cf message#11)

Qu'appelez-vous formule EVALUATE ?

Pour moi, c'est ce genre de truc
Code:
Sub m_Evaluate()
Dim t, x$, xx$
t = [{111,222,333,444,555}]
x = t(3)
xx = [=INDEX({11;22;33;44;55},2,1)]
MsgBox x & Chr(13) & xx, vbInformation, "Exemples EVALUATE"
End Sub
 

Discussions similaires