VBA: Range de Cellule(2 D) vers Array(1D)

Hellboy

XLDnaute Accro
Bonjour a tous
et spécialement a tous ceux que ça fait trop longtemps que je n'ai eu le plaisir de vous saluer !

Voici les explications du sujet:
En Vba, j'essaie de récupérer les informations qui sont sur une seule ligne et sont répartie sur 5 colonnes.
Exemple:

strLine = Range('H2: L2').Value


Jusque là ce n'est pas hors de porté de mes connaissances. Il faut comprendre que le résultat
de StrLine est un tableau a 2 dimentions.
Voici ou ça se corse( et que je fais mon difficile):

J'aimerais pouvoir récupérer cette plage de donnée dans un Array, c-a-d un tableau a une dimention. Facile... Pas si vite! J'aimerais pouvoir le faire sans utiliser une boucle.

Donc, ce que je tente de faire, est de mettre les informations de chaque cellule dans une seule String, et ce séparé par une espace entre chaque information contenue dans ces cellules.

Ce que j'ai tenté de faire et que ça ne marche pas c'est ceci:
strLine = Join(Range(Cells(2, 8), Cells(2, 11)).Value)

Et même ceci sans succès.
strLine = Join(Range(Cells(2, 8), Cells(2, 11)).Value(1))


(Par défaut, la commende Join sépare les éléments par une espace et attend un Array de une dimention.)

Il se peut que je ne puisse arriver a faire ce que j'espère accomplir, mais je laisse ce forum arriver à sa propre conclusion.

Merci de votre aide !

a+
 

ChTi160

XLDnaute Barbatruc
Salut Hellboy
bonsoir enfin bonjour lol le fil
j'ai peut être pas compris mais sa ca rempli le tableau sans boucle (Split)
Sub Tablo()
Dim Tablo As Variant
Dim l As Byte
Tablo = Split((Range('B8').Value & ' ' & Range('C8').Value), ' ')
For l = 0 To UBound(Tablo, 1)
MsgBox Tablo(l)
Next
End Sub
bonne journée
 

Hellboy

XLDnaute Accro
Bonjour ChTi160 Bebere, Salut Hervé !

Merci a tous pour vos réponces.

Pour développer d'avantage mon exemple et la mettre dans le contexte, ma plage va varié en terme de colonne et de ligne.

Pour ton Exemple Bebere, excellent, mais tu ne connaissait pas le contexte appliqué. Désolé, pas facile de tout mettre l'information sans perde le lecteur dans sa demande.

Voici:



Public Sub CasseTete()
Dim bytColRef As Byte, bytElement As Byte

Dim
intRow As Integer, intNbRow As Integer

Dim
strtTableau() As String

Dim
strFichier As String
[color=green4]' Mes données commence toujours à la colonne 8 et ligne 2[/color]
[color=green4]' Mais le nombre de colonne et le nombre de ligne est variable[/color]
intNbRow = Cells(65536, 8).End(xlUp).Row
bytColRef = Cells(2, 255).End(xlToLeft).Column
ReDim strTableau(intNbRow - 2)
For intRow = 2 To intNbRow
     
With Range(Cells(intRow, 8), Cells(intRow, bytColRef))
         
[color=green4]'  Ici j'aurais aimé remplacer la boucle appliquer:[/color]
         
[color=green4]'  strTableau(intRow - 2) = Join(.value2(1))[/color]
              strTableau(intRow - 2) = .Value2(1, 1)
             
For bytElement = 2 To .Count - 1
                    strTableau(intRow - 2) = strTableau(intRow - 2) & Chr(32) & .Value2(1, bytElement)
             
Next bytElement
     
End With

Next
intRow
strFichier = Join(strTableau(), vbCrLf)
Kill 'c:\Test.txt'
Open 'C:\Test.txt' For Binary As #1
Put #1, , strFichier 
[color=green4]'strTableau()[/color]
Close #1
End Sub

Message édité par: Hellboy, à: 01/03/2006 03:28
 

Statistiques des forums

Discussions
312 286
Messages
2 086 804
Membres
103 392
dernier inscrit
doc_banane