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 » 23 janvier 2019, 21:01

à tout hasard : Theze  a comme moi Excel 2007 ; tu as Excel 2013 ; alors peut-être que le problème rencontré est dû à la différence des deux versions, et en particulier celle concernant les interfaces (SDI vs MDI) 
Possible en effet, mais difficile à comprendre alors pourquoi le code donné par Theze fonctionne chez Daddy-Daniel et moi... le mystère reste entier :-)))

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

Message par Daddy-Daniel » 25 janvier 2019, 15:53

Bonjour,
Je joint un exemple tiré du code de Theze et qui fonctionne avec Excel 2016, PE_67 as-tu l'occasion de le tester et au besoin de l'ajuster à ton besoin pour voir si ça marche.
Je continue à travailler dessus pour voir ce qui entraîne la fermeture de nos usf !
Cordialement.
Daddy
CodeNameTest1.xlsm
(16.12 Kio) Téléchargé 4 fois
D
Daddy-Daniel
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 20 janvier 2019
Version d'Excel : 2016 FR

Message par Daddy-Daniel » 27 janvier 2019, 08:33

Bonjour,
J'ai trouvé ces notes sur https://docs.microsoft.com/fr-fr/office ... k.codename :
Propriété Workbook.CodeName (Excel)
Renvoie le nom de code de l’objet. String (en lecture seule).

Remarques
La valeur que vous voyez dans la cellule à droite de (nom) dans la fenêtre propriétés est le nom de code de l’objet sélectionné. Au moment de la conception, vous pouvez modifier le nom de code d’un objet en modifiant cette valeur. Vous ne pouvez pas modifier par programme cette propriété au moment de l’exécution................
Au moment de la dite conception, n'est t'il pas possible "d'imposer" à excel d'utiliser un "CodeName" stocké dans une variable ?
Peut-être une piste !

Pour info : j'ai déplacé ma ligne de code
ActiveSheet.Parent.VBProject.VBComponents(ThisWorkbook.Sheets(1).CodeName).Properties("_CodeName") = osCNsh & Format(osIdFeuil, "00")
à la fin dans celui du bouton "Sortir" juste avant
Unload Me
usfMenuPrincipal.Show 0


Résultat : le "CodeName" est changé, mon "usfSaisie" se ferme et mon "usfMenuPrincipal" apparaît une demi-seconde avant que tout se ferme ! :cry:

Bon dimanche
DD
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'324
Appréciations reçues : 215
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 27 janvier 2019, 09:12

Bonjour,

Pourquoi faire simple :
ThisWorkbook.VBProject.VBComponents(Feuil1.CodeName).Name = osCNsh & Format(osIdFeuil, "00")
quand on peut faire compliqué :
ActiveSheet.Parent.VBProject.VBComponents(ThisWorkbook.Sheets(1).CodeName).Properties("_CodeName") = osCNsh & Format(osIdFeuil, "00")
Au moment de la conception, vous pouvez modifier le nom de code d’un objet en modifiant cette valeur. Vous ne pouvez pas modifier par programme cette propriété au moment de l’exécution
Cela signifie que tu ne peux pas faire directement la modif car la propriété directe de l'objet est en lecture seule, il te faut passer par la collection d'objets "VBComponents()". :
Feuil1.CodeName = osCNsh & Format(osIdFeuil, "00") '<--- n'est pas autorisé !
Postes ton fichier avec des explications pour pouvoir faire des tests !
D
Daddy-Daniel
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 20 janvier 2019
Version d'Excel : 2016 FR

Message par Daddy-Daniel » 27 janvier 2019, 10:44

Re bonjour,

Merci Theze, mes connaissances en VBA ne sont pas aussi pointues que les tiennes et je ne maîtrise pas bien « VBComponents ».
Le fait d’avoir utilisé « .Parent » n’est qu’un test parmi tant d’autre pour voir si j’observais un comportement différent. Ma ligne est en fait :
ThisWorkbook.VBProject.VBComponents(Sheets(1).CodeName).Name = osCNsh & Format(osIdFeuil, "00")

"Sheets(1)" car lors de la création d'une nouvelle année je la déplace en pole position.
"osCNsh" n'est autre que "Feuil".
"osIdFeuil" l'ID de ma feuille stocké par sécurité dans un fichier *.INI
"Format(mavariable,"00")" car j'oblige Excel à classer mes objets dans un ordre chronologique pur (Feuil01 ... Feuil99).

Mon projet est une assistance comptable avec 17 feuilles et des données confidentielles. Je vais préparer une mouture vierge et allégée sans données et la joindre lors d'un prochain message.

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

Message par Daddy-Daniel » 27 janvier 2019, 17:54

Bonsoir;

Après moultes recherches j’ai fini par trouver ce qui clochait dans mes codes et qui entraînait la fermeture des "userforms" en modifiant le CodeName d’une feuille nouvellement créée.

Je déclarais mes "userforms" en mode "non modal" (Mon_UserForm.Show 0) ! En effet je souhaitais conserver la possibilité d’intervenir sur mes feuilles avec l’usf ouvert.

J’ai fais des essais avec le mode "modal" (Mon_UserForm.Show) et là surprise :o , il n’y a plus d’arrêt de VBA et par la même occasion mes usf restent ouvertes ! :lole:

Je vais tout remettre mes codes en place et vous tiens informé du résultat.

J'invite PE_67 à vérifier ses UserForm.Show pour voir si ça fonctionne chez lui.

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

Message par Daddy-Daniel » 27 janvier 2019, 19:21

Re-Bonsoir,

J'ai remis mes codes à jour dans mon projet principal et tout fonctionne correctement. :lole: ::D

Je vous joint le fichier "Test" qui m'a permis de détecter l'erreur et tester les solutions.
CodeNameTest1 (1).xlsm
(72.77 Kio) Téléchargé 5 fois
Merci à tous, j'attend vos retours. :)
Cordialement.
Daddy
Avatar du membre
PE_67
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 11 janvier 2019
Version d'Excel : 2013

Message par PE_67 » 28 janvier 2019, 23:12

Daddy-Daniel a écrit :
25 janvier 2019, 15:53
Bonjour,
Je joint un exemple tiré du code de Theze et qui fonctionne avec Excel 2016, PE_67 as-tu l'occasion de le tester et au besoin de l'ajuster à ton besoin pour voir si ça marche.
Je continue à travailler dessus pour voir ce qui entraîne la fermeture de nos usf !
Cordialement.
Daddy

CodeNameTest1.xlsm
Bonjour Daddy-Daniel,

Désolé pour la réponse tardive. Effectivement ton fichier fonctionne également chez moi sans fermeture de l'USF !
J’ai fais des essais avec le mode "modal" (Mon_UserForm.Show) et là surprise :o , il n’y a plus d’arrêt de VBA et par la même occasion mes usf restent ouvertes ! :lole:
Comme tu l'indiques dans ton dernier post, il faut donc être en mode Modal (bien vu !!). Mais dans mon cas ce n'est pas envisageable, je dois toujours avoir la main sur mes feuilles en même temps que mes Userform sont ouvertes... :x alors j'ai tenté de modifier le mode en Modal avant la ligne de code de modification du CodeName puis de remettre le mode "non Modal", mais ça ne suffit pas visiblement... tant pis pour moi ! Je continue de me débrouiller sans modifier le CodeName, ça me va bien aussi.

Nota : sur ton fichier en début du message, j'ai également testé en changeant la propriété ShowModal de l'USF, et bonne nouvelle ça fonctionne également ! mais pas sur mon fichier... Du coup je ne comprends plus rien 8[] 8[] 8[] Pas grave, je laisse tomber pour le CodeName !

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

Message par Daddy-Daniel » 29 janvier 2019, 12:45

Bonjour PE_67,

Le problème de CodeName qui arrête intempestivement VBA après la procédure de renommage est donc identifié et vient bien du mode "modal" qui coince.

Je ferais le même essai que toi sur ShowModal pour voir.

==> J'essaierais aussi si, sans fermer l'usf de Saisie "Non Modal", à l'étape de renommage du CodeName, d'ouvrir une nouvelle "usfModal" avec simplement :
a)le code de renommage dans le "sub UserForm_Initialize()",
b)le message "L'exercice xxxx a été généré !" dans un label,
c)un simple bouton "ok" pour sortir de cette usf et retourner à l'usf de Saisie.
comme s'il s'agissait d'un simple msgbox.

Je te tiendrais informé du résultat.
Cdt
Daddy
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message