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
Encore un essai.
A chaque création de feuille, si le nombre de feuilles attendu n'est pas bon j'ouvre un msgbox.
Si aucune msgbox ne s'ouvre et que ça se plante, alors le problème est autre que celui supposé.
 

Pièces jointes

  • Copie de Copie de Copie de NouvConfigV5.0.xlsm
    96.6 KB · Affichages: 5

xUpsilon

XLDnaute Accro
@sylvanu aucune MsgBox ne s'est ouverte. J'avoue n'y rien comprendre.

Je viens de faire un test en calant une Msgbox juste après la création de la feuille avec un ScreenUpdate et on voit bien que la feuille a été créée à ce moment là (en tout cas elle apparait). Alors pourquoi est-ce que je n'arrive pas à récupérer un paramètre de cette feuille, qui existe visiblement ...
Je comprends pas trop là, je me suis dit que c'était peut etre la première feuille créée qui posait problème, donc j'ai fait un test dans lequel j'ouvre et je supprime une première feuille pour servir de "crash test", mais rien n'y fait je bute à nouveau sur le même problème.

Je continue les recherches
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ce qui est rigolo, c'est que sous 2007, ça marche :
8.jpg

J'enregistre le fichier sur le bureau. Je ferme XL. J'ouvre le fichier, et j'obtiens ça au premier lancement.


Essayer cette V6. Je crée une feuille bidon, que je conserve (pas la détruire ) , puis je passe à la suite.
 

Pièces jointes

  • Copie de Copie de Copie de Copie de NouvConfigV6.xlsm
    97 KB · Affichages: 3

xUpsilon

XLDnaute Accro
Re,

Toujours pas ... Un problème avec la feuille précise créée à ce moment là alors ? Mais comment pourrait-il y avoir un problème avec une feuille qui est créée, elle n'aura pas forcément le même indice, ou le même nom, ou le même contenu, je ne comprends pas comment ça pourrait toujours être la même qui pose problème à ce moment là o_O
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
La solution (enfin peut être) , voir : https://forum.excel-pratique.com/viewtopic.php?t=41828

Problème de CodeName sur XL2019 :

Pour résumer (et si j'ai bien compris) : parfois le CodeName d'une nouvelle feuille ne retourne rien, sans doute à cause d'un problème de timing de VBE, il faut donc forcer une compilation ...
En rajoutant ces 3 lignes, je n'ai plus d'erreur 9 :
Dim Ctrl As Variant
Set Ctrl = Application.VBE.CommandBars.FindControl(ID:=578)
If Ctrl.Enabled = True Then Ctrl.Execute

Au moins à tester. Là où on en est ! ;)
 

xUpsilon

XLDnaute Accro
Re,

Impossible de changer par "Spindles", la feuille pourrait avoir un autre nom malheureusement.

Effectivement il semblerait que ça fonctionne ! Je vais essayer sur un autre ordi, je te tiens au courant.

Coup de bol que tu aies trouvé ce topic parce que j'ai passé un moment à chercher et pas moyen de trouver ce que je voulais haha
 

job75

XLDnaute Barbatruc
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.
 

Pièces jointes

  • NouvConfig(2).xlsm
    103.6 KB · Affichages: 5

Discussions similaires

Réponses
6
Affichages
180

Statistiques des forums

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