XL 2010 Resize plage transfert Tableau 1D et 2 D

cp4

XLDnaute Barbatruc
Bonjour:),

J'essaie d'apprendre un peu plus sur les tableaux VBA. Je suis confronté à un problème que je n'arrive pas à résoudre et à comprendre.
Voilà, j'ai pris ces 2 codes du site de Boisgontier.
VB:
Sub transfertTableau1DChamp()
  Dim a()
  n = 20000
  ReDim a(1 To n)
  For i = 1 To 20000
    a(i) = i
  Next i
  'ici transfert sur la feuille en colonne'
  [A1].Resize(UBound(a)) = Application.Transpose(a)
  Cells.Clear
  'ici je voudrais transfert en ligne
  [A1].Offset(LBound(a), UBound(a)) = (a) 'plante
End Sub
Sub transfertTableau2DChamp()
  Dim a()
  Nlig = 20000
  Ncol = 3
  ReDim a(1 To Nlig, 1 To Ncol)
  For l = 1 To Nlig
    For c = 1 To Ncol
       a(l, c) = l * c
    Next c
  Next l
'ici transfert sur la feuille en colonne'
  [A1].Resize(UBound(a, 1), UBound(a, 2)).Value = a
  Cells.Clear
 'ici je voudrais transfert en ligne
  [A1].Resize(UBound(a, 1), UBound(a, 2)).Value = Application.Transpose(a)  'plante
End Sub
J'avoue ne pas m'y retrouver. Si j'ai bien compris un tableau 1 dimension se présente en ligne d'où [A1].Resize(UBound(a)) = Application.Transpose(a) pour le transférer sur la feuille en colonne et celui à 2 dimensions se présente en colonne, d'où [A1].Resize(UBound(a)) = a

ça se corse pour moi lorsque je veux transférer sur la feuille en ligne (transposer le tableau). Je n'arrive pas à bien utiliser Resize car je n'ai pas bien compris cette notion. L'aide d'excel ne m'a pas rendu service. Auriez-vous une explication pour que ça se grave dans mon cerveau.

Mes remerciements anticipés.

Bonne journée.
 
Solution
Bonjour le fil, cp4

•>cp4
Ca ne plante plus ;)
VB:
Sub transfertTableau1DChamp()
  Dim a()
  n = 200
  ReDim a(1 To n)
  For i = 1 To 200
    a(i) = i
  Next i
  'ici transfert sur la feuille en colonne'
  [A1].Resize(UBound(a)) = Application.Transpose(a)
  Cells.Clear
  'ici je voudrais transfert en ligne
  [A1].Resize(, UBound(a)) = a
End Sub
Et pourquoi cela plantait en ligne?
MsgBox Columns.Count
;)

Staple1600

XLDnaute Barbatruc
Bonjour le fil, cp4

•>cp4
Ca ne plante plus ;)
VB:
Sub transfertTableau1DChamp()
  Dim a()
  n = 200
  ReDim a(1 To n)
  For i = 1 To 200
    a(i) = i
  Next i
  'ici transfert sur la feuille en colonne'
  [A1].Resize(UBound(a)) = Application.Transpose(a)
  Cells.Clear
  'ici je voudrais transfert en ligne
  [A1].Resize(, UBound(a)) = a
End Sub
Et pourquoi cela plantait en ligne?
MsgBox Columns.Count
;)
 

Staple1600

XLDnaute Barbatruc
Re

•>cp4
Et la seconde macro ainsi modifiée ne plante plus.
VB:
Sub transfertTableau2DChamp()
Dim a()
Nlig = 10: Ncol = 3
  ReDim a(1 To Nlig, 1 To Ncol)
  For l = 1 To Nlig
    For c = 1 To Ncol
       a(l, c) = l * c
    Next c
  Next l
Cells.Clear
'ici transfert sur la feuille en colonne'
[A1].Resize(UBound(a, 1), UBound(a, 2)).Value = a
'ici je voudrais transfert en ligne
[E1].Resize(UBound(a, 2), UBound(a, 1)).Value = Application.Transpose(a)
End Sub
NB: C'est le résultat que tu voulais pour celle-ci?
 

cp4

XLDnaute Barbatruc
Bonjour JM;),

Merci beaucoup pour ton aide. En effet, je n'y avais même pas pensé à la limite des colonnes (16384).
Déjà très perturbé par le Resize et Transpose. J'avoue que je n'ai encore assimilé cette histoire de redimensionnement. Cette "gymnastique mentale" me fatigue. Je me perds quand il s'agit de redimensionner, une fois dans un sens, une fois dans l'autre et aussi utiliser ou non le transpose.

Encore merci tu m'as un peu plus éclairé. j'espère l'assimiler.

Bonne journée.
 

Statistiques des forums

Discussions
312 174
Messages
2 085 951
Membres
103 058
dernier inscrit
florentLP