Arrêt de VBA lors de la modification d'un CodeName par VBA Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
PE_67
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 11 janvier 2019
Version d'Excel : 2013

Message par PE_67 » 11 janvier 2019, 23:04

Bonjour le forum,

Voici le premier message que je poste, étant tout nouveau membre. ,

Je suis bloqué sur une ligne d'une procédure qui crée et manipule un Worksheet qui est la suivante :
ThisWorkbook.Worksheets(Nom_Onglet).Parent.VBProject.VBComponents(Worksheets(Nom_Onglet).CodeName).Properties("_CodeName") = Nouveau_Nom_Onglet
Ce qui se passe concrètement, c'est que les Userform qui étaient affichées disparaissent, exactement comme si je cliquais sur le bouton STOP de l'éditeur de Visual Basic (sauf que les lignes de codes qui suivent sont bien exécutées, donc ce n'est pas le bouton STOP).
Je suppose que ceci est dû à la manipulation du VBA par code...?
Après faire des essais pour chercher à comprendre le comportement de VBA, je confirme qu'il ne s'agit pas d'une fermeture du formulaire (les événements QueryClose et Terminate de l'Userform ne sont pas détectés). En revanche c'est exactement le même comportement qui se produit si je clique sur le bouton STOP de Visual Basic ("Réinitialiser"). ::o
Auriez-vous déjà rencontré ce phénomène et existe-t-il une solution pour l'éviter, et ainsi conserver les Userform chargée ?

Je précise qu'à part ce phénomène, la procédure fonctionne sans planter, et que le résultat est bon. L'ennui c'est uniquement ce qui se passe avec cette fermeture de Userform...

Merci par avance,

PE
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 4'517
Appréciations reçues : 203
Inscrit le : 16 mars 2017
Version d'Excel : 2010 sur PC

Message par i20100 » 12 janvier 2019, 00:31

Bonjour PE, bienvenue sur le forum!

à tester,
ThisWorkbook.VBProject.VBComponents(.Worksheets("ancien_nom").CodeName).Name = "NouveauNom"
Si le problème est résolu, pensez au clic sur le bouton
isabelle
Avatar du membre
PE_67
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 11 janvier 2019
Version d'Excel : 2013

Message par PE_67 » 13 janvier 2019, 23:31

Bonjour i20100,

Merci de t'être penché sur mon problème. Je suis bien d'accord avec toi, ma ligne de code était maladroite ! quelque chose me faisait un peu mal aux yeux en la voyant mais ça n'avait pas fait tilte pour autant... :oops:

Cela dit, mon problème ne vient pas de là, les userform continuent de disparaître malgré la correction.

Une autre idée peut- être ?

Merci d'avance

PE
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 4'517
Appréciations reçues : 203
Inscrit le : 16 mars 2017
Version d'Excel : 2010 sur PC

Message par i20100 » 14 janvier 2019, 02:56

Bonjour PE,

sans voir ton fichier, il est difficile de voir ce qui cause problème :??
Si le problème est résolu, pensez au clic sur le bouton
isabelle
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'513
Appréciations reçues : 242
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 14 janvier 2019, 07:09

Bonjour,

Par contre, ce que je ne comprend pas, c'est la nécessité de renommer le module de la feuille ?
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
Avatar du membre
PE_67
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 11 janvier 2019
Version d'Excel : 2013

Message par PE_67 » 14 janvier 2019, 11:05

Bonjour,

Je joins un extrait du fichier, afin de mieux comprendre ce qu'il se passe. Il faut :
  • aller sur l'onglet "RECAP",
  • cliquer sur afficher usf (qui ne servira pas pour la manipulation)
  • cliquer sur "CREER ONGLET" (cellule C15), qui aura pour effet de créer une feuille (duplicata de la feuille TYPE masquée) et de modifier son Name et son CodeName.
  • L'USF disparaîtra ensuite.
Par contre, ce que je ne comprend pas, c'est la nécessité de renommer le module de la feuille ?
Dans mon code initiale je n'agissais que sur les Name, mais je me suis dit qu'il était préférable de prendre en compte les risques de modification de nom des onglets par les utilisateurs, c'est pour ça que j'ai décidé d'appeler mes feuilles par leur CodeName. Par ailleurs ça me permet d'utiliser le CodeName comme "mémoire" du Name : si le Name est modifié, je peux faire un contrôle avec la valeur du CodeName pour décider de la suite à donner.
Je trouvais aussi plus "propre" de travailler avec les CodeName, mais c'est peut-être une idée reçue....

Si jamais vous avez une autre idée, je suis preneur, et sinon il me faudra éviter de passer par le CodeName !

Bonne journée à tous,

PE
Avatar du membre
PE_67
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 11 janvier 2019
Version d'Excel : 2013

Message par PE_67 » 14 janvier 2019, 21:42

Re-bonjour à tous,

J'ai avancé sur mon problème, et les conclusions se précisent ; j'ai deux solutions :
  • soit je crée une feuille dans un autre classeur auquel je change le CodeName par VBA, avant de le ramener dans ThisWorkbook,
  • soit je ne touche pas au CodeName et j'utilise la racine du CodeName issue de celui de la feuille source
Je vais retenir la seconde, car plus simple et largement suffisante pour atteindre mon résultat. Le CodeName de la feuille dupliquée sera alors le suivant : d'une part la racine (CodeName) issue de la feuille type, et d'autre part par l'indice générée lors de la copie.

A savoir que il ne faut pas modifier les propriétés de projet VBA par code, car ceci peut avoir des effets indésirables sur le VBA, d'où mon problème initial, je présume.

Je considère le post résolu, merci encore pour votre implication.

PE
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'684
Appréciations reçues : 292
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 14 janvier 2019, 23:53

Bonjour,

tu aurais dû tenter le changer le codename une fois l'UF fermé.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
PE_67
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 11 janvier 2019
Version d'Excel : 2013

Message par PE_67 » 15 janvier 2019, 09:24

Bonjour Eric,
tu aurais dû tenter le changer le codename une fois l'UF fermé.
Sauf que dans mon cas j'ai besoin de faire cette manip avec l'USF ouverte, car les opérations ne sont pas terminées.

J'ai pu terminer la mise à jour de mon code selon la méthode citée
je ne touche pas au CodeName et j'utilise la racine du CodeName issue de celui de la feuille source
et ça y est, ça fonctionne aussi, et j'obtiens le même résultat :mrgreen:

PE
D
Daddy-Daniel
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 20 janvier 2019
Version d'Excel : 2016 FR

Message par Daddy-Daniel » 20 janvier 2019, 19:15

Bonjour,
Je viens vers vous car j’ai la même contrainte a ce que mon USF reste ouverte après la modification du CodeName de la nouvelle feuille créée.
En effet, il est important que les feuilles nouvellement créées aient un classement précis.
Je ne comprend pas ta solution d’utiliser la ‘’racine du CodeName issue de celui de la feuille source’’
Peux-tu être plus explicit sur cette solution qui aurait solutionne ce problème.
D’avance merci.
Daddy
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message