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 :

Problème VBA générant du code VBA "l'indice n'appartient pas à la selection" [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Par défaut Problème VBA générant du code VBA "l'indice n'appartient pas à la selection"
    Bonjour à tous,

    J'ai un pitit problème avec un bout de code que je viens de créer, celui-ci permet de générer du code (le code d'un evenement chart_activate). Mon problème est le suivant :

    sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      With ActiveWorkbook.VBProject.VBComponents(ThisWorkbook.Sheets(strSheetName).CodeName).CodeModule
    j'ai souvent (mais pas tout le temps) l'erreur "l'indice n'appartient pas à la selection". Le souci viens du fait que "ThisWorkbook.Sheets(strSheetName).CodeName" n'a pas toujours une valeur: si je met une variable dans laquelle je récupère le codeName, parfois celui-ci est égal à "" ... bizarre.

    C'est d'autant plus étrange que lorsque j'ai l'erreur, je ne fais absolument rien, c'est à dire que je ne fais qu'appuyer sur F5 pour que le code se termine, et là tout se déroule correctement.

    Avez-vous déjà eu un problème similaire ? avez-vous une solution pour contourner le problème ?

    Merci d'avance,

    Ci-dessous le code de la procédure incriminée.

    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
    Sub AddEventToChart(strSheetName As String)
    'ajoute l evenement chart calculate
    
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    
    ThisWorkbook.Sheets(strSheetName).Activate
    ThisWorkbook.Sheets(strSheetName).Select
    
      With ActiveWorkbook.VBProject.VBComponents(ThisWorkbook.Sheets(strSheetName).CodeName).CodeModule    'Creation de la procedure evenementielle
        .CreateEventProc "Calculate", "Chart"
        
        'code de la procédure
        .InsertLines 2, "Dim newChart as Chart"
        .InsertLines 3, "set newChart = ActiveChart"
        .InsertLines 4, "newChart.ApplyCustomType ChartType:=xlUserDefined, TypeName:=newChart.Name"
      End With
    
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    
    End Sub

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Tu travailles avec un seul classeur ou plusieurs?
    Tu mélange le ActiveWorkbook et le ThisWorkbook qui peuvent différer si tu as plusieurs classeurs ouverts.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 153
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme l'a justement écrit Mercatog, tu mélanges les objets.
    C'est soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     With ActiveWorkbook.VBProject.VBComponents(ActiveWorkbook.Sheets(strSheetName).CodeName).CodeModule    'Creation de la procedure evenementielle
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ThisWorkbook.VBProject.VBComponents(ThisWorkbook.Sheets(strSheetName).CodeName).CodeModule    'Creation de la procedure evenementielle
    De plus, il n'y a aucune raison de sélectionner la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'ThisWorkbook.Sheets(strSheetName).Activate
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Par défaut
    Tout d'abord merci pour vos réponses

    Je viens de faire le test en mettant des "thisworkbook" partout : j'ai toujours la même erreur.

    De même en utilisant "ActiveWorkbook".

    PS : je ne travaille que sur un seul fichier Excel.

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    J'ai fais ce test sans problème. Le code s'écrit bien dans le module de Graph 1
    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
    Sub AddEventToChart(strSheetName As String)
     
    With ThisWorkbook.VBProject.VBComponents(ThisWorkbook.Sheets(strSheetName).CodeName).CodeModule    'Creation de la procedure evenementielle
        .InsertLines 2, "Private Sub Chart_Calculate()"
        .InsertLines 3, "Dim newChart as Chart"
        .InsertLines 4, "set newChart = ActiveChart"
        .InsertLines 5, "newChart.ApplyCustomType ChartType:=xlUserDefined, TypeName:=newChart.Name"
        .InsertLines 6, "End Sub"
    End With
    End Sub
     
    Sub test()
     
    AddEventToChart "Graph1"
    End Sub
    Dans le module de Graph 1 je trouve bien ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Chart_Calculate()
    Dim newChart As Chart
    Set newChart = ActiveChart
    newChart.ApplyCustomType ChartType:=xlUserDefined, TypeName:=newChart.Name
    End Sub

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Par défaut
    Si j'utilise ce code sur une feuille existante, en effet, il n'y a pas de problème.

    En fait je crée des feuilles (dans une boucle) et ensuite j'éxécute cette procédure. j'ai l'impression qu'en fait la feuille n'est "pas totalement créée, ou en cours de création" et du coup le vba ne peut récupérer le codeName.

    En tout cas merci pour votre aide

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

Discussions similaires

  1. Déprotéger le code VBA avec un code VBA
    Par Gado2600 dans le forum Sécurité
    Réponses: 3
    Dernier message: 24/04/2014, 08h57
  2. [XL-2007] Balayage par le code VBA d'un code VBA
    Par cotmar dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 20/05/2011, 09h14
  3. Supression de code VBA par du code VBA
    Par cotmar dans le forum Général VBA
    Réponses: 3
    Dernier message: 14/02/2011, 14h33
  4. [XL-2007] Insertion de code VBA dans du code VBA
    Par cotmar dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/02/2011, 11h35
  5. Problème de protection du code vba
    Par Bruno25 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/01/2008, 23h04

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