Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Classeurs Excel liés à un fichier macros sur un réseau

9 réponses
Avatar
HD
Bonjour,

J'ai de nombreux fichiers pour lesquels une même macro est amenée à évoluer.
Sur ces fichiers les utilisateurs vont devoir saisir un tas de données. Pour
éviter d'avoir à ressaisir toutes les données d'un classeur d'une version à
l'autre (avec les macros différentes), je voudrais savoir si il serait
possible d'associer des classeurs à un fichier de macros situé sur le réseau
et non sur le poste (comme avec un xla) ce qui me permettrait de mettre
simplement à jour ce fichier sans avoir à mettre à jour toutes les macros
des classeurs.

Mais est-ce possible ?

Merci d'avance pour votre aide
--
@+
HD

9 réponses

Avatar
HD
Il faudrait que ce "fichier de macros" se charge automatiquement à
l'ouverture des classeurs pour lesquels ces macros sont nécessaires.

--
@+
HD
Avatar
Michel Pierron
Bonsoir HD;
Oui, c'est possible avec un classeur central contenant les macros et un menu
permettant l'ouverture des différents fichiers. Les fichiers modifiables par
les utilisateurs peuvent être partagés tandis que le classeur central
servant d'interface n'est jamais modifiable par les utilisateurs. Il suffit
de le mettre en lecture seule pour qu'il soit multi-utilisateurs.

MP


"HD" a écrit dans le message de
news:it7osh$uod$
Bonjour,

J'ai de nombreux fichiers pour lesquels une même macro est amenée à
évoluer. Sur ces fichiers les utilisateurs vont devoir saisir un tas de
données. Pour éviter d'avoir à ressaisir toutes les données d'un classeur
d'une version à l'autre (avec les macros différentes), je voudrais savoir
si il serait possible d'associer des classeurs à un fichier de macros
situé sur le réseau et non sur le poste (comme avec un xla) ce qui me
permettrait de mettre simplement à jour ce fichier sans avoir à mettre à
jour toutes les macros des classeurs.

Mais est-ce possible ?

Merci d'avance pour votre aide
--
@+
HD

Avatar
MichD
Bonjour,

Enregistre le fichier des macros comme un fichier .xla quelque part sur le réseau.

IMPORTANT: Dans la fenêtre de l'éditeur de code, sélectionne ton projet VBA de ton fichier xla
et modifie la propriété "Name" de ton projet pour un nom dont tu sais qu'il sera unique.

Met ce fichier en lecture seule, il pourra s'ouvrir autant de fois que le besoin se fait sentir
sans aucun message...

Dans les fichiers où la présence de ce fichier xla est nécessaire, tu ajoutes dans l'événement
Workbook_Open du Thisworkbook ou dans la macro "Sub AutoOpen() dans un module standard,
ce qui suit. Tu pourras appeler chacune des macros du fichier .xla comme si ces procédures faisaient partie du classeur
nécessitant la présence de ce fichier...

'----------------------------------
Private Sub Workbook_Open()
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromFile _
"ServeurCheminTonFichier.xla"
End Sub
'----------------------------------


MichD
--------------------------------------------
"HD" a écrit dans le message de groupe de discussion : it7osh$uod$

Bonjour,

J'ai de nombreux fichiers pour lesquels une même macro est amenée à évoluer.
Sur ces fichiers les utilisateurs vont devoir saisir un tas de données. Pour
éviter d'avoir à ressaisir toutes les données d'un classeur d'une version à
l'autre (avec les macros différentes), je voudrais savoir si il serait
possible d'associer des classeurs à un fichier de macros situé sur le réseau
et non sur le poste (comme avec un xla) ce qui me permettrait de mettre
simplement à jour ce fichier sans avoir à mettre à jour toutes les macros
des classeurs.

Mais est-ce possible ?

Merci d'avance pour votre aide
--
@+
HD
Avatar
HD
IMPORTANT: Dans la fenêtre de l'éditeur de code,
sélectionne ton projet VBA de ton fichier xla et modifie
la propriété "Name" de ton projet pour un nom dont tu
sais qu'il sera unique.


Ok, je l'ai appelé "Budget_Heures".

Met ce fichier en lecture seule, il pourra s'ouvrir autant
de fois que le besoin se fait sentir sans aucun message...


Ok

Dans les fichiers où la présence de ce fichier xla est
nécessaire, tu ajoutes dans l'événement Workbook_Open
du Thisworkbook ou dans la macro "Sub AutoOpen() dans
un module standard, ce qui suit. Tu pourras appeler chacune
des macros du fichier .xla comme si ces procédures faisaient
partie du classeur nécessitant la présence de ce fichier...
'----------------------------------
Private Sub Workbook_Open()
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromFile _
"ServeurCheminTonFichier.xla"
End Sub
'----------------------------------


Ok, voilà mon code:

Private Sub Workbook_Open()
On Error Resume Next
Application.DisplayAlerts = False
ThisWorkbook.VBProject.References.AddFromFile "H:InfoBudget
d'heures.xla"
Application.DisplayAlerts = True
Wbk_Open
End Sub

Wbk_Open étant le code qui était auparavant dans la macro événement
Workbook_Open et que j'ai isolé en une seule function faisant partie du xla.

Mon souci est que j'ai le message d'erreur "Erreur de compilation: Sub ou
Function non définie" sur la ligne Wkb_Open... alors que cette fonction fait
bien partie du xla... Lorsque je vais dans 'Options Excel / Compléments'
effectivement mon fichier XLA ne s'est pas chargé...

Je suis en Excel 2007.

--
@+
HD
Avatar
HD
Oui, c'est possible avec un classeur central contenant les macros et un
menu permettant l'ouverture des différents fichiers. Les fichiers
modifiables par les utilisateurs peuvent être partagés tandis que le
classeur central servant d'interface n'est jamais modifiable par les
utilisateurs. Il suffit de le mettre en lecture seule pour qu'il soit
multi-utilisateurs.



Cela pourrait être une solution... mais mes utilisateurs accèdent à ces
fichiers en travaillant sur d'autres fichiers de répertoires clients. Je
pense me tourner sur la solution de MichD pour lancer un XLA à l'ouverture
du classeur. C'est à terme une solution qui, dans mon cas, pourrait être la
plus intéressante. Sinon, il me faudra peut être me tourner vers une
solution manipulant le code vba via macro pour remplacer les bouts de codes
à modifier... mais cela impliquera d'ouvrir tous les classeurs et les
modifier.

--
@+
HD
Avatar
MichD
D'abord, as-tu respecté ceci pour ton fichier de macros complémentaires ?
'----------------
IMPORTANT: Dans la fenêtre de l'éditeur de code, sélectionne ton projet VBA de ton fichier xla
et modifie la propriété "Name" de ton projet pour un nom dont tu sais qu'il sera UNIQUE.
'----------------

Ta macro doit être dans le ThisWorkbook qui requiert le fichier de macro complémentaire
et non dans le fichier de la macro complémentaire.

Ces lignes de code sont inutiles.
Application.DisplayAlerts = False
et
Application.DisplayAlerts = True

MichD
--------------------------------------------


Ok, voilà mon code:

Private Sub Workbook_Open()
On Error Resume Next
Application.DisplayAlerts = False
ThisWorkbook.VBProject.References.AddFromFile "H:InfoBudget
d'heures.xla"
Application.DisplayAlerts = True
Wbk_Open
End Sub

Wbk_Open étant le code qui était auparavant dans la macro événement
Workbook_Open et que j'ai isolé en une seule function faisant partie du xla.

Mon souci est que j'ai le message d'erreur "Erreur de compilation: Sub ou
Function non définie" sur la ligne Wkb_Open... alors que cette fonction fait
bien partie du xla... Lorsque je vais dans 'Options Excel / Compléments'
effectivement mon fichier XLA ne s'est pas chargé...

Je suis en Excel 2007.

--
@+
HD
Avatar
HD
D'abord, as-tu respecté ceci pour ton fichier de
macros complémentaires ?
'----------------
IMPORTANT: Dans la fenêtre de l'éditeur de code,
sélectionne ton projet VBA de ton fichier xla et modifie
la propriété "Name" de ton projet pour un nom dont tu
sais qu'il sera UNIQUE.
'----------------


Oui, lorsque si je lance manuellement mon fichier "Budget_Heures.xla", que
je vais dans mon projet VBA il m'apparaît bien sous le nom "Budget_Heures".
Qui est un nom unique.

Ta macro doit être dans le ThisWorkbook qui requiert
le fichier de macro complémentaire et non dans le fichier
de la macro complémentaire.


Ma macro:
Private Sub Workbook_Open()
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromFile
"H:InfoBudget_Heures.xla"
Wbk_Open
End Sub
est bien dans le projet de mon classeur qui doit faire appel aux macros de
mon fichier de macro complémentaire.

Ces lignes de code sont inutiles.
Application.DisplayAlerts = False
et
Application.DisplayAlerts = True


Ok, j'avais trouvé cette recommandation sur le net... mais avec le xla en
lecture-seule c'est peut être inutile (?).

Cela ne fonctionne toujours pas. Le fichier XLA ne se charge pas en projet
VBA.
--
@+
HD
Avatar
MichD
Ta procédure événementielle :

'--------------------
Private Sub Workbook_Open()
On Error Resume Next
Application.DisplayAlerts = False
ThisWorkbook.VBProject.References.AddFromFile "H:InfoBudget d'heures.xla"
Application.DisplayAlerts = True
Wbk_Open
End Sub
'--------------------

A) Il n'existe pas d'autres méthodes pour charger un fichier xlam comme référence.
et la méthode indiquée fonctionne si tu as respecté la procédure suggérée.

B ) J'ai utilisé "On Error Resume Next" parce que si la référence est déjà chargée et
que l'on tente de la charger à nouveau, cela provoque une erreur.

C ) Application.DisplayAlerts = False et Application.DisplayAlerts = True
Ces lignes de code ne sont d'aucune utilité.

D ) La procédure bloque sur la ligne de code Wbk_Open
Si c'est le nom de déclaration d'une procédure mise dans un module STANDARD
du fichier xlam, elle devrait s'exécuter dans aucun problème.
Si ta macro est dans le ThisWorkbook du classeur xlam, tu devras utiliser ce type de syntaxe
Application.Run "Denis.xlam!ThisWorkbook.Wbk_Open"
Si ta macro est dans un module feuille, tu remplaces "Thisworkbook" par le nom du module feuille.
Avatar
HD
Yes !!! ça fonctionne. Par contre, je ne comprends pas pourquoi puisque je
ne vois pas ce que j'ai put changer depuis...
Tout semble apparemment fonctionner normalement.

Un grand MERCI à vous MichD et Michel Pierron
--
@+
HD