VBA - Variable tableau - PB de Valeur

StellaG Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
StellaG Messages postés 3 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
Configuration: Windows XP Internet Explorer 6.0

2 réponses

  1. 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
    1. StellaG Messages postés 3 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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. StellaG Messages postés 3 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