Manipulation de tableaux

Calvus

XLDnaute Barbatruc
Bonjour,

J'essaie de comprendre la manipulation de tableaux.

Pouvez vous m'expliquer ce qui ne va pas dans ce bout de code et qui génère une erreur d'exécution 9 L(indice n'appartient pas à la sélection ?
Code:
Dim T(), i As Integer
Dim tablo()
T = Range("C20").CurrentRegion
For i = 20 To 40
tablo(i, 1) = T(i, 1)

Merci
 

Calvus

XLDnaute Barbatruc
Re : Manipulation de tableaux

Bonjour,

Merci de vos réponses.

Dans la fenêtre exécution, tu peux vérifier les bornes de ton tableau T.

Que veux tu dire exactement ? Je ne vois pas comment faire.

@Tatiak : c'est mieux mais mon tableau reste vide. Et si je remplace T(i,1) par T(i,3) (ce que je pensais à priori être pour la colonne 3), j'ai à nouveau un problème.

Merci
 

Pièces jointes

  • Manipulation de tableaux.xlsm
    22.7 KB · Affichages: 37

thebenoit59

XLDnaute Accro
Re : Manipulation de tableaux

Bonjour Tatiak.

Les bornes, correspondent aux limites, tu peux les trouver dans la fenêtre Variables Locales.
Sinon, par rapport à tes besoins tu peux faire ainsi :

Code:
Sub test()
Dim T(), tablo()
T = Range("C20").CurrentRegion
tablo = Application.Index(T, Evaluate("Row(20:30)"), 1)
Range("S10").Resize(UBound(tablo)) = tablo
End Sub

Solution trouvée sur le site de BoisGontier.
Tu peux déterminer les lignes par des variables également.
 

Calvus

XLDnaute Barbatruc
Re : Manipulation de tableaux

Re,

Je te remercie. Je viens de comprendre Evaluate en cherchant sur le net, que j'utilisais sans le savoir et sans en comprendre le sens exact. Je me trompais de dénomination finalement
A savoir, j'écris souvent [B1] par exemple.

Pour le reste, le résultat est erroné.

Tant pis. Je reviendrai peut être sur ce post plus tard.
Je vais ouvrir un autre fil pour mon besoin spécifique.

Bonne journée
 

Si...

XLDnaute Barbatruc
Re : Manipulation de tableaux

salut

tu en baves avec toutes les sortes deTableaux hein ;) !

Avec Range("C20").CurrentRegion , la colonne D étant vide tu as un tableau d'une seule dimension
dans ce cas tu passeras par
Code:
Sub test()
  Dim T(), i As Long, tablo()
  [S:T] = "" ‘pour voir
  T = Range("C20").CurrentRegion
  ReDim tablo(1 To UBound(T))
  For i = 1 To UBound(T) 
    tablo(i) = T(i, 1)
  Next
  Range("S10").Resize(UBound(tablo)) = Application.Transpose(tablo) 'pour 1 dimension
End Sub

Si tu veux plusieurs colonnes ce sera plutôt
Code:
Option Base 1 'à toi de voir pourquoi !
Sub testSi()
  Dim T(),L as long,  i As long, tablo()
  [S:T] = ""
  L = [C65000].End(xlUp).Row
  T = Range("C20:E" & l)
  ReDim tablo(1 To Ll, 1 To 2)
  For i = 1 To UBound(T)
    tablo(i, 1) = T(i, 1): tablo(i, 2) = T(i, 3) 'pour 2 colonnes
  Next
  Range("S10").Resize(UBound(tablo), 2) = tablo 'sans transposer !
End Sub
 

Pièces jointes

  • Manipulation de tableaux.xlsm
    30.4 KB · Affichages: 46

Calvus

XLDnaute Barbatruc
Re : Manipulation de tableaux

Hello mon cher Si !

Je dois dire que j'espérais bien ton intervention. :)

Je dois m'en aller maintenant. Je regarderai ce soir, et reviendrai avec mes questions, car cette fois, j'ai bien l'intention de comprendre une fois pour toutes cette foutue logique !!!

Je suis vraiment à la bourre, donc même pas le temps de lire le code maintenant, et encore moins d'ouvrir le fichier.

MerSSi :)
 

laetitia90

XLDnaute Barbatruc
Re : Manipulation de tableaux

bonjour tous:):) Calvus:)tatiak:)Si:):)

encore une facon d'ecrire.... sans REDIM

CALVUS :) attention quand meme a la manipulation de CurrentRegion il faut bien comprendre comment cela marche
regarde aussi UsedRange

Code:
Sub es()
 Dim T()
 T = Range("C20").CurrentRegion
 
 'plusieurs colonnes si col D pas vide
 [s20].Resize(UBound(T, 1), UBound(T, 2)) = T
 
 'uniquement col C si col D pas vide
  '[s20].Resize(UBound(T)) = T
End Sub

ps oups:( j'ai oublie de dire bonjour a l'ami thebenoit :):)
 
Dernière édition:

Discussions similaires