IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[debutant] Run-time error '9': Subscript out of range


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 85
    Points : 52
    Points
    52
    Par défaut [debutant] Run-time error '9': Subscript out of range
    Bonjour,

    J'ai le problème suivant lors de l'execution de ma fontion:
    Run-time error '9': Subscript out of range

    et voici le code fautif (dernière ligne):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Dim Tab_tranche()   'No "As" as has to be of "Variant" type
        Dim Tab_taux()      'No "As" as has to be of "Variant" type
        Tab_tranche = Sheets("Data").Range("B4:B10").Value
        Tab_taux = Sheets("Data").Range("C4:C10").Value
     
        MsgBox LBound(Tab_tranche)
        MsgBox UBound(Tab_tranche)
        MsgBox Tab_tranche(1)
    Effectivement, je ne déclare jamais le nombre exact d'éléments de mon tableau, mais les deux premières messages box me donnent bien respectivement "1" et "7", ce qui me semble correct.

    Si je redimensionne le tableau après lui avoir affecté des valeurs, j'obtiens alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Dim Tab_tranche()   'No "As" as has to be of "Variant" type
        Dim Tab_taux()      'No "As" as has to be of "Variant" type
        Tab_tranche = Sheets("Data").Range("B4:B10").Value
        Tab_taux = Sheets("Data").Range("C4:C10").Value
        ReDim Tab_tranche(UBound(Tab_tranche))
        
        MsgBox LBound(Tab_tranche)
        MsgBox UBound(Tab_tranche)
        MsgBox Tab_tranche(1)
    J'obtiens alors "0" comme lower bound (et toujours "7" comme upper).
    Par contre, plus de bug lors de l'exécution de la dernière ligne, mais la valeur renvoyée est vide (hors la cellule en question est bien remplie)

    Je suis débutant en VBA et ne comprend pas encore bien tous les impacts.

    Quelqu'un pourrait m'éclairer svp ?


    Merci d'avance

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Quand tu charges un range dans un tableau, tu obtiens toujours un tableau à 2 dimensions. Dans ton cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Tab_tranche(1,1)
    devrait faire l'affaire.

    Cordialement,

    PGZ

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 85
    Points : 52
    Points
    52
    Par défaut
    Effectivement, ça marche !

    Y a-t-il moyen de redimensionner ce tableau en mono-dimension après l'affectation de valeur ?

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Tu peux utiliser un 2ème tableau mais cette fois dynamique et tu copies le premier dans le second. Par exemple si les valeurs sont de type string, cela donne qc comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim TabTaux2 as variant 
    Dim TabTaux1() as string 
    dim L as long
     
    TabTaux2 = Sheets("Data").Range("C4:C10").Value
     
    Redim TabTaux1(lbound(TabTaux2,1) to ubound(TabTaux2,1))
    for L = lbound(TabTaux2,1) to ubound(TabTaux2,1)
        TabTaux1(L) = TabTaux2(L,1)
    next L  
     
    MsgBox TabTaux1(1)
    Mais franchement, je ne vois pas l'intérêt de faire cela.

    PGZ

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 85
    Points : 52
    Points
    52
    Par défaut
    Effectivement, ça va rendre le code plus illisible qu'autre chose.
    Mais au moins je comprends mieux comment on gère les tableaux et leurs tailles !!

    Merci bcp !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Run-time error '9': Subscript out of range
    Par francoisem dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/12/2014, 10h06
  2. [XL-2007] Error 9 : subscript out of range
    Par Me.Leti dans le forum Excel
    Réponses: 5
    Dernier message: 28/08/2012, 11h06
  3. Réponses: 2
    Dernier message: 15/08/2010, 17h20
  4. Réponses: 1
    Dernier message: 23/04/2008, 11h37
  5. [VBA] Run-time error : '35600' Index out of bound
    Par neo2k2 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/03/2008, 17h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo