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 :

[E-00] "worksheets(i)"-->subscript out of range


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Points : 45
    Points
    45
    Par défaut [E-00] "worksheets(i)"-->subscript out of range
    bonjour,

    j'ai un petit souci avec ce code, j'ai dans mon programme pres d'une 40aine de feuilles les numéros vont de 11 à 96 (tous les nombres ne sont pas utilisés)

    de 1 à 44 tout fonctionne bien mais pour 45 j'ai l'erreur subcript out of range

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Public Sub MENU_CHART(i As Integer)
     
    Dim T As Integer, H As Integer
     
    T = 458
    H = 228
     
        If (Worksheets(i) Is ActiveSheet) Then
    '    If (Sheet12 Is ActiveSheet) Or (Sheet13 Is ActiveSheet) Or (Sheet14 Is ActiveSheet) Or (Sheet15 Is ActiveSheet) Or (Sheet16 Is ActiveSheet) _
    '        Or (Sheet21 Is ActiveSheet) Or (Sheet23 Is ActiveSheet) Or (Sheet24 Is ActiveSheet) Or (Sheet25 Is ActiveSheet) Or (Sheet26 Is ActiveSheet) _
    '        Or (Sheet27 Is ActiveSheet) Or (Sheet28 Is ActiveSheet) Or (Sheet29 Is ActiveSheet) Or (Sheet31 Is ActiveSheet) Or (Sheet32 Is ActiveSheet) _
    '        Or (Sheet41 Is ActiveSheet) Or (Sheet51 Is ActiveSheet) Or (Sheet77 Is ActiveSheet) Then
            If Sheets("Stabilization").Range("D33").Text = "No" Then
                With Worksheets(i).ChartObjects("chart").CHART.SeriesCollection("C.G.").Points(1)
                    .MarkerForegroundColorIndex = 1
                    .MarkerBackgroundColorIndex = 3
                    .DataLabel.Font.ColorIndex = 1
                End With
            ElseIf Sheets("Stabilization").Range("D33").Text = "Yes" Then
                With Worksheets(i).ChartObjects("chart").CHART.SeriesCollection("C.G.").Points(1)
                    .MarkerForegroundColorIndex = 1
                    .MarkerBackgroundColorIndex = 4
                    .DataLabel.Font.ColorIndex = 1
                End With
            End If
     
            Worksheets(i).ChartObjects("chart").Top = T
            Worksheets(i).ChartObjects("chart").Height = H
     
        End If
     
    End Sub
    ya t'il un souci avec la déclaration du i? est ce bien integer qu'il faut utiliser?
    ou autre chose?

    merci pour vos réponses

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    As-tu compté tes feuilles? Moi je parie qu'il y en a 44!

    Plus sérieusement, la façon dont tu as désigné tes feuilles (Worksheets(i)) est leur index dans la classe WorkSheets et non leur nom dans Excel, car i est de type Integer dans l'en-tête de ta procédure.

    Essaye de mettre plutôt le type String dans ton en-tête et dis-moi si ça fonctionne.

    Mais c'est bien au moins tu avais le doute au bon endroit.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    j'ai essayé avec string et dès la première feuille j'ai subscript out of range

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    il doit y avoir un problème avec le nombre de sheets.

    As-tu testé la valeur de Sheets.count ?

    As-tu essayé comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Public Sub MENU_CHART()
     
    Dim T As Integer, H As Integer
    Dim i  as integer
    Dim asheet as string
    T = 458
    H = 228
    Asheet = activesheet.name 
    For i = 1 to sheets.count
     
        If (Worksheets(i).name Is ASheet) Then
        select case Asheet
                case "Sheet12", "Sheet13", "Sheet14", "Sheet15"', .....
                If Sheets("Stabilization").Range("D33").Text = "No" Then
                 With Worksheets(i).ChartObjects("chart").CHART.SeriesCollection("C.G.").Points(1)
                    .MarkerForegroundColorIndex = 1
                    .MarkerBackgroundColorIndex = 3
                    .DataLabel.Font.ColorIndex = 1
                End With
            ElseIf Sheets("Stabilization").Range("D33").Text = "Yes" Then
                With Worksheets(i).ChartObjects("chart").CHART.SeriesCollection("C.G.").Points(1)
                    .MarkerForegroundColorIndex = 1
                    .MarkerBackgroundColorIndex = 4
                    .DataLabel.Font.ColorIndex = 1
                End With
            End If
         end select
     
            Worksheets(i).ChartObjects("chart").Top = T
            Worksheets(i).ChartObjects("chart").Height = H
     
        End If
     
    next i 
    End Sub

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    bonjour Godzestla,

    malheureusement je ne peux pas utiliser ta méthode car cette procédure ne doit pas passer sur toutes les feuilles car elle gère des graphiques (dans une genre de menu) qui ne sont pas toujours présents sur les feuilles

    et effectivement sheets.count me donne 44

    Comment je peux connaitre ce numero "index" ? vu que j'ai ajouté supprimé changer de placer pleins de feuilles ...

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Citation Envoyé par anyah Voir le message
    bonjour Godzestla,

    malheureusement je ne peux pas utiliser ta méthode car cette procédure ne doit pas passer sur toutes les feuilles car elle gère des graphiques (dans une genre de menu) qui ne sont pas toujours présents sur les feuilles
    Alors pourquoi testes-tu le nom de la feuille (qui plus est active) dans ta procédure ?

    je ne comprends pas.

    je te suggère de regarde la modif de code que j'ai fait plus haut, avec Select, de filtrer les feuilles avec graphique au moyen de la clause select et d'enlever ou de m'expliquer ce test sur Activesheet.

    ok pour toi ?

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    j'ai besoin de tester si la feuille est active pour que mes modif de graphique s'effectue bien si je fait les modif sur des feuilles non active des erreurs apparaissent

  8. #8
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Pourquoi ne pas activer la feuille toi-même dans la procédure .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sheets(i).activate
    A mettre à la place de If (Worksheets(i).name Is ASheet) Then

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    bon j'ai réfléchi à ma condition sur l'activation de feuille et j'ai changé mon code en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Sub MENU_CHART(nm As String)
     
    Dim T As Integer, H As Integer
     
    T = 458
    H = 228
     
        If (nm = ActiveSheet.name) Then
            If Sheets("Stabilization").Range("D33").Text = "No" Then
                With Sheets(nm).ChartObjects("chart").CHART.SeriesCollection("C.G.").Points(1)
                    .MarkerForegroundColorIndex = 1
                    .MarkerBackgroundColorIndex = 3
                    .DataLabel.Font.ColorIndex = 1
                End With
            ElseIf Sheets("Stabilization").Range("D33").Text = "Yes" Then
                With Sheets(nm).ChartObjects("chart").CHART.SeriesCollection("C.G.").Points(1)
                    .MarkerForegroundColorIndex = 1
                    .MarkerBackgroundColorIndex = 4
                    .DataLabel.Font.ColorIndex = 1
                End With
            End If
            Sheets(nm).ChartObjects("chart").Top = T
            Sheets(nm).ChartObjects("chart").Height = H
        End If
     
    End Sub
    du coup j'appelle mes fonctions avec leurs noms ca m'évite d'appeler la procédure avec un muméro d'index qui peut changer si on bouge, on ajoute ou on supprime une apge par exemple

    merci pour les réponses

    bonne journée

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

Discussions similaires

  1. vector subscript out of range: qu'est-ce ?
    Par sa.mh dans le forum C++
    Réponses: 15
    Dernier message: 22/05/2008, 17h47
  2. Réponses: 1
    Dernier message: 23/04/2008, 11h37
  3. vector subscript out of range
    Par nightwar dans le forum SL & STL
    Réponses: 2
    Dernier message: 14/03/2008, 19h35
  4. error9 subscript out of range
    Par tomy7 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/03/2008, 13h25

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