MAJ d'un fichier
Bonjour à tous,
alors je m'explique de façon plus détaillée. J'utilise Excel 2003 SP3, en windows XP SP3.
J'ai créer un classeur de travail "TRAVAIL" (protégé par un mot de passe VBA), avec pas mal de macros, dont le module "EffaceN".
Par ailleurs, j'ai prévu dans mon classeur "TRAVAIL" une possibilité de mise à jour, par le biais d'un bouton dans ma barre d'outils, avec ce code précis, qui me permet d'ouvrir un fichier précis (Maj.xls) :
Sub Maj()
If Dir("G:\BIBLIO\EXPERT\MAJ\Maj-R.xls", vbDirectory) <> "" Then
Workbooks.Open "G:\BIBLIO\EXPERT\MAJ\Maj.xls"
Else
MsgBox ("Pas de mise à jour disponible")
End If
End Sub
Alors, tout mon problème réside dans le fait que je souhaite modifier une partie de mon module "EffaceN" dans tous mes classeurs "TRAVAIL" éparpillés dans mon entreprise. Mais si je dois remplacer tout le module, ça me va aussi, pas de problème.
Donc, je me demande comment je peux, dans un fichier nommé "MAJ", faire supprimer le module "EffaceN" existant dans mon "TRAVAIL", et le substituer par un module "EffaceN" qui serait contenu dans mon fichier Maj.xls.
Merci de votre aide, car je sèche un peu.
Yann
tout dépend du nombre de "remplacement" que tu as a faire, une dizaine, fait le à la main. Une centaine, on pourrait regarder pour une solution.
Bonjour,
ben, il y a plus d'une centaine de fichiers en circulation dans mon entreprise, donc cela en fait pas mal tout de même....
Une solution par "mise à jour" sera sûrement le mieux.
merci de ton aide.
Yann
Le problème, c'est que ton code est protégé par mot de passe. Sans mot de passe tu aurais pu te servir de cette procedure:
Public Sub MajModule()
'On Error GoTo Erreur
Application.ScreenUpdating = False
Dim Source As Workbook
Set Source = ThisWorkbook
Dim strModule As String
With Source.VBProject.VBComponents("EffaceN").CodeModule
strModule = .Lines(1, .CountOfLines)
End With
strModule = Replace(strModule, "Option Explicit", "")
Dim NomClasseur As Variant
NomClasseur = Application.GetOpenFilename("Fichiers Excel (*.xls), *.xls", , "Fichier à modifier")
If Not NomClasseur = False Then
Workbooks.Open NomClasseur
Dim Destination As Workbook
Set Destination = ActiveWorkbook
Destination.Activate
With Destination.VBProject.VBComponents("EffaceN").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString strModule
End With
MsgBox "Le classeur " & Destination.Name & " à été modifié avec succès"
Destination.Close SaveChanges:=True
End If
Erreur:
Application.ScreenUpdating = True
End Submais je n'ai pas trouvé de façon d'enlever le mot de passe en code. Une solution qui demande un peu de restructuration serait de créer un fichier xla ( macro complémentaire ) contenant les macros qu'ensuite tu distribue sur les postes de chacun. Une autre solution à tester, tu enregistre un classeur xls avec tes macros, tu le déposse à un emplacement défini sur le réseau, et tu modifie les classeurs pour qu'ils appellent les macros depuis ce classeur avec la function run:
Run "CheminEtNomDuClasseur.xls!NomDeLaMacro"