Diffusion de module dans des classeurs différents

Bonjour à tous,

Je cherche à diffuser des modules dans des fichiers excel, je précise :

  • j'ai un fichier de base que je maintiens à jour et sur lequel je modifie des macros pour corriger certaines évolutions,
  • j'ai plusieurs fichier que je diffuse sur les autres centres de ma société qui sont alimentés par mes collaborateurs.

Ce que je voudrais : un code VBA qui prendrai le module complet de mon fichier de base pour aller le dupliquer dans tous les fichiers des autres centres.

Etant donné que je peux le faire sur des fichiers différences (prévisions, personnel, stats paie,...) j'ai créé un tableau afin de renseigner les fichiers visés.

j'ai essayé de fouiler partout sur les forums mais sans succés. la seul commande que j'ai trouvé mais qui plante c'est : ActiveWorkbook.VBProject.VBComponents.export ("c:\tintin.bas")

Je m'en remets à vous les experts...

Par avance merci de votre aide

Benoit

voici le début de code que j'ai écrit

Sub mAjour()

Set NOMfichier = ActiveSheet

fichierREF = Range("A2")

cheminREF = Range("B2")

modulerE = Range("C2")

SauvegarD = Range("C5")

FermetuR = Range("D5")

ChDir cheminREF

Workbooks.Open Filename:=cheminREF & "\" & fichierREF

'exportation du module de base

For Each FichierCIBLE In Range("A5:A22")

NOMfichier.Activate

If FichierCIBLE = "" Then

Else

FichierCIBLE.Select

CheminCIBLE = ActiveCell.Offset(, 1)

ChDir CheminCIBLE

Workbooks.Open Filename:=CheminCIBLE & "\" & FichierCIBLE

'importation du module du fichier référence

End If

Next

End Sub

Bonjour,

Perso, je n'ai jamais tenté la chose ...

Mais est-e que tu as lu ce site ? http://www.cpearson.com/excel/vbe.aspx

ric

Bonjour,

J'ai un petit peu perdu de vue ce genre de sport, aussi je vais peut-être en faire pleurer certains mais... mais ils se feront un plaisir de rectifier mes âneries ! Tu as probablement une possibilité beaucoup plus simple :

Séparer le classeur "utilisateur" de son programme qui deviendra en quelque sorte le "perso.xlam" de ce classeur.

La seule macro du classeur "utilisateur" sera de lancer l'activation du programme à l'ouverture et de créer un lien avec ce dernier.

Ainsi tu pourras modifier ton programme simplement en lançant un batch la nuit qui remplacera l'ancien programme , ou au petit matin avant que les utilisateurs ne lancent leur machine... et le classeur de données lui n'est jamais touché.

Hum... Enfin ce que je dis n'est pas tout à fait vrai car il me semble que la xlam ne peut gérer les macros évènementiels des feuilles du classeur appelant. Donc si une évènementielle doit être modifiée il faudra faire appel à l'éditeur VBA depuis la xlam pour modifier ces évènementielles. Bon c'est sportif, avec un peu de soin, si on n'est pas manchot... c'est faisable.

A+

Bonjour,

Ne serait-il pas plus simple de remplacer les fichiers cibles ?

Et de récupérer les données, voire déplacer (pas copier) toutes les anciennes feuilles vers le nouveau fichier

Ne serait-il pas plus simple de remplacer les fichiers cibles ?

Et de récupérer les données, voire déplacer (pas copier) toutes les anciennes feuilles vers le nouveau fichier

Je n'ai pas envisagé la situation avec ce point de vue !

Très intéressant je pense avoir un début de solution (alternative) !

merci

Perso, je n'ai jamais tenté la chose ...

Mais est-e que tu as lu ce site ? http://www.cpearson.com/excel/vbe.aspx

Pas mal ça donne des idées mais il y a du taf

merci pour ton lien

Séparer le classeur "utilisateur" de son programme qui deviendra en quelque sorte le "perso.xlam" de ce classeur.

c'est une piste... merci pour ça

bonjour à tous

ou encore de mettre une image de tous les fichiers dans un fichier d'exploitation des données ?

avec le menu Données /obtenir de fichiers/de classeur

amitiés

Bonjour,

MERCI pour vos réponse.

En effet en arrivant à la manipulation de module je ne rends compte qu'il est temps d'avoir une réflexion sur un SGBD.

Pour le cours terme je suis vais faire comme suit :

  • j'ai un fichier de base que je modifie
  • J'ouvre un fichier d'un centre (que je sauvegarde) où je prends les feuilles dont j'ai besoin vers le fichier de base
  • j'enregistre le fichier de base à la place du fichier du centre
et je mets tout ça en boucle.

Merci encore à bientôt

ou encore de mettre une image de tous les fichiers dans un fichier d'exploitation des données ?

avec le menu Données /obtenir de fichiers/de classeur

amitiés

aie j'ai vu ta réponse trop tard... en effet ça aurait pu coller mais pas tout à fait :

un gros fichier de base ou je supprime ce dont je n'ai pas besoin et que j'enregistre pour chaque centre.

Le problème est que chaque utilisateur modifie quasiment en temps réel son fichier... donc il faut que je récupère les données (utilisateurs) avant de les mettre à jour (code vba).

merci pour ton aide je pense qu'elle peut m'aider pour d'autres applications.

A+

Bonjour,

J'ai solutionné mon problème :

une barrière était que le ActiveWorkbook.VBProject.VBComponents(modulerE).Export Chemin était bloqué à cause des paramètres de sécurité d'Excel...

j'ai retrouvé un ancien post qui m'a sauvé et j'ai finalement abouti avec le code suivant qui fonctionne très bien :

Set NOMfichier = ActiveSheet

If Range("A2") = "" Or Range("B2") = "" Or Range("C2") = "" Or Range("C5") = "" Or Range("D5") = "" Then

MsgBox ("il manque des données !")

Exit Sub

End If

fichierREF = Range("A2") ' fichier qui sert de référence

cheminREF = Range("B2") ' son emplacement

modulerE = Range("C2")' le nom du module à diffuser

SauvegarD = Range("D5") ' est ce que je sauvegarde avant à la fin du transfert

FermetuR = Range("C5") 'est ce que je ferme le fichier que je viens de mettre à jour

ChDir cheminREF

Workbooks.Open Filename:=cheminREF & "\" & fichierREF

'exportation du module de base

Chemin = "C:\Documents\Archives\" & modulerE & ".bas"

ActiveWorkbook.VBProject.VBComponents(modulerE).Export Chemin

' Application.DisplayAlerts = False

NOMfichier.Activate

For Each FichierCIBLE In Range("A5:A22")

NOMfichier.Activate

If FichierCIBLE = "" Then

Else

FichierCIBLE.Select

CheminCIBLE = ActiveCell.Offset(, 1)

ChDir CheminCIBLE

Workbooks.Open Filename:=CheminCIBLE & "\" & FichierCIBLE

'importation du module du fichier référence

Set Wbk = ActiveWorkbook

'teste si le module est déjà présent dans le classeur ou si un module porte déjà ce nom

On Error Resume Next

Set TestMod = Wbk.VBProject.VBComponents(modulerE)

'si pas d'erreur, le module existe demande alors si on veux le remplacer

'dans la négative, il sera renommé en "MonModule1" ou "MonModule2" etc...

'sinon, le module existant sera supprimé et remplacé par le nouveau

If Err.Number = 0 Then

If MsgBox("Le module '" & modulerE & "' existe déjà dans le classeur '" & Wbk.Name & "' !" _

& vbCrLf _

& vbCrLf _

& "Voulez-vous le remplacer ?", _

vbQuestion + vbYesNo) = vbYes Then

Wbk.VBProject.VBComponents.Remove TestMod

End If

Err.Clear

End If

Wbk.VBProject.VBComponents.Import Chemin 'importe

If SauvegarD = "OUI" Then

If FermetuR = "OUI" Then

Wbk.Close True 'enregistre et ferme

Else

Wbk.Save

End If

End If

End If

Next

Set MonficgierSuppr = CreateObject("Scripting.filesystemobject")

' MonficgierSuppr.deletefile (ThisWorkbook.Path & "\" & "*.bas")

Application.DisplayAlerts = True

End Sub

Rechercher des sujets similaires à "diffusion module classeurs differents"