Sub xxx() Dim T Dim r, z T = Range("A1:C4").Value On Error Resume Next For r = 1 To UBound(T, 1) For z = 1 To UBound(T, 2) Debug.Print "Ligne "; r, "Colonne "; z, "Valeur "; T(r, z) Next z Next r End Sub
Dim T(1, 3)
Dim T(0 to 1, 0 to 3)' deux colonnes et quatre lignes
dim T(1 to 2,1 to 1) as variant 'deux colonnes et 1 ligne
Sub macro1() t = Range("A1:B3").Value For i = 1 To UBound(t, 1) For j = 1 To UBound(t, 2) MsgBox t(j, i) Next Next End Sub
Sub macro1() t = Range("A1:B3").Value For i = LBound(t, 1) To UBound(t, 1) For j = LBound(t, 2) To UBound(t, 2) MsgBox t(i, j) Next Next End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionFor i = 0 To 10 '10 pour être sûr de dépasser. 0 pour cçompmpencer "en deçà" On Error Resume Next MsgBox LBound(T, i) If Err Then MsgBox "pas de dimension " & i End If On Error GoTo 0 Next
for boucle = LBound(Array,2) to UBound(Array,2)
for boucle = LBound(Array,3) to UBound(Array,3)
T = Range("A1:A2")
Dim T(1 to 1,1 to 2) as variant T(1,1)= range("A1").value T(1,2)= range("A2").value
T = Range("A1:Z999")
Dim T(1 to 26,1 to 999) as variant
Range("B1:B3").Value = T
Dim T, plage As Range T = Range("A1:A3").Value Set plage = Range("A1:A3") Dim cell As Range For Each cell In plage ' et là : pas d'erreur MsgBox cell.Value Next For Each cell In T ' etr là : erreur assurée car T est vraiment un tableau dynamique et non un "range" ! MsgBox cell.Value Next
T = Range("A1:A3").Value
Dim T As Range, plage As Range T = Range("A1:A3").Value
Dim T As Variant, plage As Range MsgBox TypeName(T) ' =>> vide T = Range("A1:A3").Value MsgBox TypeName(T) '===>> tableau de variants
Private Sub CommandButton1_Click() 'on constitue ici une petite plage de travail Range("A1") = "A1" Range("B1") = "B1" Range("C1") = "C1" Dim T As Variant T = Range("A1:c1").Value MsgBox LBound(T, 1) & " " & UBound(T, 1) ' << === pas d'erreur : affichera 1 MsgBox LBound(T, 2) & " " & UBound(T, 2) ' <<< === pas d'erreur et affichera 3 'on a donc For i = 1 To 3 MsgBox T(1, i) ' on voit bien un tableau à 2 dimensions, dont seule la seconde est utilisée Next 'on envoit maintenant ce tableau (tel quel, avec ses 2 dimensions) dans plage A4:C4 Range("A4:C4").Value2 = T ' <<<<<<======= COMPARONS CECI (1) AVEC CE QUI EST ANOTE (2) PLUS BAS MsgBox "observez que c'est bon et que la plage A4 a bien été remplie comme prévu a partir de T en 2 dimensions" ' on va maintenant redimensionner T (sans préserve) et le remplir comme yun tableau habituel, de l'indice 0 à l'indice 2 ' par les mêmes cellules. Pour y voir polus clair, on va transfortmer le 2ème article ReDim T(2) T(0) = Range("A1").Value T(1) = Range("B1").Value & "z" T(2) = Range("C1").Value Range("A5:C5").Value = T ' <<<<<<======= COMPARONS CECI (2) AVEC CE QUI EST ANOTE (1) PLUS HAUT MsgBox "regardez : même résultat (mise à part la petite transfo témoin) alors que tableau dimensionné de manière classique" ' pourquoi alors VBA a-t-il décidé de traiter différemment son tableau (le 1er) ? (lers résultats sont les mêmes !) End Sub
Private Sub CommandButton2_Click() 'Essayons alors, ma foi, de refaire manuellement ce que semble faire VBA Dim T(1, 3) T(1, 1) = Range("A1").Value T(1, 2) = Range("B1").Value T(1, 3) = Range("C1").Value Range("A6:C6").Value = T MsgBox "rien ne se passe !... qu'a donc ajouté et caché VBA ?" End Sub
Function TabDyn(Plg As Range) If Plg.Columns.Count = 1 Then TabDyn = Application.Transpose(Plg) ElseIf Plg.Rows.Count = 1 Then TabDyn = Application.Transpose(Application.Transpose(Plg)) End If End Function Sub testColonne() MsgBox TabDyn(Range("A1:A3"))(2) End Sub Sub testLigne() MsgBox TabDyn(Range("A1:C1"))(2) End Sub
Private Sub CommandButton2_Click() Dim T(1 To 1, 1 To 3) T(1, 1) = Range("A1").Value T(1, 2) = Range("B1").Value T(1, 3) = Range("C1").Value Range("A6:C6").Value = T End Sub
Range("A6:C6").Value = T
T = Range("A1:c1").Value
ReDim T(2) T(0) = Range("A1").Value T(1) = Range("B1").Value & "z" T(2) = Range("C1").Value Range("A5:C5").Value = T