Tout est dans le titre...
Durant ma macro, je copie vers un nouveau classeur certaines feuilles de mon tableur excel; ces même feuilles ont des macros associées dans mon classeur principal. Je les enregistrent etc... et lorsque je veut traiter ce nouveau classeur, les liens vers les macros que j'ai instaurés sont encore présent, mais les macros elles ont disparues.
Le problème vient surement du code utilisé lorsque je copie mes feuilles alors voilà:
A force de trifouiller les codes pendant une journée de repos ( ), j'ai réussi à trouver ça:
Code :
Set w1 = ThisWorkbook
Set w2 = Workbooks.Add(xlWBATWorksheet)
Dim S As String
With w1.VBProject.VBComponents("Module2" ).CodeModule
S = .Lines(1, .CountOfLines)
End With
With w2.VBProject.VBComponents("Feuil1" ).CodeModule
.AddFromString S
End With
With w1.VBProject.VBComponents("Module3" ).CodeModule
S = .Lines(1, .CountOfLines)
End With
With w2.VBProject.VBComponents("Feuil2" ).CodeModule
.AddFromString S
End With
L'inconvénient c'est qu'il ne copie pas les codes des module 2 et 3 dans mon nouveau classeur, mais on dirait qu'il me créer des liens avec mon classeur d'origine.
Ce qu'il fait que lorsque j'exécute un des modules que j'ai copié, il ouvre mon classeur d'origine et exécute le programme à partir de celui-ci.
C'est quoi cette bouse dans ton premier code !?
Lequel veux-tu sauvegarder ? W1 ou W2 ?
J'ai oublié d'éditer. c'est w2 que je veux sauvegarder
ta technique marche nickel, plus aucun problème.
Juste une dernière question, à l'ouverture du classeur, une de mes feuille contient des liens vers un autre classeur. Du coup, a chaque fois que j'ouvre cette feuille il me demande si je veux mettre à jour ces liens...
Existerait-il une commande permettant d'éviter l'affichage de cette fenêtre, je suppose du type:
Le message intempestif te propose de mettre à jour ou de ne pas mettre à jour tes liaisons. Mais il te propose aussi de l'aide que je t'invite à consulter.
Bonne lecture.
---------------------------------------------------------------
Ce que l'aide dit
Citation :
Pour ne pas demander si les liaisons doivent être mises à jour à l'ouverture d'un classeur, et mettre à jour les liaisons automatiquement
Dans le menu Outils, cliquez sur Options, puis sur l'onglet Modification.
Désactivez la case à cocher Confirmation de la mise à jour automatique des liens. Si cette case à cocher est désactivée, les liaisons sont automatiquement mises à jour, et aucun message d'invite ne s'affiche.
Pour ne pas demander la mise à jour des liaisons pour ce classeur, et laisser l'utilisateur contrôler la mise à jour des liaisons
Avertissement Cette option affecte tous les utilisateurs du classeur. Si vous choisissez de ne pas mettre à jour les liaisons, et que vous demandez à l'application de ne pas afficher de message d'invite, les utilisateurs du classeur ne sauront pas que les données sont obsolètes.
Dans le menu Edition, cliquez sur Liaisons.
Cliquez sur Invite de démarrage.
Sélectionnez l'option souhaitée.
Remarque Vous serez encore averti si certaines liaisons sont rompues.
bah oui!!
Mais ca veut dire qu'il faut que je fasse le tour des 150 pc qui vont utiliser mon programme pour leur paramétrer Excel comme il faut... Prise de tête assurée, et je suis sur qu'il existe une solution beaucoup plus simple que cette méthode.
bah... La fenêtre intempestive n'apparait plus, mais le navigateur apparait disant 'fichier non trouvé'. Comme si je lui avait répondu 'oui' à la mise à jour des liens. Tu vois ce que je veux dire?
Mais...tu vois la fênetre qui s'affiche lorsque tu répond 'oui' à la demande de mise à jour des liens alors qu'il ne trouve pas ton fichier.
Bah c'est celle-là qui s'affiche.
j'ai essayé de ruser en mettant
Code :
AskToUpdateLinks = 7
Pour lui faire croire que je lui répondait non, mais il n'y a pas cru... il est futé quand même