faire une maj de macro d'un classeur à ' autre

Evelynetfrancois

XLDnaute Impliqué
Bonjour tout le monde …
Plutôt que d’apporter une modif sur les macros, de chaque classeur ( des fois loin)
Je souhaite qu’à partir d’un classeur ouvert ‘ modifier une macro (MAJ) de l’autre classeur ouvert pour en realiser sa mise a jour (modifier une macro )
Comme le ferait une mise à jour,
Est-ce très compliqué ou pas ?
Merci pour toutes vos sujétions
bonne journée a tous
E et F
 

flyonets44

XLDnaute Occasionnel
Re : faire une maj de macro d'un classeur à ' autre

Bonjour
Une solution, tu mets ta macro dans un module, tu exportes ce module,
tu changes de classeur, et tu importes ensuite ce module exporté dans
le classeur de destination
Cordialement
FLYONETS
 

Evelynetfrancois

XLDnaute Impliqué
Re : faire une maj de macro d'un classeur à ' autre

bonjour flyonets44, kjin
pour plus de precision kjin, le module complet me parait etre une bonne alternative

le but etant que se changement se fasse automatiquement par une personne lambda , juste utilisateur final sans aucune connaissance vba ou autre

merci pour tout !!
E et F
 

JNP

XLDnaute Barbatruc
Re : faire une maj de macro d'un classeur à ' autre

Bonjour le fil :),
A condition de créer un répertoire temp à la racine du C: (ou de changer le chemin) et d'accepter dans les options l'accès approuvé au projets VBA :rolleyes:
Code:
Sub repérage()
Dim MonModule As Object, I As Integer, Msg As String
For Each MonModule In ThisWorkbook.VBProject.VBComponents
I = I + 1
Msg = Msg & MonModule.Name & " : " & I & vbCrLf
Next
MsgBox Msg
End Sub
permetra de connaître l'index du module à copier (il me semble que le nom ne permet pas de le manipuler :eek:).
Code:
Sub Copie()
Dim MonClasseur As Workbook
ThisWorkbook.VBProject.VBComponents(6).Export "C:\temp\temp.bas"
For Each MonClasseur In Workbooks
If MonClasseur.Name <> ThisWorkbook.Name And MonClasseur.Name <> "PERSONAL.XLSB" Then
MonClasseur.VBProject.VBComponents.Import "C:\temp\temp.bas"
End If
Next
Kill "C:\temp\temp.bas"
End Sub
fera ensuite la copie, ici, j'ai indiqué 6 qui correspondait au module relevé par la première macro, à adapter bien sûr :p...
PERSONNAL.XLSB (classeur des macros personnelles 2007-2010) est bien sûr à adapter en version 2002 :rolleyes:...
Et bien sûr, ne laisser ouvert que les fichiers qui doivent recevoir le module ;) !
Bon WE :cool:
 

kjin

XLDnaute Barbatruc
Re : faire une maj de macro d'un classeur à ' autre

Bonjour,
Pour ma part, la demande reste trop floue !
Si tu dois exporter un module, c'est que qqu'un l'aura crée au préalable et donc mis les mains dans le code et pour un utilisateur lambda...
Donc 2 possibilités, soit directement à partir de VBE...
Code:
Sub ImportExport()
Dim tmp$
'classeur1 source contenant la macro
Set wb1 = ThisWorkbook
'classeur2 destination supposé ouvert
Set wb2 = Workbooks("classeur2.xls")

'chemin du fichier temporaire
tmp = wb1.Path & "\tmp.bas"

'Export du module "Module1" du classeur1
wb1.VBProject.VBComponents("Module1").Export (tmp)

'suppression du module "Module1" dans le classeur2
With wb2
    On Error Resume Next
    With .VBProject.VBComponents
        .Remove .Item("Module1")
    End With
    On Error GoTo 0
    
    'Réimport du module "Module1" en le renommant "Module2" dans le classeur2
    .VBProject.VBComponents.Import(tmp).Name = "Module2"
End With

'suppression du fichier temporaire
Kill tmp
End Sub
....soit en sauvegardant le code comme un fichier texte
A+
kjin
 

MJ13

XLDnaute Barbatruc
Re : faire une maj de macro d'un classeur à ' autre

Bonjour à tous

Bon j'y suis :).

En reprenant le code de Jean-Noël, j'ai fait ce code qui me permet de copier un fichier .bas que j'ai copier préalablement en tant que module dans le classeur actuel.

Mais je voudrais le copier dans la feuille ThisWorkbook et pas en tant que module. Comment faire?

Merci d'avance.


Code:
Sub Copie_VBModule_ThisWorkbook()
ActiveWorkbook.VBProject.VBComponents.Import "C:\_VBA\ImportModules\M_ThisWorkbook_Copy_VB_Img.bas"
End Sub
 

MJ13

XLDnaute Barbatruc
Re : faire une maj de macro d'un classeur à ' autre

Re

Bon, c'est pas très simple, mais j'ai fait ce code qui à l'air d'être OK :):

Code:
Sub A_A_Copy_VB_Img_In_Thisworkbook()
Close
'Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]
Open "C:\_VBA\ImportModules\M_ThisWorkbook_Copy_VB_Img.bas" For Input As #1
i = 1
With ActiveWorkbook.VBProject.VBComponents("Thisworkbook").CodeModule
Line Input #1, ligne$
While EOF(1) <> True
Line Input #1, ligne$
.InsertLines i, ligne$: i = i + 1
Wend
End With
Close
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : faire une maj de macro d'un classeur à ' autre

Bonjour.
Je pense que ceci pourrait entrer dans le cadre de cette discussion.
C'est un outils qui peut effectuer des modifications de code depuis Excel.
Un outils vraiment très pratique si on a de nombreux exemplaires de routines identiques au départ qui évoluent ensuite séparément, lorsqu'on veut régulariser partout les meilleures améliorations sans se tromper.
Cordialement
 

Pièces jointes

  • MiseÀNiveau.zip
    174 KB · Affichages: 70

Dranreb

XLDnaute Barbatruc
Re : faire une maj de macro d'un classeur à ' autre

Bonjour Pierrot93.
Désolé, je n'arrive pas à le réduire pour qu'il passe non zippé


C'est peut être du à une salopperie de "winrar" que je me suis un jour laissé installer (pour rien d'ailleurs, les tutos VB6 que j'essayais d'obtenir étant restés inexploitables pour moi sous leur forme) et que je n'ai pas les droits nécessaires pour desinstaller.

JM13, pourrais tu le re-joindre compressé pour Pierrot ?
À+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 304
Messages
2 087 065
Membres
103 451
dernier inscrit
Souleymane