XL 2010 Resize plage transfert Tableau 1D et 2 D

  • Initiateur de la discussion Initiateur de la discussion cp4
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
😉
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
😉
 
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?
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
525
Réponses
40
Affichages
2 K
Réponses
12
Affichages
481
Retour