Afectation d'une plage a un tableau VBA

Résolu/Fermé
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 - 3 févr. 2011 à 09:20
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 2 mars 2016 à 10:27
Bonjour,

2 questions en VBA

1. Comment affecter une plage à un tableau vba
quelque chose du genre Tablo = L1C1:L20C20
et comment declarer ce tabeau (qui doit etre de dimension variable)

2. Comment recuperer le n° de la 1° colonne non vide d'une ligne (d'une feuille)

merci

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 3/02/2011 à 09:42
Salut ccm81,
Question 1 : Je ne suis, loin de là même , pas spécialiste en variable tableau... Je débute là dedans. Je te conseille fortement ce lien :
tout sur les variables tableau ici
Tu peux toujours faire comme ceci :
Dim Tablo   
Tablo = Sheets(1).Range("A1:AZ20").Value

Question 2 :sources
'donne la lettre de la dernière colonne renseignée de la feuille de calculs    
Dercol = Split(Worksheets("Feuil2").UsedRange.Address, "$")(3)   
'Donne le numéro de la dernière Colonne de la feuille de calculs    
Dercol = Range(Split(Worksheets("Feuil2").UsedRange.Address, "$")(3) & 1).column
--
"Laissez-moi deviner... Votre surnom, c'est «Bande Passante»? "
- Le Tribunal des flagrants délires- P.Desproges -
0
Tablo = Sheets(1).Range("A1:AZ20").Value donne un tableau à 2 dimensions (genre (g(1)->g(1,0) etc). comment en faire un à une suele dimension (si on a qu'une ligne par exemple) genre (g(0) g(1) etc...)?
merci
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > binet
2 mars 2016 à 10:27
Bonjour,

Tablo = Sheets(1).Range("A1:AZ20").Value 

donne un tableau à 2 dimensions

Normal, déjà la plage est constituée de plusieurs lignes ET de plusieurs colonnes.

Sinon, il est vrai que :
Tablo = Sheets(1).Range("A1:A20").Value 

donne également un tableau à 2 dimensions en Base 1 (le premier indice du tableau est égal à 1, pas à 0).

Donc, pour obtenir un tableau à une dimension, il faut boucler sur celui-ci et le transférer dans un tableau à 1 dimension.

Exemple :
Dim Tablo, i AS Long, Tb_Out()
Tablo = Sheets(1).Range("A1:A20").Value
'redimensionne en base 0. Pour Base 1, enlever le - 1
ReDim Tb_Out(UBound(Tablo, 1) - 1)
For i = LBound(Tablo, 1) To Ubound(Tablo, 1)
    'en Base 0. Pour la Base 1 enlever le - 1
    Tb_Out(i - 1) = Tablo(i, 1)
Next i
0