merci à vous
Je ne crois pas que ce soit possible.
Mais tu pourrais peut-être essayer de placer les macros dans un autre
classeur non partagé (donc simplement lu en lecture seule), qui
manipulerait le classeur partagé?
Laurent
kikigames a écrit :
Pourquoi ? tout simplement parce que c'est un planning où différentes
personnes ont besoin d'y faire des changements, les macros posent donc un
problème
si tu as une solution, n'hésite pas, je t'en remercie par avance
:0)
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 ? Si oui, comment
"transporte-t-on" ce fichier ? Toujours accompagné de son classeur de
macro ?
Car je dois mailer le planning toutes les semaines à des gens qui
utilisent eux aussi ces macros... sans avoir besoin de classeur partagé
car ils sont non connectés au réseau.
Merci d'avance :-)
Alexandra
Laurent Longre a écrit :
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 ?
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
Laurent Longre <laurent...@free.fr> a écrit dans le message :
39F84933...@free.fr...
>
> Alexandra,
>
> Alexandra Kramoroff a écrit :
incompatibles.
> >
> > Laurent, as-tu essayé ta solution ? Fonctionne-t-elle ?
>
> C'était juste une idée en l'air, mais oui, je viens de tester et ça
> fonctionne très bien.
>
Merci beaucoup Laurent pour avoir mis ceci au point, l'avoir testé et
l'avoir expliqué clairement.
J'avais exactement le même pb à résoudre, mais vu les précédentes réponses
je me voyais mal partie
y'a plus qu'à faire un super rechercher remplacer pour préciser toutes les
références !
Est ce qu'on ne pourrait pas mettre cette réponse dans la FAQ ?
Flo
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
encore merci
;0)