Erreur CodeName lorsque VBA fermé

Bonjour à tous,

Alors j'ai un souci que je n'arrive pas à comprendre en Excel VBA 2013 (peut être avec d'autre versions aussi?), qui est que lorsque j'essaie d’exécuter des macros via des boutons etc, si VBA n'est pas ouvert une erreur se produit ...

Ce macro en question sert en gros à la création d'un TCD, et la partie qui pose problème est la suivante (la dernière ligne provoque l'erreur 9 "L'indice n'appartient pas à la sélection"

Dim KodeName As String
Sheets.Add.Select
KodeName = Split(ActiveSheet.CodeName, "l")(1)

car qd VBA n'est pas ouvert, ActiveSheet.CodeName vaut tout le temps "", d'ou l'erreur.

En fait, le but est de créer une nouvelle feuille (qui accueil le TCD), et de récupérer le CodeName (juste le nombre après le "Feuil", d'ou le split) de cette feuille pour pouvoir y accéder plus tard.

Ce qui me parait bizarre, c'est le fait que justement à partir du moment ou le VBA est ouvert, et que je recompile sans rien modifier, tout se passe à merveille.

Voilà, j'espère avoir été assez clair, et j'vous remercie d'avance !

Je viens d'essayez qlque chose, et je me suis dit que ça pouvait peut-être être utile que je le partage:

J'ai créer un petit macro vite fait :

Sub tst()
    MsgBox "Name :" & ActiveSheet.Name & " CodeName : " & ActiveSheet.CodeName
End Sub

et je l'ai associé à un bouton sur une feuille d'un classeur. Quand je l’exécute sur cette feuille, tout marche bien, mais si je créer une nouvelle feuille (avec VBA fermé je précise!) et que je l’exécute sur cette dernière, alors là le "problème" apparaît: CodeName = "".

Pour pouvoir rétablir la situation, une simple ouverture/fermeture de VBA suffit, mais uniquement sur cette feuille, puis rebelote pour d'autres feuilles...

Voilà, donc je pense qu'il y à comme une nécessité de devoir actualiser VBA pour que .CodeName fonctionne correctement, ce qui est vraiment pas ouf je trouve.

J'espère que vous pourrait m'apporter une solution ...

Bonjour,

n'utilise pas .codename mais .name. Quelle est la raison pour laquelle tu as absolument besoin de .codename ?

Le choix de codeName est tout simplement pour pouvoir donner la possibilités au utilisateurs de changer les noms des onglets autant qu'ils le souhaitent sans que ça gêne le code.

Ce qui n'est pas le cas avec le Name

Bonjour,

On complique les choses !...

Joins un petit classeur pour illustrer ce que tu veux faire (création TCD !?).

Cdlt.

Bonjour,

Moi je suis curieux de savoir ce que tu appelles VBA fermé ?

J'ignore ce que cela veut dire. La seule chose que je connaisse est que les macros sont actives ou non.

Si elles ne le sont pas rien ne fonctionne, pas d'erreur, éventuellement un message qui te dit de fermer le fichier et de le rouvrir en activant les macros si tu veux les utiliser...

Mais j'ignorais jusqu'à présent que l'on pouvait fermer ou ouvrir VBA !! Comment faire ?

Quand je parle de VBA fermé, je veut dire par la que le centre de contrôle des macro (le "truc" qui s'ouvre quand on appuie sur alt+F11 ) n'est pas ouvert. Par exemple au démarage de Excel, cette fenetre est fermé, et du coup mon macro ne fonctionne pas, mais si je l'ouvre et laisse ouvert, tout fonctionne ...

Ce que je veux faire en fait je l'ai déjà fait , le seul truc c'est que je me suis rendu compte qu'aujourd'hui qu'une partie ne foncionnait justement pas sans la fenêtre VBA d'ouvert, d'ou mon post.

Et quand au sujet, c'est en fait un "centre de contrôle" qui se génère dans n'importe quel classeur Excel, et qui permet, en indiquant une feuille de data, de créer un/des TCD et Graphique interactivement.

Re,

Donc pour résumer, cela ne fonctionne pas !...

Et on revient à la question posée dans le précédent message.

Cdlt.

Bonjour,

Dans le module du classeur tu as la procédure événementielle "Workbook_NewSheet()" où tu peux récupérer l'index de la feuille nouvellement ajoutée au classeur par l'intermédiaire d'une variable (ici, déclarée dans le module du classeur)

Public IndexFe As Integer

Private Sub Workbook_NewSheet(ByVal Sh As Object)

    IndexFe = Sh.Index

End Sub

que tu peux utiliser par la suite comme pour une propriété du classeur ou tu peux la déclarer publique dans le module standard :

Sub test()

    MsgBox ThisWorkbook.IndexFe

End Sub

Je vous remercie tous, mais j'ai trouvé grâce à un ancien post sur le forum d'un certain Zirak !!

Je vous joints ci contre le poste en question : https://forum.excel-pratique.com/viewtopic.php?t=29521

Encore merci de vos retours, et dsl Theze je n'ai même pas pu essayer ton post

Bonjour,

amusant ton truc...

Apparemment ce n'est pas une question de timing (vba execute la suite alors que l'instruction pécédente n'est pas terminée).

Par contre un ThisWorkbook.Save règle le problème.

eric

edit : Ah, un poil trop tard. Je n'avais pas rafraichi et vu ton post résolu

Que l'éditeur soit ouvert ou pas n'a jamais empêché l'interpréteur de commande d'être présent !

Le problème est à chercher ailleurs, probablement dans les effets de ton masquage de l'application...

Rechercher des sujets similaires à "erreur codename lorsque vba ferme"