VBA - Variable tableau - PB de Valeur

StellaG Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
StellaG Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

2 réponses

Utilisateur anonyme
 
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   Statut Membre Dernière intervention  
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
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   Statut Membre Dernière intervention  
 
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