VBA - Variable tableau - PB de Valeur

Fermé
StellaG Messages postés 5 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 28 janvier 2011 - 18 juin 2009 à 11:36
StellaG Messages postés 5 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 28 janvier 2011 - 18 juin 2009 à 14:46
Bonjour,

Je me lance enfin pour poser une question.
Voici un code tout simple.
Seulement, lorsque je l'execute, j'ai cette erreur qui apparait à la ligne Tabl(I) = Tabl(I) * 2:
"Run-Time error '9':
Subscirip ou of range


Je désespère de trouver POURQUOI, il ne veut pas faire cette boucle toute simple !!

Merci de votre aide

Voici mon code:

----------------------------------------
Sub autre_immo()

Dim Tabl() As Variant
Dim I As Integer, J As Integer

Tabl = Range("A1:A100").Value

For I = 1 To 100
Tabl(I) = Tabl(I) * 2
Next I
Application.ScreenUpdating = False
Range("O1:O100").Value = Tabl


End Sub
----------------------------------------

Stella

2 réponses

Utilisateur anonyme
18 juin 2009 à 13:13
Bonjour,

Exemple type :

Option Explicit

Sub autre_immo()

    Dim Tabl As Range, Cellule As Range
        
    Set Tabl = Range("A1:A100")
    
    For Each Cellule In Tabl
        Cellule.Value = Cellule.Value * 2
    Next Boite
    
    Application.ScreenUpdating = False
    Range("O1:O100").Value = Tabl.Value
    Application.ScreenUpdating = True

End Sub
'

Lupin
0
StellaG Messages postés 5 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 28 janvier 2011
18 juin 2009 à 14:36
Merci Lupin pour votre réponse, mais comme l'a si bien dit Michel, je souhaitais utiliser le système avec des tableaux pour un gain de temps.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
18 juin 2009 à 13:58
Bonjour,

Ton pb vient surtout du fait que lorsque tu écris
Range("A1:A100")=tabl
tabl a 2 dimensions Tabl(N,N)
pour t'en convaincre installe un espion sur tabl (déboguage-ajouter un espion)

d'autre part, le but d'utiliser les tableaux est le gain de temps important par rapport à
la manipulation de cellules (for each cellule...) sur de grandes plages ( pour A1:A65536, gain de temps:20 fois + vite; source:developpez.com magazine N°12)

Voici une démo (source FAQ Excel de developpez.com ou magazine cité + haut)
Sub autre_immo()
Dim Tabl As Variant
Dim cptr1 As Byte, cptr2 As Byte

Tabl = Range("A1:A100").Value

For cptr1 = LBound(Tabl, 1) To UBound(Tabl, 1)
    For cptr2 = LBound(Tabl, 2) To UBound(Tabl, 2)
            Tabl(cptr1, cptr2) = Tabl(cptr1, cptr2) * 2
    Next
Next

Application.ScreenUpdating = False
Range("O1:O100").Value = Tabl


End Sub
 


edit: si par hasard, c'était pour un exercice de formation à VBA, tu connais maintenant les sources des exos de ton prof et de ses corrigés,mais chut!... ;-)
0
StellaG Messages postés 5 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 28 janvier 2011
18 juin 2009 à 14:46
Bonjour Michel,

Merci beaucoup, c'est exactement ce que je recherchais.
Pour ce qui est du prof, je m'auto-form.
Je ne "grugerais" donc personne sur mes compétances ;-)

Cordialement,

Stella
0