Retour à la FAQ


Bonjour, je voudrais savoir s'il est possible de partager un fichier et de
pouvoir aussi utiliser les macro de ce même classeur merci à vous


>bonjour laurent et merci de t'intéresser à ma question,
>en fait, je voudrais pouvoir partagé un classeur sur un réseau, les
>utilisateurs du réseau pourraient le modifier le lire etc...
>De: kikigames


Alexandra,

Alexandra Kramoroff a écrit :
> Je viens de débarquer sur ce newsgroup, qui m'a l'air fort sympa :-)
> Et justement, j'ai exactement le même problème de tableau de planning
> bourré de macros et modifié par une dizaine de personnes à la fois.
> Jusqu'à présent, le fichier est sur le réseau, mais des modifications
> simultanées et surtout la tenue d'un historique sont impossibles,
> puisque "classeur partagé" et "macros" me semblent incompatibles.
> Laurent, as-tu essayé ta solution ? Fonctionne-t-elle ?

REPONSE DE LAURENT.

C'était juste une idée en l'air, mais oui, je viens de tester et ça fonctionne très bien.
A mon avis, le mieux est de passer par une macro complémentaire référencée par le classeur à partager:

- Déplace toutes tes macros dans un nouveau classeur, que tu enregistres
avec le type "macro complémentaire" (par exemple Test.xla) dans le même
répertoire que le classeur à partager (Test.xls)

- Ouvre la macro complémentaire Test.xla.

- Dans l'éditeur VBA, fais Outils -> Propriétés de VBAProject et donne
un nom personnalisé au projet du fichier XLA, par exemple "Macros", puis
enregistre-le.

- Ouvre le classeur à partager (Test.xls), va dans l'éditeur VBA, fais
Outils -> Référence, et coche "Macros".

Que ce soit sur le poste où il est stocké ou sur les autres postes du
réseau, l'ouverture de Test.xls entraînera automatiquement celle de la
macro complémentaire Test.xla.

Bien sûr, il faudrait que tu modifies les macros en mettant des
références explicites au classeur:
Workbooks("Test.xls").Sheets(1).Range("A1") à la place de
Sheets(1).Range("A1"), par exemple.

Seul inconvénient avec ce système : la macro complémentaire restera ouverte après la fermeture du classeur.

Pour éviter cela et sans trop compliquer les choses, tu peux tester à
intervalles régulières, dans la macro XLA, si le classeur partagé a été
fermé, auquel cas le XLA se fait aussitôt hara-kiri:

Dans le module ThisWorkbook du XLA :

Dim Wbk As Workbook

Private Sub Workbook_Open()
Set Wbk = ActiveWorkbook
Vérif
End Sub

Private Sub Vérif()
If TypeName(Wbk) = "Object" Then Me.Close
Application.OnTime Now + #12:01:00 AM#, "ThisWorkbook.Vérif"
End Sub

(Attention : non testé !)

> Si oui, comment "transporte-t-on" ce fichier ? Toujours accompagné de son classeur de macro ?

Oui. Du moment que le classeur et la macro complémentaire sont copiés
dans le même dossier, ça marche comme sur des roulettes, sans manip
supplémentaire.

Bonne chance,
Laurent

Flo a écrit :
> y'a plus qu'à faire un super rechercher remplacer pour préciser toutes les > références !


En fait, ça s'impose pas. Si tu utilises 'Sheets(1)' dans un module
standard, implicitement ça correspond à 'ActiveWorkbook.Sheets(1)' pour
VBA. Donc il n'y a pas lieu de changer tout ça dans la macro.

La seule exception, c'est le module ThisWorkbook. Là, VBA considère que
l'objet parent par défaut est ThisWorkbook et non pas ActiveWorkbook.
Donc c'est plutôt dans ce module qu'il faut préciser par exemple
ActiveWorkbook.Sheets(1) ou alors Workbooks("Test.xls").Sheets(1).

Autre point : les procédures événementielles et le code inscrit dans des
modules de feuilles de calcul. Là, il faudrait revoir le code à fond,
remplacer les anciennes P.E. par des P.E. de niveau Application, les
contrôles de la barre d'outils "Commandes" par ceux de la barre d'outils
"Formulaires", en leur attachant les macros du fichier XLA, etc. etc. Un
peu la galère. Mais s'il n'y a rien de tout ça dans le classeur, les
adaptations devraient rester mineures.

Laurent

 


[top]