Macro pour changer Module

  • Initiateur de la discussion Initiateur de la discussion fileofish
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fileofish

XLDnaute Occasionnel
Bonjour,

Bon ce coup ci c'est pas très facile - je suis allé sur internet pour regarder et ca n'a pas l'air évident 😕

Je souhaiterais modifier le Module 1 dans plusieurs fichiers (1-50) à partir du module 1 d'un fichier (A)
Je sais comment ouvrir les 50 fichiers les uns apres les autres.
Mais j'aimerais connaitre le code qui :
1/ - Va suprimer le module 1 du fichier 1 par exemple
- Et Prendre le module 1 du fichier A et l'insérer dans le fichier 1

Nb : Un copier coller du code m'irai aussi

😕

Si vous voyez un moyen de faire ca je suis preneur !!

Encore merci
Philippe
 
Dernière édition:
Re : Macro pour changer Module

Bonjour,

regarde ceci, si cela peut te permettre d'avance, pour supprimer un module :
Code:
With Workbooks("Classeur1.xls").VBProject
    .VBComponents.Remove .VBComponents("Module1")
End With

pour en copier un (export / import) :
Code:
Dim f As String
f = ThisWorkbook.Path & "\test.bas"
Workbooks("Classeur1.xls").VBProject.VBComponents("Module1").Export f
Workbooks("Classeur2.xls").VBProject.VBComponents.Import f
Kill f

attention la case "faire confiance au projet visual basic" doit être cochée dans les options de sécurité.

bon après midi
@+
 
Re : Macro pour changer Module

Bonjour.
Vous aurez besoin d'une varable déclarée :
VBC As VBIDE.VBComponent
sur laquelle vous pourrez faire :
Set VBC = ThisWorkbook.VBProject.VBComponents("Module1")
Cherchez dans l'aide les méthodes et propriété attachées à ces objets.
Mais, un conseil, étudiez d'abord toute possibilité de faire autrement. Notamment une seule macro qui sert à tous les fichiers.
Cordialement

Bonjour Pierrot. À la bourre moi.
 
Dernière édition:
Re : Macro pour changer Module

Bonjour tout le monde !
Merci pour vos contributions
J'ai pris un peu de retard hier alors je ne fais les test que maintenant !

Est ce que la macro au complet est celle ci ?

Option Explicit


Private Sub Module_Change()

VBC As VBIDE.VBComponent
Set VBC = ThisWorkbook.VBProject.VBComponents("Module1")

With Workbooks("Classeur1.xls").VBProject
.VBComponents.Remove .VBComponents("Module1")
End With

Dim f As String
f = ThisWorkbook.Path & "\test.bas"
Workbooks("Classeur1.xls").VBProject.VBComponents("Module1").Export f
Workbooks("Classeur2.xls").VBProject.VBComponents.Import f
Kill f

End Sub


Merci le forum¨
Philippe
 
Re : Macro pour changer Module

Re Bonsoir
J'ai fait 2 tests :
1/ Avec le 1er code cité ci dessus :
J'ai un message d'erreur de compilation : "Instruction incorrecte à l'extérieur d'un bloc de type"

2/ En laissant uniquement le code de Pierrot93
J'ai un message d'erreur exécution 1004 :"L'accès par programme au projet visual n'est pas viable"

Ca parle à quelqu'un ? Parceque pour moi c'est du chinois !!

Merci d'avance
Philippe
 
Re : Macro pour changer Module

Bonsoir
Dim VBC As VBIDE.VBComponent
VBIDE c'est le nom de la bibliothèque "Microsoft Visual Basic for Application Extensibitity 5.3"
Vous aurez besoin de sa référence aussi pour que le type soit reconnu, mais après cela c'est plus pratique: les méthodes et propriétés sont suggérées à la frappe.
Effectivement, il faut aussi que votre application fasse confiance au projet Visual Basic. C'est une case à cocher quelque part.
À +
 
Dernière édition:
Re : Macro pour changer Module

Merci Danreb !!
Mais pour moi ce n'est pas très évident !!!
Je mets un fichier en ligne!
Par contre je ne veux pas remover le module

Voila je vais m'expliquer un peu plus clairement ce qui changera 😀

J'ai 50 fichiers dans lesquels j'ai un module 1
=> Mais il y a une erreur

J'utilise un fichier qui est à peu près celui qui est en pièce jointe et qui m'ouvre chacun des fichiers les uns apres les autres (en les enregistrant avant l'ouverture d'un autre)
Je voudrais que ce fichier que contient le bon module 1 vienne :
Supprimer le module du mauvais fichier1 (ex le fichier 1 sur 50)
Copie le bon module dans le fichier 1

Ensuite enregistre et ouvre le suivant (fichier 2) ca c'est OK

Supprimer le module du mauvais fichier2 (ex le fichier 2 sur 50)
Copie le bon module dans le fichier 2

Et ansi de suite


Bon ci cela n'est pas très explicit n'hésitez à me redemander de réexpliquer
Désolé

Merci beaucoup
Philippe
 

Pièces jointes

Dernière édition:
Re : Macro pour changer Module

Est-ce qu'il ne serait pas possible d'écrire le Module1 dans un classeur de macro de telle sorte qu'il puisse traiter de la même façon tous les classeurs ? Ainsi il ne nécessiterait pas cette opération en cas d'amélioration.
Mais je sais que cela n'est pas toujours possibles, j'ai aussi des modules identiques dans plusieurs classeurs, mais alors complètement différents et non attachés à une même application pour les traiter. Ce sont alors toujours des modules à vocation utilitaire.
Pour reporter les améliorations, j'utilise un outil de mise à niveau de code que je me suis créé.
Vous pouvez vous inspirer des instructions utilisant les fournitures VBIDE pour ce que vous avez à faire si vous êtes sûr que cela ne peut pas se résoudre par un module unique dans un classeur de macros.
À +
 

Pièces jointes

Re : Macro pour changer Module

WoW sacré fichier dis donc Dranreb j'en reste bouche bée !
Par contre je suis pas sur de savoir faire fonctionner la bête ! C'est comme faire conduire une Ferrari à quelqu'un qui à l'habitude de conduire une 2ch au 1er virage c'est le drame !
Tout ca pour dire que je cours droit dans le mur !
Le peu que j'ai compris!
- Dans l'onglet rouge je mets la macro de base (celle qui est fausse)
- Dans l'onglet bleu je mets la macro corrigée
- Dans l'onglet archive je mets le chemin de mes 50 fichiers
- Après j'appuie sur le bouton "play" dans l'onglet fusion (en espérant que ca fasse pas tout sauter 🙂)
 
Re : Macro pour changer Module

Non ça ne marche pas comme ça. Il y a une feuille MEmploi qui explique comment s'en servir.
Mais là je l'ai plutôt mis pour que vous voyez l'emploi des méthodes InsertLines et DeleteLines des objets CodeModule dans les procédures Conserver et Insérer du module MisesÀNiveau.
Mais encore une fois pourquoi ne dites vous rien de l'idée d'utiliser un seul module pour tous les classeurs ?
Un bouton de formulaire par exemple peut se voir affecter une macro d'un autre classeur. Comme ça vous n'auriez plus jamais besoin de trainer la même macro dans 50 classeurs ! Elle serait toujours à jour des dernières modifs dans un seul classeur.
À +
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour