Plage de données et array

Bonjour,

j'ai dans une macro besoin au dela de la plage de donnée déja identifié, de mettre certaines données dans un array

 Set Maplage = .Range.Rows(d.Row).Resize(Fin)

il peut selon les cas y avoir une seule ou plusieurs lignes que je vérifie via

MsgBox (Maplage.Rows.Count)

ici j'ai un résultat de 2 car deux lignes

comment procéder afin que pour chacun des deux lignes Maplage.Cells(i, 3) se mette dans un array

En effet j'ai besoin ensuite de pouvoir faire ressortir cela en un seul champ texte

j'ai commencé comme ceci mais ne suis pas sur de mi d'une part et ne sais pas comment faire ressortir cela plus loin

For i = 1 To Maplage.Rows.Count
i = i + 1
accounts = Array(Maplage.Cells(i, 3))
Next i
Exemple: Maplage.Cells(i, 3) = Item1
puis  Maplage.Cells(i, 3) = Item2

accounts = array (Item1, Item2)
champ texte à la fin = Item1 / Item 2

comment procéder svp?

Merci à vous

comment procéder afin que pour chacun des deux lignes Maplage.Cells(i, 3) se mette dans un array

En effet j'ai besoin ensuite de pouvoir faire ressortir cela en un seul champ texte

Pour mettre la colonne 3 de MaPlage dans un tableau 1D, c'est tout simple :

Dim t
t = Application.Transpose(MaPlage.Columns(3).Value)

Et si tu veux le résultat en texte séparé par des virgules :

Dim s As String
s = Join(t, ", ")

merci à vous Patrice je vais tester de suite.

je dois me tromper dans le codage car cela me renvoi un erreur d’incompatibilité de type sur le join

une petite idée svp?

With [T_Accounts].ListObject
    Set d = .ListColumns("Id_Project").Range.Find(what:=Id_Project, LookIn:=xlValues, LookAt:=xlWhole)
    Fin = WorksheetFunction.CountIf(.DataBodyRange, Id_Project)
    If Not d Is Nothing Then
        Set Maplage = .Range.Rows(d.Row).Resize(Fin)

Dim accounts
For i = 1 To Maplage.Rows.Count
accounts = Application.Transpose(Maplage.Cells(i, 3))
Next i

Dim s As String
s = Join(accounts, ", ")
'MsgBox (s)

End If
End With

merci par avance

Il suffit de faire ce que j'ai proposé !

EDIT ou plutôt

Dim accounts
Dim s As String

  '...
  '
  With [T_Accounts].ListObject
    Set d = .ListColumns("Id_Project").Range.Find(what:=Id_Project, LookIn:=xlValues, LookAt:=xlWhole)
    Fin = WorksheetFunction.CountIf(.DataBodyRange, Id_Project)
    If Not d Is Nothing Then
      Set MaPlage = .Range.Rows(d.Row).Resize(Fin)
      accounts = Application.Transpose(MaPlage.Columns(3).Value)
      s = Join(accounts, ", ")
      MsgBox (s)
    End If
  End With

Merci à vous, je n'avais donc pas compris et m'en excuse

je ne vois toutefois pas comment la fonction transpose procède pour analyser ligne par ligne mais vais me renseigner.

merci et bonne journée

je ne vois toutefois pas comment la fonction transpose procède pour analyser ligne par ligne mais vais me renseigner.

En écrivant accounts = MaPlage.Columns(3).Value on aurait obtenu un tableau 2D avec une colonne et toutes les lignes de la plage.

La méthode transpose ne sert qu'à transformer le tableau 2D issu de MaPlage.Columns(3).Value en tableau 1D.

Il est alors possible d'utiliser la fonction Join()

merci pour cette explication, en effet plus claire désormais!

Rechercher des sujets similaires à "plage donnees array"