XL 2016 A la première exécution de la macro, il manque un indice, mais pas après

xUpsilon

XLDnaute Accro
Bonsoir tout le monde,

Je reviens pour mon configurateur une fois de plus, et cette fois-ci l'erreur est assez marrante vous allez voir.
Sur le fichier ci-joint, on crée une feuille par catégorie, cette catégorie étant désignée par un titre et des noms (bref on s'en fout).
Toujours est-il que lorsque j'exécute la première fois juste après avoir ouvert mon fichier ma macro, j'ai une erreur qui est la suivante : "L'indice n'appartient pas à la sélection". Cette erreur s'adresse à la ligne suivante :
VB:
Wb.VBProject.VBComponents(NomFeuil).CodeModule.insertlines j, LeCode(j)
NomFeuil est défini à la ligne d'avant par :
Code:
NomFeuil = Worksheets(3).CodeName
Cette troisième feuille est créée au sein de la macro, quelques lignes plus haut.

Le problème est le suivant : Lorsque j'exécute la macro pour la première fois depuis que j'ai ouvert le fichier, j'ai une erreur, et lorsque je regarde mes variables locales, je vois que mon NomFeuil est égal à "", plutot que de prendre le CodeName.
En revanche, si je ferme la macro, que je supprime la page générée, et que je relance la macro, cette fois ci le NomFeuil prend la bonne valeur et la macro fonctionne donc correctement.

Est-ce que qqun a une idée ? J'ai essayé de remplir le CodeName juste après la création de la page, j'ai essayé de remplir le CodeName plusieurs fois, en me disant que peut-être sur le premier coup il était encore vide pour une raison ou pour une autre, mais rien n'y fait. Je ne comprends pas pourquoi uniquement lors de la première exécution le CodeName de la feuille que je crée est égal à "".

Merci d'avance pour toute aide !
 

Pièces jointes

  • NouvConfigV2.0.xlsm
    99.3 KB · Affichages: 13
Solution
Quand on ajoute une feuille elle se place en dernier dans la collection VBComponents donc :
VB:
    Set Wb = Workbooks(NomClasseur)
              
    For j = 1 To 3
        Wb.VBProject.VBComponents(Wb.VBProject.VBComponents.Count).CodeModule.insertlines j, LeCode(j)
    Next j
A placer aux 2 endroits concernés, NomFeuil n'est plus utilisé, voyez ce fichier (2), il n'y a plus de bug.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Essayer cette PJ. Ca a l'air de fonctionner.
J'ai modifié quelques trucs en erreur comme le fait que NeedCheck est vide si Range("I" & i) ="", ou dans le code importé, il manquait des espaces.
Essayer pour voir.
 

Pièces jointes

  • Copie de NouvConfigV3.0.xlsm
    101.8 KB · Affichages: 4

xUpsilon

XLDnaute Accro
Re,

Toujours pas, et on voit bien dans les var locales que NomFeuil = "", c'est comme si le CodeName s'initialisait après la fin de l'exécution de la macro c'est très bizarre.
1579251625992.png


Ce qui est d'autant plus bizarre c'est que le problème n'arrive toujours qu'à la première exécution du code. Si je relance le code une seconde fois sans fermer le fichier entre deux, il tourne parfaitement ...

Je continue de chercher, merci pour ton aide !
 

xUpsilon

XLDnaute Accro
Re,

J'ai une update intéressante mais qui ne fonctionnera pas pour mon utilisation (je vous explique après).
- En fait, si plutot que d'appeler NomFeuil j'appelle directement "Feuil3", qui est le CodeName que va forcément prendre la première feuille à être générée, à ce moment là ça fonctionne dès la première exécution (avec un système de boucle on pourrait adapter également aux autres feuilles qui sont générées ensuite)
- Le problème c'est que ce fichier est destiné à être utilisé partout dans le monde, donc suivant le pays ce sera "Feuil3" (France), "Tabelle1" (Allemagne), "Sheet1" (Angleterre), etc ... Bref du coup impossible d'appliquer cette méthode ...

Ce qui est malgré tout intéressant c'est que ça veut dire que le CodeName existe ! Sinon en appelant "Feuil3" il devrait me dire qu'il ne trouve pas l'indice !
Le problème semble donc être de récupérer ce CodeName dans la variable NomFeuil.

Je continue de chercher
 

job75

XLDnaute Barbatruc
Bonjour xUpsilon, sylvanu, le forum,

Après la création de la 3ème feuille il faut sortir en relançant "Bouton1_Cliquer" :
VB:
'Creation of the first sheet
If Worksheets.Count < 3 Then
    Worksheets.Add After:=Sheets(Worksheets.Count)
    Application.OnTime 1, "Bouton1_Cliquer" 'relance la procédure
    Exit Sub 'sort de la procédure
End If
Je ne sais pas pourquoi seule cette 3ème feuille (la 1ère créée) pose problème.

A+
 

Pièces jointes

  • NouvConfig(1).xlsm
    105.1 KB · Affichages: 4

xUpsilon

XLDnaute Accro
Bonjour job, re le fil,

Comme d'habitude quand on ne trouve pas la solution, c'est que job l'a ;)
Grand merci pour ta solution !

Si quelqu'un passait par là et pouvait apporter une explication à pourquoi ça se comporte comme cela, je suis toujours preneur !

Bonne continuation
 

xUpsilon

XLDnaute Accro
Re,

Toujours pas chez moi sylvanu ...
Un problème de version peut-être ? Je suis sous Excel 2016.
Je pense que le problème vient du fait que Excel doit s'attacher à d'abord exécuter le corps de la macro AVANT d'attribuer les paramètres par défaut à ceux qui n'ont pas été définis pour les instances créées. Mais pourquoi est-ce que ça tourne bien chez toi, je n'arrive pas à me l'expliquer ...
 

Discussions similaires

Réponses
6
Affichages
180

Statistiques des forums

Discussions
314 487
Messages
2 110 121
Membres
110 677
dernier inscrit
volare